LLDB 手動(dòng)脫殼

我們一般分析別人的App都是分析砸過殼的AppiOS砸殼,一般會(huì)借助三方工具來砸殼,那么如果三方工具失效了呢?這個(gè)時(shí)候就需要我們自己砸殼了。在了解了砸殼原理后這個(gè)就很好理解了。雖然手動(dòng)有點(diǎn)麻煩,但還是能實(shí)現(xiàn)的。

一、導(dǎo)出app包。

1.1 查找app目錄

zaizai:~ root# ps -A | grep WeChat
26736 ??         0:03.08 /var/containers/Bundle/Application/8F382114-BBA7-4D81-AA3E-3CD02E03E23E/WeChat.app/WeChat
26742 ttys000    0:00.01 grep WeChat

1.2 拷貝app包

scp -r -P 12345  root@localhost:/var/containers/Bundle/Application/8F382114-BBA7-4D81-AA3E-3CD02E03E23E/WeChat.app ./

這樣就獲得了加密的app包。

otool -l WeChat  | grep crypt
     cryptoff 6565888
    cryptsize 4096
      cryptid 1

對(duì)應(yīng)信息查看:


image.png
  • cryptoff:加密開始偏移。
  • cryptsize:加密數(shù)據(jù)大小。
  • cryptid:加密標(biāo)記。

cryptid僅僅是一個(gè)標(biāo)記,修改是這個(gè)無效的。
cryptsize與系統(tǒng)版本有關(guān)iOS14上線數(shù)據(jù)很小。

二、lldb砸殼

砸殼實(shí)際上就是從內(nèi)存中拷貝出解密的數(shù)據(jù)。

2.1從內(nèi)存中拷貝加密數(shù)據(jù)(內(nèi)存中是解密的)

1.直接用Xcode附加微信進(jìn)程。
2.imag list找到ASLR+PAGEZERO0x0000000104500000):

(lldb) image list
[  0] EB606691-98E6-384F-BABB-F46E7BC265F9 0x0000000104500000 /private/var/containers/Bundle/Application/8F382114-BBA7-4D81-AA3E-3CD02E03E23E/WeChat.app/WeChat (0x0000000104500000)

3.拷貝數(shù)據(jù)
memory read --force --outfile 輸出文件 --binary --count 文件大小(cryptsize) 起始位置

(lldb) memory read --force --outfile ~/Desktop/WeChatDump/WeChat.bin --binary --count 4096  0x0000000104500000+6565888
4096 bytes written to '/Users/zaizai/Desktop/WeChatDump/WeChat.bin'
  • memory read --force:按字節(jié)讀取。
  • --outfile:輸出文件路徑。
  • --binary:輸出格式,二進(jìn)制。
  • --count:要拷貝的數(shù)據(jù)大小cryptsize
  • MachO首地址+cryptoff:找到內(nèi)存中的起始位置。

這樣我們就拷貝到了解密后的數(shù)據(jù)WeChat.bin了。

這里不拷貝全部數(shù)據(jù)是因?yàn)?code>data段數(shù)據(jù)可能在運(yùn)行的過程中被改變了。

2.2 用解密后的數(shù)據(jù)替換原加密數(shù)據(jù)

dd seek=6565888 bs=1 conv=notrunc if=./WeChat.bin of=WeChat
  • seek:從輸入文件跳過所少開始寫入。offset。
  • bs:一次寫入多少字節(jié)。
  • conv:指令參數(shù)傳遞文件。notrunc表示不截?cái)?。(寫完?code>WeChat后面的內(nèi)容不截段)
  • if:輸入的文件。
  • of:輸出的文件。

接著用MachOView修改cryptid0

image.png

直接在Load Commands->LC_ENCRYPTION_64中找到Crypt ID修改Data0

??拷貝和寫入時(shí)間與電腦性能和數(shù)據(jù)大小有關(guān),需要耐心等待。

2.3 驗(yàn)證

2.3.1 class-dump驗(yàn)證

直接class-dump頭文件:

class-dump -H WeChat -o ./WeChat_Headers

發(fā)現(xiàn)能直接dump成功了;

image.png

沒有砸殼的應(yīng)用是dump不成功地。

2.3.2 重簽名驗(yàn)證

接著用咋過殼的WeChat替換WeChat.app中的WeChat然后用Monkey重簽名運(yùn)行(當(dāng)然.app也可以打包成.ipa)。

image.png

重簽名驗(yàn)證也沒問題。

總結(jié)

  • LLDB手動(dòng)脫殼
    • memory read命令
      • 通過--outfile參數(shù)導(dǎo)出文件。
      • --count指定導(dǎo)出文件大小。
    • dd命令寫入原文件
      • seek指定偏移。(跳過多少開始寫入)
      • conv保留沒有替換的部分。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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