国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS逆向工程(手動HOOK自己編寫的APP)- 學習整理

2019-11-09 15:09:04
字體:
來源:轉載
供稿:網友

iOS逆向工程(手動HOOK自己編寫的APP)- 學習整理

144 作者 _品味生活_ 關注2016.05.13 14:48 字數 1920 閱讀 6214評論 17喜歡 45

前言:上一篇文章已經介紹過逆向開發需要用到的一些工具,theos的基本介紹也講過了,今天來實戰HOOK一個自己的APP。

一、使用Xcode創建自己的一個用于測試的App。

目的:攔截一個自己寫的方法,然后進行重寫。APP大家可以自己創建,我這邊已經創建好了。

Bundle identifier:com.dasen.HOOK-APPAPP Name : HOOK_APP

攔截一個按鈕的點擊方法:

- (void)buttonClick { UIAlertController *alerView = [UIAlertController alertControllerWithTitle:@"提示" message:@"未被HOOK" PReferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *cancelAction =[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil]; [alerView addAction:cancelAction]; [self presentViewController:alerView animated:YES completion:nil];}
二、下載和配置theos

大家可自己手動下載官方theos然后放入ldid、CydiaSubstrate、dpkg-deb等等到目錄中,或者使用腳本下載我這邊已經放入好的theos。腳本下載地址:https://github.com/DaSens/Theos-Script

三、創建theos項目

1,首先我們配置和準備好theos后,我們進入終端,然后cd進入你要放工程的文件夾目錄比如桌面上我新建好的一個文件夾iosDev,然后執行啟動 NIC(New Instance Creator),如下:。

zhangdasendeMacBook-Pro:iOS Dev zhangdasen$ cd /Users/zhangdasen/Desktop/iOSDevzhangdasendeMacBook-Pro:iOSDev zhangdasen$ /opt/theos/bin/nic.plNIC 2.0 - New Instance Creator------------------------------ [1.] iphone/activator_event [2.] iphone/application_modern [3.] iphone/cydget [4.] iphone/flipswitch_switch [5.] iphone/framework [6.] iphone/ios7_notification_center_widget [7.] iphone/library [8.] iphone/notification_center_widget [9.] iphone/preference_bundle_modern [10.] iphone/tool [11.] iphone/tweak [12.] iphone/xpc_serviceChoose a Template (required):

我們可以看到iphone/tweak,所以我們輸入 11 選擇一個tweak工程,然后回車確定后,會讓我們輸入一些名字 id 等等信息,上一篇文章已經講解過了。下面我用一張GIF圖來演示下:

然后我們進入工程目錄會發現生成四個文件:

這四個文件的配置在上一篇文章已經簡單介紹了,下面我就直接貼上文件內容。1, Makefile

THEOS_DEVICE_IP = 10.10.243.124 ARCHS = armv7 arm64TARGET = iphone:latest:8.0include $(THEOS)/makefiles/common.mkTWEAK_NAME = HOOKAPPHOOKAPP_FILES = Tweak.xmHOOKAPP_FRAMEWORKS = UIKitinclude $(THEOS_MAKE_PATH)/tweak.mkafter-install:: install.exec "killall -9 SpringBoard"

2, Tweak.xm

%hook ViewController- (void)buttonClick{ UIAlertController *alerView = [UIAlertController alertControllerWithTitle:@"提示" message:@"已經被HOOK了" preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *cancelAction =[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil]; [alerView addAction:cancelAction]; [self presentViewController:alerView animated:YES completion:nil];}%end

其它這兩個文件 control 和 iosproject.plist 可以保持原樣。

三、打包并安裝dylib到設備中.

走到這一步需要注意幾點

iOS設備一定要已經安裝了Open ssh (默認密碼alpine,如果忘記密碼可自行查找如何修改密碼)設備和電腦保持在同一局域網下。保證你的theos配置文件沒有問題。

1,這個時候我們差不多都配置好了,可以把自己寫的APP,然后運行到設備上了,運行之后點擊測試下未HOOK之前的按鈕點擊方法:

2,接下來我們利用終端cd進入你創建的tweak項目目錄,然后執行make package install,然后輸入兩次ssh的連接密碼(ssh 默認密碼alpine),然后設備就會重啟SpringBoard,然后我們再次打開HOOK的APP發現按鈕的點擊方法已經被替換了。如果提示_Prefix/NullabilityCompat.h 說明你是自己clone 的官方的theos,里面沒放入這些頭文件,可手動clone header頭文件到目錄中:

sudo git clone https://github.com/theos/headers /opt/theos/include

或者重新更新下我上傳的theos git pull 一下,還有環境變量記得設置下:export THEOS=/opt/theos下面gif圖演示操作下:

這個時候輸入成功后這個時候SpringBoard已經開始重啟了。

(由于上傳圖片大小限制5M,我分了兩個GIF來演示,下面演示HOOK成功后)

到這一步很多人一定會好奇,怎么這么就成功了,下面說說原理。其實原理不敢說,只能說是一些自己的理解吧。講到這里就不得不需要提到一些關鍵詞。

Cydia Substrate、Mobile SubstrateMobileHookerMSHookMessageExMSHookFunctionMobileLoaderSafe ModeLogos

下面進行一一說明

四、基本原理說明

1,Cydia Substrate 和 Mobile Substrate

* Cydia Substrate 原名為 Mobile Substrate 已經正式更名為 Cydia Substrate。* 它是越獄后cydia插件/軟件運行的一個基礎依賴包。提供軟件運行的公共庫,可以用來動態替換 內存中的代碼、數據等所以iOS系統越獄環境下安裝絕大部分插件,必須首先安裝Cydia Substrate。* Cydia Substrate主要由3部分組成:MobileHooker,MobileLoader 和 safe mode。

2,MobileHooker、Logos

* MobileHooker用于替換覆蓋系統的方法,這個過程被稱為Hooking(掛鉤)* 它主要包含兩個函數:void MSHookMessageEx(Class class, SEL selector, IMP replacement, IMP *result);void MSHookFunction(void*function,void* replacement,void** p_original);MSHookMessageEx 主要作用于Objective-C函數MSHookFunction 主要作用于C和C++函數Logos語法就是對此函數做了一層封裝,讓編寫hook代碼變的更直觀,上面的例子用的就是logos語法。MSHookMessageEx 和MSHookFunction 使用方法這里就不介紹了,大家可去看書籍或者查詢相關資料。

3,MobileLoader

* MobileLoader用于加載第三方dylib在運行的應用程序中。* 啟動時MobileLoader會根據dylib的同名plist文件指定的作用范圍,有選擇的在不同進程里通過dlopen函數打開目錄/Library/MobileSubstrate/DynamicLibraries/ 下的所有dylib。

4,safe mode

* 因為APP程序質量參差不齊崩潰再所難免,tweak本質是dylib,寄生在別人進程里,如果注入Springboard等。 系統進程一旦出錯,可能導致整個進程崩潰,崩潰后就會造成iOS癱瘓。* 所以CydiaSubstrate引入了安全模式,在安全模 式下所有基于CydiaSubstratede 的三方dylib都會被禁用,便于查錯與修復。* 本人建議自己測試的時候如果HOOK Springboard的時候一定要注意!如果出錯,進入安全模式刪除插件即可。

總結:在我的理解就是:我們在Tweak.xm文件里用封裝后的logos語法編寫代碼(底層利用了MSHookMessageEx,MSHookFunction函數,使用 Object-C 的runtime特性發送了method_setImplementation消息)然后theos自動打包成dylib,上傳到/Library/MobileSubstrate/DynamicLibraries/里面后,重啟Springboard, 利用MobileLoader尋找目錄并根據dylib的同名plist文件加載里面的dylib動態庫,這時候當我們再打開APP后執行方法時,方法就被替換了。


下面我們可以來驗證一下,我用PP助手連接pad, 進入/Library/MobileSubstrate/DynamicLibraries/目錄,發現了我們編譯后的dylib如圖:

然后看下HOOKAPP.plist文件:

里面的com.dasen.HOOK-APP就是自己需要HOOK的app id說明已經放入這個目錄了,然后進入Cydia,查看已安裝插件:發現目標插件已經安裝進了Cydia 如圖:

好了驗證完畢,說明確實部分是如我們所想的那樣的,上面的例子很簡單,重要是簡單的解開了逆向的一點點面目,更多的是靠大家去發掘和利用探索更多知識。

待續。。。。。。


iOS逆向知識涉及繁多,以上自己的個人整理和心得,如有誤,希望大家多多提醒。推薦下:http://bbs.iosre.com/ 這個論壇是《iOS逆向工程 第2版》書籍作者創辦的論壇。

參考書籍: <iOS應用逆向工程-第2版> 沙梓社 吳航 * 著感謝作者


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 深水埗区| 长治市| 温州市| 西乌| 清新县| 四子王旗| 阿拉善右旗| 晴隆县| 康定县| 临夏县| 花垣县| 土默特左旗| 射阳县| 岳池县| 宽甸| 长顺县| 大城县| 龙岩市| 高尔夫| 宜宾市| 河间市| 上蔡县| 抚顺市| 闽清县| 鹤岗市| 文昌市| 迭部县| 故城县| 叙永县| 卢龙县| 绥中县| 武定县| 云浮市| 湖口县| 阿勒泰市| 邢台县| 华坪县| 射阳县| 桂阳县| 深水埗区| 易门县|