前言
前段時(shí)間學(xué)習(xí)過(guò)利用工具來(lái)對(duì)加密的應(yīng)用ipa包砸殼浩淘,dumpdecrypted砸殼夯到,Clutch砸殼饱岸,frida-ios-dump砸殼驻龟,這次通過(guò)LLDB自己手動(dòng)操作可執(zhí)行文件,dump出解密的文件(實(shí)際上dumpdecrypted就是這個(gè)原理)毅桃,簡(jiǎn)單了解砸殼的原理褒纲。
一、原理
加密內(nèi)容在手機(jī)啟動(dòng)執(zhí)行加載到內(nèi)存后疾嗅,是解密的外厂,可以根據(jù)Mach-O文件記錄的加密內(nèi)容開始偏移值以及加密內(nèi)容大小,從內(nèi)存中dump出已經(jīng)解密的部分代承,再將dump出的部分寫回原執(zhí)行文件,這樣就得到一個(gè)完整的解密的可執(zhí)行文件渐扮。
二论悴、從越獄手機(jī)拷貝出原可執(zhí)行文件
以WeChat為例
了解到了這兩個(gè)數(shù)據(jù)信息,就可以利用LLDB進(jìn)行解密,下面選擇64位架構(gòu)進(jìn)行解密
三墓律、使用LLDB砸殼
參考LLDB+debugserver調(diào)試第三方應(yīng)用進(jìn)入lldb調(diào)試界面膀估,并且附加到目標(biāo)進(jìn)程,如下:
查看主模塊加載地址
我們使用的物理地址為:
0x0000000100014000
,先記錄下來(lái),接著根據(jù)cryptoof
與cryptsize
字段dump出解密部分,如下:這樣dump出的文件是沒有Mach-O header耻讽,因此要將dump出文件Patch回原可執(zhí)行文件(可以先備份原可執(zhí)行文件)察纯,Patch之前先說(shuō)個(gè)注意點(diǎn):
注意:手機(jī)上拷貝出的Mach-O文件含有兩種架構(gòu),因此我們?cè)赑atch的時(shí)候要找對(duì)架構(gòu)起始偏移
從下面的Mach-O頭信息可知针肥,我們需要將dump出的文件寫回70041600
+ 16384
=70057984
的位置
Patch操作如下(過(guò)程會(huì)有點(diǎn)久饼记,耐心等待):
到這一步,原可執(zhí)行文件的arm64架構(gòu)文件已經(jīng)解密慰枕,最后修改一下對(duì)應(yīng)的加密標(biāo)識(shí)
cryptID
即可。
提取arm64架構(gòu)的文件
lipo -thin arm64 WeChat -output /Users/kinken_yuen/Desktop/WeChat_arm64
使用Mach-OView修改字段
最后使用class-dump能夠正常dump出工程的類頭文件,砸殼成功。
四顾稀、腳本調(diào)用LLDB砸殼
Github:https://github.com/BlueCocoa/dumpdecrypted-lldb