越獄調(diào)試Reveal、debugserver、Class-dump、命令行工具、LLDB手動(dòng)砸殼

一、Reveal

Reveal:界面、輕量級(jí)
Cycript:可以對(duì)內(nèi)存訪問
LLDB:可以看函數(shù)調(diào)用棧、下斷點(diǎn)

1.1 Mac電腦安裝Reveal
1.2 (越獄)iPhone,Cydia安裝Reveal Loader

安裝Reveal Loader之后,系統(tǒng)設(shè)置中會(huì)出現(xiàn)Reveal

打開系統(tǒng)設(shè)置頁面進(jìn)入Reveal設(shè)置打開對(duì)應(yīng)APP

1.3、環(huán)境配置

導(dǎo)入dylib文件,由于新版本的Reveal只有Framework文件,所以需要修改Framework的可執(zhí)行文件為dylib庫

找到相關(guān)庫

RevealServer拷貝到桌面,然后重命名為libReveal.dylib,然后拷貝到手機(jī)目錄中。
在手機(jī)的/Library 目錄下新建目錄$mkdir RHRevealLoader,需要把libReveal.dylib拷貝到RHRevealLoader中。scp -P 12345 ~/Desktop/libReveal.dylib root@localhost:/Library/RHRevealLoader

重啟手機(jī)(Reveal支持USB鏈接和Wi-Fi鏈接,如果使用Wi-Fi鏈接必須讓手機(jī)和Mac保持統(tǒng)一局域網(wǎng))
重啟Mac的Reveal


二、debugserver

我們Xcode中的lldb可以調(diào)試手機(jī)中的應(yīng)用,是因?yàn)槭謾C(jī)中的debugserver開啟的相關(guān)服務(wù)。所以在越獄環(huán)境中,我們只需要開啟debugserver服務(wù)就可以利用LLDB遠(yuǎn)程調(diào)試三方應(yīng)用了。

Mac中的debugserver,在/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/中可以看到對(duì)應(yīng)不同iOS系統(tǒng)版本的鏡像文件


打開DeveloperDiskImage.dmg文件,進(jìn)入usr/bin目錄可以看到debugserver。這就是xcode安裝到真機(jī)中的文件。

1.1、iPhone啟動(dòng)debugserver、Mac連接debugserver(這里是Wi-Fi鏈接)
  • iPhone中開啟debugserver服務(wù)。
    $debugserver 主機(jī)地址:端口號(hào) –a 應(yīng)用進(jìn)程 eg:./debugserver *:12346 -a WeChat
    由于主機(jī)地址是當(dāng)前手機(jī),可以使用*代替
    端口號(hào):?jiǎn)?dòng)server服務(wù),開放端口,讓遠(yuǎn)程的LLDB通過sever調(diào)試進(jìn)程

  • Mac上啟動(dòng)LLDB連接iPhone
    啟動(dòng)LLDB,$lldb
    連接debugserver,(lldb)process connect connect://手機(jī)IP:服務(wù)端口號(hào) eg:process connect connect://192.168.254.240:12346

1、將debugserver先拷貝到桌面,然后拷貝到手機(jī)上 scp -P 12345 ~/Desktop/debugserver root@localhost:~/,最后會(huì)把debugserver放在/usr/bin/目錄下,可以在任何地方都可以用debugserver
2、./debugserver *:12346 -a WeChat,iPhone中開啟debugserver服務(wù),手機(jī)WeChat界面已經(jīng)沒法動(dòng)了

3、啟動(dòng)LLDB $lldb,鏈接debugserver process connect connect://192.168.254.240:12346,這個(gè)是Wi-Fi鏈接有點(diǎn)慢

(lldb) c 就能動(dòng)了
(lldb) exit 退出,一退出應(yīng)用就掛掉了,相當(dāng)于殺掉應(yīng)用

1.2、usb鏈接

1、端口映射

2、./debugserver *:12346 -a WeChat,iPhone中開啟debugserver服務(wù),手機(jī)WeChat界面已經(jīng)沒法動(dòng)了
3、啟動(dòng)LLDB $lldb,鏈接debugserver process connect connect://localhost:12346,這個(gè)是usb鏈接

(lldb) process interrupt 進(jìn)入暫停狀態(tài)

pvc、pviews、po 0x156911000 只有在暫停狀態(tài)這些指令才有用哦

找到target和action

(lldb) p [(UIButton *)0x157ef94e0 allTargets]
(__NSSetM *) $7 = 0x0000000157abb4f0 1 element
(lldb) po 0x0000000157abb4f0
{(
    <WCAccountNewPhoneVerifyViewController: 0x156aa5200>
)}

(lldb) p [(UIButton *)0x157ef94e0 actionsForTarget:(id)0x156aa5200 forControlEvent:64]
(__NSArrayM *) $9 = 0x0000000157f45f00 @"1 element"
(lldb) po 0x0000000157f45f00
<__NSArrayM 0x157f45f00>(
onNext
)

(lldb) methods WCAccountNewPhoneVerifyViewController

(lldb) b 0x100479e38

0x10208c670 方法地址(物理地址)

0x100054000 去掉1(_PAGEZERO),0x000054000 偏移地址(ASLR)

方法地址(物理地址) = 偏移地址(ASLR) + 文件偏移地址(.hop中的地址,包含了1(_PAGEZERO))

1.3、手機(jī)中的debugserver
  • 系統(tǒng)自帶的debugserver,/Developer/usr/bin/

  • 自己的debugserver,配置到/usr/bin/目錄中

1.4、把手機(jī)上的MachO拷貝到電腦

scp -P 12345 root@localhost:/var/mobile/Containers/Bundle/Application/1C5755EA-C7FD-4828-BCE2-40E38D467121/WeChat.app/WeChat ~/Desktop/

三、Class-dump

Class-dump是一個(gè)命令行工具,它通過查找MachO文件的相關(guān)段可以導(dǎo)出未經(jīng)加密的APP的頭文件。在逆向開發(fā)中,砸殼之后的第二件事就是使用它導(dǎo)出頭文件。

安裝
官網(wǎng)
下載class-dump $ git clone https://github.com/nygard/class-dump 拉下來
編譯項(xiàng)目,生成命令行工具。直接使用。
將命令行工具導(dǎo)入/usr/local/bin/class-dump , 上權(quán)限 $sudo chmod +x class-dump

使用
命令格式:
單一架構(gòu):$class-dump –H MachO文件 -o 頭文件存放目錄 eg:class-dump -H WeChat -o ./headers/class-dump -H WeChat -o ./headers
多種架構(gòu):加上--arch 架構(gòu) 如arm64:$class-dump --arch arm64 –H MachO文件 –o 頭文件存放目錄 eg:class-dump --arch arm64 -H Course -o ./Headers

1.1、Monkey中集成了Class-dump
1.2、Monkey項(xiàng)目中使用Class-dump

a、創(chuàng)建一個(gè)Monkey項(xiàng)目
b、TargetApp中添加越獄的.ipa包(eg:微信-7.0.5(越獄應(yīng)用))
c、TARGETSMonkeyClassDumpBuild Settings中搜索MONKEY,把MONKEYDEV_CLASS_DUMP 改為 YES

d、build一下,會(huì)出現(xiàn)WeChat_Headers文件下,里面就是head了

四、命令行工具

一個(gè)命令行工具,其實(shí)就是一個(gè)程序。只要架構(gòu)正確就可以執(zhí)行

1、創(chuàng)建一個(gè)工程,寫入如下代碼

2、build一下,Show in Finder,顯示包內(nèi)容,找到可以執(zhí)行文件

3、來到文件夾下,./執(zhí)行,file查看。arm64只能在手機(jī)上執(zhí)行,然后移動(dòng)到手機(jī)中

4、拷貝到手機(jī)中 scp -P 12345 DYZCmdTool root@localhost:~/,然后執(zhí)行

5、帶參數(shù)的,重復(fù)以上操作

./DYZCmdTool
./DYZCmdTool -a -b -c -d

五、LLDB手動(dòng)砸殼

原理把手機(jī)內(nèi)存中解密的部分拷貝出來,然后和加密的MachO對(duì)比,覆蓋掉加密的

利用lldb導(dǎo)出內(nèi)存中解密了的二進(jìn)制數(shù)據(jù)

1、將手機(jī)上運(yùn)行的微信的MachO拷貝到電腦桌面 scp -P 12345 root@localhost:/var/mobile/Containers/Bundle/Application/1C5755EA-C7FD-4828-BCE2-40E38D467121/WeChat.app/WeChat ~/Desktop/

cryptoff 16384 從這里開始加密。這里是十進(jìn)制
cryptsize 101646336 這么大的大小是加密了的。這里是十進(jìn)制
cryptid 1 加密算法為1

2、獲取手機(jī)上微信MachO的物理地址0x00000001000b8000
2.1、DYZyueyu5s:~ root# debugserver *:12346 -a WeChat
2.2、(lldb) process connect connect://localhost:12346

3、內(nèi)存文件拷貝(LLDB指令) memory read --force --outfile 輸出文件路徑 --binary --count 文件長(zhǎng)度 內(nèi)存地址(開始地址)
memory read 命令
--outfile 導(dǎo)出文件
--count 指定讀取的數(shù)據(jù)大小
eg: memory read --force --outfile ./decryption.bin --binary --count 101646336 0x00000001000b8000+16384

4、合并文件(終端指令) dd seek=開始合并地址 bs=1 conv=notrunc if=輸入文件路徑 of=輸出文件路徑
dd命令寫入源文件
seek 指定偏移
conv=conversion 保留沒有替換的部分
eg: dd seek=16384 bs=1 conv=notrunc if=./decryption.bin of=~/Desktop/WeChat

5、把Crypt ID 改為 0,保存

6、class-dump -H ~/Desktop/WeChat -o ./Headers

最后編輯于
?著作權(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ù)。

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