最近有一個需求涉及到逆向相關的知識,于是進一步了解下相關,同時筆記記錄下,其中核心流程是:應用砸殼 -> 靜態/動態分析 -> 代碼注入 -> 打包重簽名,最核心的是靜態分析和動態調試的咯。
一、獲取已經去殼的可執行文件
1-1、通過越獄手機獲取到的 iPA 砸殼
1-2、或是直接獲取到已經去殼的,可通過 PP 助手之類的(不過我最近下的 Mac 版本一直閃退)
- 可通過
otool -l 可執行文件 | grep crypt
中的結果,cryptid 判斷(有殼為1,無殼為0) - PS: 可執行文件,可以通過解壓 ipa 文件,然后通過顯示包內容看到的。
二、靜態分析
- class-dump: 導出所有類的頭文件,可以在其中看到類名、公有屬性
- IDA: 反編譯工具,可以把機器代碼反編譯成匯編代碼
三、動態調試
- Reveal: UI 層級解析工具,可以像Xcode一樣,解析展示APP的UI層級結構
- Cycript: 強大的動態調試工具,可以在APP運行的時候,對APP執行查看、改動操作
- LLDB: 蘋果自己提供的動態調試工具, 方便調試
四、代碼注入
- Hook 方法的使用
- Framework 或者 dylib 的注入
可具體參考李斌同學的文章,真的很詳細:
五、 重簽名
-
iOS-App-Signer
這個工具我一直在使用,確實很方便的
六、 逆向反思
6-1、反逆向相關
- 編寫階段:對一些功能采用C語言、匯編語言等靜態語言編寫
- 編譯階段混淆:代碼混淆、硬編碼混淆、資源文件混淆、匯編混淆等
- 運行階段逆向檢測:越獄環境檢測、重簽多開檢測等
- 運行階段功能限制:代碼開關、封號、封手機等
6-2、學習點
- 畏懼心態
- 底層知識的了解
七、End
類型如下字眼
- dumpdecrypted
- class-dump
- IDA
- Reveal
- theos
- insert_dylib
- yololib
本篇記錄主要是了解和眼熟些工具, 在真正操作的時候可以得心應手的,目前個人只實戰了一個小功能。