APP的使用過程
源碼-編譯、鏈接、簽名生成app文件-zip壓縮生成IPA文件-上傳到App Store-下載到手機。
源碼-編譯、鏈接、簽名生成app文件-zip壓縮生成IPA文件-通過PP助手、iFunBox、Xcode等工具安裝到手機。
逆向APP的思路
界面分析
Cycript、Reveal
代碼分析
對Mach-O文件的靜態分析,MachOView、class-dump、Hopper Disassembler、ida等
動態調試
對運行中的APP進行代碼調試,debugserver、LLDB
代碼編寫
注入代碼到APP中,必要時還可能需要重新簽名、打包ipa
工具的使用
class-dump
顧名思義,它的作用就是把Mach-O文件的class信息給dump出來(把類信息給導出來),生成對應的.h頭文件
官方地址:http://stevenygard.com/projects/class-dump/
下載完工具包後將class-dump文件複製到Mac的/usr/local/bin目錄,這樣在終端就能識別class-dump命令了
常用格式
class-dump -H Mach-O文件路徑 -o 頭文件存放目錄
-H表示要生成頭文件
-o用於制定頭文件的存放目錄
Hopper Disassmbler
nHopper Disassmbler能夠將Mach-O文件的機器語言代碼反編譯成彙編代碼、OC僞代碼或者Swift僞代碼
常用快捷鍵 Shift + Option + X 找出哪裏引用了這個方法
動態庫的加載
在Mac\iOS中,是使用了/usr/lib/dyld程序來加載動態庫
dynamic link editor,動態鏈接編輯器
dynamic loader,動態加載器
https://opensource.apple.com/tarballs/dyld/
常見Mach-o文件類型
MH_OBJECT
目標文件(.o)
靜態庫文件(.a),靜態庫其實就是N個.o合併在一起
MH_EXECUTE:可執行文件
.app/xx
MH_DYLIB:動態庫文件
.dylib
.framework/xx
MH_DYLINKER:動態鏈接編輯器
/usr/lib/dyld
MH_DSYM:存儲着二進制文件符號信息的文件
.dSYM/Contents/Resources/DWARF/xx(常用於分析APP的崩潰信息)
Mach-O文件包含3個主要區域
Header
文件類型、目標架構類型等
Load commands
描述文件在虛擬內存中的邏輯結構、佈局
Raw segment data
在Load commands中定義的Segment的原始數據
窺探Mach-O的結構
命令行工具
file:查看Mach-O的文件類型
file 文件路徑
otool:查看Mach-O特定部分和段的內容
lipo:常用於多架構Mach-O文件的處理
查看架構信息:lipo -info 文件路徑
導出某種特定架構:lipo 文件路徑 -thin 架構類型 -output 輸出文件路徑
合併多種架構:lipo 文件路徑1 文件路徑2 -output 輸出文件路徑
GUI工具
MachOView(https://github.com/gdbinit/MachOView)
APP的可執行文件、動態庫都是由dyld負責加載的