1 class dump
class dump 是一個用於檢查儲存在 Mach-O 檔案中的 objective-c 執行時資訊的工具,攻防中最常用、實用的命令列工具。
1.1 class dump 好玩在哪?
class dump 絕對可以滿足你的好奇心。你可以通過 class dump :
- 檢視閉源的應用、frameworks、bundles。
- 對比一個 APP 不同版本之間的介面變化。
- 對一些私有 frameworks 做些有趣的試驗。
1.2 Download
當前版本: 3.5 (64 bit Intel)
需要 Mac OS X 10.8 或更高版本
class-dump-3.5.dmg
class-dump-3.5.tar.gz
class-dump-3.5.tar.bz2
1.3 Use
下載好後,雙擊dmg檔案,將其中的 class-dump 檔案放到/usr/local/sbin 目錄下,然後就可以在命令列中使用了。
官方用法指南:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
class-dump 3.5 (64 bit) Usage: class-dump [options] where options are: -a show instance variable offsets -A show implementation addresses --arch choose a specific architecture from a universal binary (ppc, ppc64, i386, x86_64) -C only display classes matching regular expression -f find string in method name -H generate header files in current directory, or directory specified with -o -I sort classes, categories, and protocols by inheritance (overrides -s) -o output directory used for -H -r recursively expand frameworks and fixed VM shared libraries -s sort classes and categories by name -S sort methods by name -t suppress header in output, for testing --list-arches list the arches in the file, then exit --sdk-ios specify iOS SDK version (will look in /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk --sdk-mac specify Mac OS X version (will look in /Developer/SDKs/MacOSX.sdk --sdk-root specify the full SDK root path (or use --sdk-ios/--sdk-mac for a shortcut) |
簡單的舉例:
1 |
class-dump -H /Applications/Calculator.app -o ~/Desktop/dump/Calculate-dump |
/Applications/Calculator.app
是 Mac 上計算器應用的路徑。
~/Desktop/dump/Calculate-dump
是指定的存放 dump 出來標頭檔案的資料夾路徑。
執行完成後可以看到指定的儲存目錄下已經有 dump 出來的標頭檔案了:
開啟一個 .h
檔案可以看到相應內容:
2 Dumpdecrypted
class dump 雖然能幫你解析出一個 app 的標頭檔案,但是對於 App Store 下載的 App 都是通過蘋果的一層簽名加密,通常我們成為『加殼』。對於已經加殼的 APP,解析後的效果就和加了程式碼混淆類似。
比如直接去 dump 微信,出來的結果大概是這樣:
2.1 Download
2.2 Install
Dumpdecrypted 比另一個砸殼工具 Clutch 要難用的多。但由於 Clutch 無法砸開含有相容 WatchOs
2 的 App,所以只能使用 Dumpdecrypted。
下載後開啟 Makefile
檔案,注意第三行:
1 |
$ SDK=`xcrun --sdk iphoneos --show-sdk-path` |
這裡填寫的 SDK 必須與你越獄的 iPhone 系統等級一致,你可以這樣檢視你 MAC 的 SDK :
1 |
$ xcrun --sdk iphoneos --show-sdk-path |
輸出:
1 |
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk |
而我的手機是 7.0 的,所以只能去這裡下載對應的 SDK。
Makefile 所有需要填寫的填好後:
1 2 |
$ cd dumpdecrypted $ make |
在當前目錄下生成 dumpdecrypted.dylib 檔案。
2.3 Use
將 dumpdecrypted.dylib
放到需要砸殼 app 的 Documents 下。
查詢微信的 Documents:
1 |
$ find / -name WeChat.app |
得到路徑:
1 |
/private/var/mobile/Applications/3DE3657E-0F69-45FF-928B-3DD5CD7A59FD/WeChat.app |
scp 傳輸:
1 |
$ scp ~/Desktop/dump/dumpdecrypted/dumpdecrypted_7.dylib root@172.16.212.217:/private/var/mobile/Applications/3DE3657E-0F69-45FF-928B-3DD5CD7A59FD/Documents |
砸殼:
1 2 |
$ cd /private/var/mobile/Applications/3DE3657E-0F69-45FF-928B-3DD5CD7A59FD/Documents $ DYLD_INSERT_LIBRARIES=dumpdecrypted_7.dylib /private/var/mobile/Applications/3DE3657E-0F69-45FF-928B-3DD5CD7A59FD/WeChat.app/WeChat |
注意
DYLD_INSERT_LIBRARIES=
後填寫的是你剛剛傳輸的 .dylib 檔名,我的是 dumpdecrypted_7.dylib
砸殼成功:
1 2 3 4 5 6 7 |
[+] detected 32bit ARM binary in memory. [+] offset to cryptid found: @0xfea4c(from 0xfe000) = a4c [+] Found encrypted data at address 00004000 of length 42237952 bytes - type 1.[+] Opening /private/var/mobile/Applications/3DE3657E-0F69-45FF-928B-3DD5CD7A59FD/WeChat.app/WeChat for reading. [+] Reading header [+] Detecting header type[+] Executable is a FAT image - searching for right architecture[+] Correct arch is at offset 16384 in the file[+] Opening WeChat.decrypted for writing. [+] Copying the not encrypted start of the file[+] Dumping the decrypted data into the file[+] Copying the not encrypted remainder of the file[+] Setting the LC_ENCRYPTION_INFO->cryptid to 0 at offset 4a4c [+] Closing original file[+] Closing dump file |
ls 檢視 Documents 中檔案多了一個 WeChat.decrypted
,這就是砸殼過後的檔案,scp出來:
1 |
$ scp WeChat.decrypted zhoulingyu@172.16.211.181:/Users/zhoulingyu/Desktop/dump/Wechat |
3 class dump 砸殼後的檔案
上一步我們得到了 WeChat.decrypted
,現在可以對其進行 dump:
1 |
class-dump --arch armv7 WeChat.decrypted -H -o /Users/zhoulingyu/Desktop/dump/Wechat/Wechat-decrypted-dump |
–arch armv7 是指定架構,dumpdecrypted 只會砸你手機處理器對應的那個殼,fat binary 的其它部分仍然是有殼的,而 class-dump 的預設目標又不是被砸殼的那個部分,如果不指定架構只能匯出 CDStructures.h 一個檔案
現在就可以看到 dump 後是明文的了:
4 Learn More
當你能看到 .h 檔案時候,意味著你知道了這個應用程式的各種介面,除了學習別人的優雅程式碼之外,顯然也也可以做一些更有意思的事情,通過一些猜想和試驗,我們可以去嘗試做一個微信的外掛。
下一次iOS攻防將會介紹動態庫的注入和微信外掛的製作~
如果您感興趣~請點選下方打賞支援萌妹子的原創喲~
有什麼問題都可以在博文後面留言,或者微博上私信我,或者郵件我coderfish@163.com。
博主主要寫 java 和 iOS 的。
希望大家一起進步。
CSDN: CSDN部落格地址
我的微博:小魚周凌宇