iOS逆向:加殼與脫殼

目錄
一,加殼
二,脫殼
三,工具
四,驗證

一,加殼

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脫殼
  • 在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
本文章僅供學(xué)習交流,如有侵權(quán),請聯(lián)系刪除,謝謝!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容