
目錄
一,加殼
二,脫殼
三,工具
四,驗證
一,加殼
1,介紹
App Store會對
ipa包中的可執(zhí)行文件進行加殼操作加殼就是利用特殊的算法,對可執(zhí)行文件進行加密,以達到保護程序代碼的目的
2,加殼前后
- 加殼前:可執(zhí)行文件能夠直接在內(nèi)存中運行

- 加殼后:殼程序會一同被加載進內(nèi)存,殼程序會對可執(zhí)行文件進行解密,這樣可執(zhí)行文件就能夠運行了

3,加殼的可執(zhí)行文件是無法反編譯的
- 從iPhone上導(dǎo)出喜馬拉雅的可執(zhí)行文件

-
class-dump:只導(dǎo)出一個無效.h文件

-
Hopper:看不到類名、方法名等信息

二,脫殼
1,介紹
- 脫殼就是將殼程序去掉,并將已加密的可執(zhí)行文件進行解密
2,方法
- 硬脫殼:直接執(zhí)行解密算法(常用方法)

- 動態(tài)脫殼:將殼程序加載到內(nèi)存中,殼程序會對可執(zhí)行文件進行解密,然后導(dǎo)出可執(zhí)行文件即可

三,工具
1,用Clutch脫殼(下載地址:https://github.com/KJCracks/Clutch/releases)
- 下載并修改名稱

- 將
Clutch拷貝到iPhone的/usr/bin目錄下

- 賦予
Clutch權(quán)限:chmod +x /usr/bin/Clutch

- 查看iPhone上已安裝的APP:
Clutch -i

- 開始脫殼:
Clutch -d [APP序號]

喜馬拉雅-失敗

微信-成功
- 脫殼成功后會生成一個新的
ipa包

2,用dumpdecrypted脫殼(下載地址:https://github.com/stefanesser/dumpdecrypted)
- 下載并執(zhí)行
make命令,生成dumpdecrypted.dylib動態(tài)庫

- 將動態(tài)庫拷貝到iPhone的
/var/root目錄下

- 查看可執(zhí)行文件路徑:先運行APP,然后執(zhí)行
ps -A命令

- 開始脫殼:
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib [可執(zhí)行文件路徑]


- 脫殼成功后會生成一個新的可執(zhí)行文件

3,用frida-ios-dump脫殼
- 在iPhone上通過
Cydia安裝frida插件(軟件源:https://build.frida.re)

- 在Mac上配置
frida環(huán)境:sudo pip install frida

- 下載
frida-ios-dump工具:git clone https://github.com/AloneMonkey/frida-ios-dump.git

- 把
dump.py文件中的端口號改為10010(跟登錄iPhone所用端口號保持一致即可)

- 查詢APP的
bundleId:./dump.py -l

- 先啟動APP,然后開始脫殼:
./dump.py bundleId

- 脫殼成功后會生成一個新的
ipa包

4,比較
-
Clutch:很多APP都會失敗 -
dumpdecrypted:只能對可執(zhí)行文件進行脫殼,對于動態(tài)庫不太好處理,有些APP會將代碼封裝成動態(tài)庫 -
frida-ios-dump:能處理動態(tài)庫且成功率高(推薦使用)

騰訊視頻-動態(tài)庫
四,驗證
1,查看是否已脫殼
MachOView

未脫殼

已脫殼
otool

未脫殼

已脫殼
2,脫殼的可執(zhí)行文件才能進行反編譯
class-dump

Hopper
