一梗摇、Reveal
Reveal:界面、輕量級
Cycript:可以對內(nèi)存訪問
LLDB:可以看函數(shù)調(diào)用棧想许、下斷點
1.1 Mac電腦安裝Reveal
1.2 (越獄)iPhone伶授,Cydia
安裝Reveal Loader
安裝Reveal Loader
之后幔摸,系統(tǒng)設置中會出現(xiàn)Reveal
打開系統(tǒng)設置頁面進入Reveal
設置打開對應APP
1.3菲语、環(huán)境配置
導入dylib文件屯吊,由于新版本的Reveal只有Framework文件,所以需要修改Framework的可執(zhí)行文件為dylib庫
找到相關庫把RevealServer
拷貝到桌面捧颅,然后重命名為libReveal.dylib
,然后拷貝到手機目錄中较雕。
在手機的/Library 目錄下新建目錄$mkdir RHRevealLoader
碉哑,需要把libReveal.dylib
拷貝到RHRevealLoader
中。scp -P 12345 ~/Desktop/libReveal.dylib root@localhost:/Library/RHRevealLoader
重啟手機(Reveal支持USB鏈接和Wi-Fi鏈接亮蒋,如果使用Wi-Fi鏈接必須讓手機和Mac保持統(tǒng)一局域網(wǎng))
重啟Mac的Reveal
二扣典、debugserver
我們Xcode中的lldb可以調(diào)試手機中的應用,是因為手機中的debugserver開啟的相關服務慎玖。所以在越獄環(huán)境中贮尖,我們只需要開啟debugserver服務就可以利用LLDB遠程調(diào)試三方應用了。
Mac中的debugserver趁怔,在/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/
中可以看到對應不同iOS系統(tǒng)版本的鏡像文件
打開
DeveloperDiskImage.dmg
文件湿硝,進入usr/bin目錄可以看到debugserver薪前。這就是xcode安裝到真機中的文件。1.1关斜、iPhone啟動debugserver示括、Mac連接debugserver(這里是Wi-Fi鏈接)
iPhone中開啟debugserver服務。
$debugserver 主機地址:端口號 –a 應用進程
eg:./debugserver *:12346 -a WeChat
由于主機地址是當前手機痢畜,可以使用*代替
端口號:啟動server服務垛膝,開放端口,讓遠程的LLDB通過sever調(diào)試進程Mac上啟動LLDB連接iPhone
啟動LLDB丁稀,$lldb
連接debugserver吼拥,(lldb)process connect connect://手機IP:服務端口號
eg:process connect connect://192.168.254.240:12346
1、將debugserver
先拷貝到桌面二驰,然后拷貝到手機上 scp -P 12345 ~/Desktop/debugserver root@localhost:~/
扔罪,最后會把debugserver
放在/usr/bin/
目錄下,可以在任何地方都可以用debugserver
了
2桶雀、./debugserver *:12346 -a WeChat
矿酵,iPhone中開啟debugserver服務,手機WeChat界面已經(jīng)沒法動了
3矗积、啟動LLDB $lldb
全肮,鏈接debugserver process connect connect://192.168.254.240:12346
,這個是Wi-Fi鏈接有點慢
(lldb) c
就能動了
(lldb) exit
退出棘捣,一退出應用就掛掉了辜腺,相當于殺掉應用
1.2、usb鏈接
1乍恐、端口映射
2评疗、./debugserver *:12346 -a WeChat
,iPhone中開啟debugserver服務茵烈,手機WeChat界面已經(jīng)沒法動了
3百匆、啟動LLDB $lldb
,鏈接debugserver process connect connect://localhost:12346
呜投,這個是usb鏈接
(lldb) process interrupt
進入暫停狀態(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
方法地址(物理地址) = 偏移地址(ASLR) + 文件偏移地址(.hop中的地址雕拼,包含了1(_PAGEZERO))
1.3、手機中的debugserver
-
系統(tǒng)自帶的
debugserver
粘招,/Developer/usr/bin/
-
自己的
debugserver
啥寇,配置到/usr/bin/
目錄中
1.4、把手機上的MachO拷貝到電腦
scp -P 12345 root@localhost:/var/mobile/Containers/Bundle/Application/1C5755EA-C7FD-4828-BCE2-40E38D467121/WeChat.app/WeChat ~/Desktop/
三、Class-dump
Class-dump是一個命令行工具示姿,它通過查找MachO文件的相關段可以導出未經(jīng)加密的APP的頭文件甜橱。在逆向開發(fā)中,砸殼之后的第二件事就是使用它導出頭文件栈戳。
安裝
官網(wǎng)
下載class-dump $ git clone https://github.com/nygard/class-dump
拉下來
編譯項目岂傲,生成命令行工具。直接使用子檀。
將命令行工具導入/usr/local/bin/class-dump , 上權限 $sudo chmod +x class-dump
使用
命令格式:
單一架構:$class-dump –H MachO文件 -o 頭文件存放目錄
eg:class-dump -H WeChat -o ./headers/
或 class-dump -H WeChat -o ./headers
多種架構:加上--arch 架構 如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項目中使用Class-dump
a褂痰、創(chuàng)建一個Monkey項目
b亩进、TargetApp中添加越獄的.ipa包(eg:微信-7.0.5(越獄應用))
c、TARGETS
的 MonkeyClassDump
的 Build Settings
中搜索MONKEY缩歪,把MONKEYDEV_CLASS_DUMP
改為 YES
d归薛、build一下,會出現(xiàn)WeChat_Headers
文件下匪蝙,里面就是head了
四主籍、命令行工具
一個命令行工具,其實就是一個程序逛球。只要架構正確就可以執(zhí)行
1千元、創(chuàng)建一個工程,寫入如下代碼
2颤绕、build一下幸海,Show in Finder
,顯示包內(nèi)容
奥务,找到可以執(zhí)行文件
3物独、來到文件夾下,./
執(zhí)行氯葬,file
查看挡篓。arm64只能在手機上執(zhí)行,然后移動到手機中
4溢谤、拷貝到手機中 scp -P 12345 DYZCmdTool root@localhost:~/
瞻凤,然后執(zhí)行
5憨攒、帶參數(shù)的世杀,重復以上操作
./DYZCmdTool
./DYZCmdTool -a -b -c -d
五、LLDB手動砸殼
原理把手機內(nèi)存中解密的部分拷貝出來肝集,然后和加密的MachO對比瞻坝,覆蓋掉加密的
利用lldb導出內(nèi)存中解密了的二進制數(shù)據(jù)
1、將手機上運行的微信的MachO拷貝到電腦桌面 scp -P 12345 root@localhost:/var/mobile/Containers/Bundle/Application/1C5755EA-C7FD-4828-BCE2-40E38D467121/WeChat.app/WeChat ~/Desktop/
cryptoff 16384
從這里開始加密。這里是十進制
cryptsize 101646336
這么大的大小是加密了的所刀。這里是十進制
cryptid 1
加密算法為1
2衙荐、獲取手機上微信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 文件長度 內(nèi)存地址(開始地址)
memory read 命令
--outfile 導出文件
--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