上一篇文章地址: 漸入佳境: 解密class-dump的奧秘
今天是2019年12月31號,2019年最后一天了,祝大家2020跨年快樂.
明天就是2020年1月1日了,同樣祝大家元旦快樂!
App應(yīng)用上傳到AppStore后富蓄,蘋果會對咱們的應(yīng)用進(jìn)行加密盖矫。我們的可執(zhí)行文件加了一層保護(hù)殼荞雏,就比如上節(jié)中,我們使用class-dump進(jìn)行dump類的頭文件狱意。
我們通過打包自己的應(yīng)用,這個(gè)應(yīng)用未上架AppStore喇勋,相當(dāng)于從未加密的問題,直接使用class-dump就可以進(jìn)行dump勤晚。
當(dāng)我們從AppStore下載之后枉层,我們需要把這個(gè)殼子去掉泉褐,也就是我們本篇提到的砸殼,砸了殼子才能獲取到里面的果實(shí)鸟蜡。
我之前寫的文章: "技藝精進(jìn):iOS逆向工具精選" 介紹了dumpdecrypted的砸殼,本篇文章也會介紹它.
1. dumpdecrypted
dumpdecrypted的產(chǎn)生
由于AppStore下載的App是被蘋果加密過的,可執(zhí)行文件被套上一層保護(hù)殼
class-dump無法作用于加密過的App
想要獲取頭文件,需要先解密App的可執(zhí)行文件,也叫砸殼
dumpdecrypted就是由越獄社區(qū)的知名人士 Stefan Esser 出品的一款砸殼工具,被越獄社區(qū)廣泛運(yùn)用在iOS逆向工程研究中.dumpdecrypted下載
github地址: dumpdecrypted
你可以通過git clone ,也可以直接下載,下載過程不再詳細(xì)介紹.
-
我已經(jīng)下載好了,我們看下文件內(nèi)容
dumpdecrypted 文件 我們對它進(jìn)行編譯,終端執(zhí)行make命令
- 我們看下編譯后的生成了什么文件?
我們看到生成了dumpdeycrypted.dylib
注意
- 找到要砸殼的APP的Documents目錄路徑(某應(yīng)用為例)
估計(jì)你看到這些,就會很頭疼了,到底哪個(gè)是呢?
-
我們借助強(qiáng)大的Cycript,讓App告訴我們它在哪里,直接找到它的的根目錄
鎖定該目錄 065B70ED-FCD1-4874-B4A3-86F1B765945F
- 將dumpdecrypted.dylib拷貝到Documents目錄下.
有兩種方式拷貝:
第一種:
scp /Users/popo/Desktop/dump/dumpdecrypted/dumpdecrypted.dyli root@192.168.3.15:var/mobile/Containers/Data/Application/065B70ED-FCD1-4874-B4A3-86F1B765945F/Documents/dumpdecrypted.dylib
第二種:
以上兩種方式,只需要拷貝成功就行,選擇那種,根據(jù)個(gè)人喜好.
- 開始砸殼
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/9AF4167F-D4AA-4DBB-A67D-A956CCDBDEF9/WeChat.app/WeChat mach-o decryption dumper
砸殼失敗了,分析一下原因:
required code signature missing for 'dumpdecrypted.dylib
由于沒有對dumpdecrypted.dylib簽名,導(dǎo)致我們沒有砸殼成功.
- 解決問題是對dumpdecrypted.dylib文件簽名,首先獲取可簽名的證書
- 然后為dumpecrypted.dylib簽名
codesign --force --verify --verbose --sign "iPhone Developer: `(開發(fā)這信息)`" dumpdecrypted.dylib
然后在上傳到手機(jī)
- 進(jìn)行第二次砸殼
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/9AF4167F-D4AA-4DBB-A67D-A956CCDBDEF9/WeChat.app/WeChat mach-o decryption dumper
在當(dāng)前目錄下會生成WeChat.decrypted文件
砸殼完成,然后你就可以拿著砸殼文件就行class-dump,靜態(tài)分析匯編代碼了.
問題
:dumpdecrypted為什么拷貝到Documents目錄下操作?
AppStore對沙盒以外的絕大數(shù)目錄沒有寫權(quán)限. Documents目錄下使用dumpdecrypted.dylib時(shí),保證它能在當(dāng)前目錄下寫一個(gè)decrypted文件.
2.Clutch
除了dumpdecrypted,我們還可以通過Clutch來解密.
Clutch砸殼的原理?
Clutch是生成一個(gè)新的進(jìn)程,然后暫停進(jìn)程并dump內(nèi)存.我們下載Clutch并編譯
- 我們下載看下源碼文件
- 我們選擇真機(jī),選擇證書對源碼進(jìn)行編譯,生成可執(zhí)行文件
- 我們將編譯的Clutch可執(zhí)行文件拷貝到桌面,備用.
- 我們可以通過兩種方式進(jìn)行拷貝
1
通過iFunBox拷貝目錄/usr/bin目錄下
2
通過SCP拷貝
scp Clutch/clutch root@設(shè)備ip:/usr/bin/
- 我們看下Clutch的參數(shù)
Clutch [OPTIONS]
-b --binary-dump Only dump binary files from specified bundleID
-d --dump Dump specified bundleID into .ipa file
-i --print-installed Print installed application
--clean Clean /var/tmp/clutch directory
--version Display version and exit
-? --help Display this help and exit
經(jīng)過對參數(shù)的翻譯:
1.clutch -b 砸殼后的文件是二進(jìn)制文件
2.clutch -d 砸殼后的文件是ipa文件
3.clutch -i 查看安裝的應(yīng)用
4.clutch --clean /var/tmp/clutch 目錄清理
5.clutch --version 顯示版本并退出
6.clutch -? --help 顯示幫助并退出
- 我們通過ssh協(xié)議通過終端連接越獄機(jī)
1.上圖:我們可以看到通過執(zhí)行 sh sshLogin.sh,我們不需要輸入密碼直接可以連接到越獄機(jī),同事執(zhí)行clutch -i 命令
2.從終端顯示,執(zhí)行的clutch -i 并沒有執(zhí)行成功
3.權(quán)限不夠,加權(quán)來湊.我們需要對/usr/bin目錄下的clutch進(jìn)行加權(quán)
4.加權(quán),你可以chmod 777 /user/bin/clutch
5.同樣加權(quán),你也可以通過chmod +x /user/bin/clutch
6. (1)中提交的sh 執(zhí)行腳本,我會在文章
iOS逆向工具之Cydia(iOS)介紹中介紹如何使用
- 再次執(zhí)行clutch -i 驗(yàn)證是否授權(quán)成功
-
我們進(jìn)行砸殼
砸殼準(zhǔn)備
1.我們可以看到應(yīng)用的再越獄中運(yùn)行的序列號為1
2.我們還可以看到應(yīng)用的bundle id
- 我們砸殼可以通過兩種方式進(jìn)行
1.通過執(zhí)行命令 clutch -d app序列號
2.通過執(zhí)行命令 clutch -d app包名
- 砸殼成功后,我們可以看到提示信息
# Zipping WeChat.app
# Swapping architectures..
# DONE: /private/var/mobile/Documents/Dumped/hk.itools.appe-iOS7.0-(Clutch-2.0.4).ipa
- 我們可以看到砸殼生成ipa目錄
- 有了目錄地址,我們通過iFunBox或者scp 拷貝到Mac,等待分析應(yīng)用.
這就是Clutch砸殼,很容易使用
注意
雖然我們介紹了兩款砸殼工具,并不代表,你想砸殼的應(yīng)用,使用上面兩種方式都很順利.我曾經(jīng)嘗試砸殼某應(yīng)用,使用兩種方式,我并沒有砸殼成功.
分析
1.有可能這款應(yīng)用做了防護(hù)
2.我們的砸殼應(yīng)用已經(jīng)不使用某應(yīng)用了,砸殼方式需要改變
我們接下來繼續(xù)介紹第三方砸殼方式
3.frida-ios-dump 一條命令完成iOS應(yīng)用砸殼
Dynamic instrumentation toolkit for developers, reverse-engineers, and security researchers.
面向開發(fā)人員膜赃、逆向工程師和安全研究人員的動(dòng)態(tài)工具工具包。
Frida地址
: FridaFrida的使用場景
1.
hook特定函數(shù)并更改返回值
2.
分析特定協(xié)議,同時(shí)其動(dòng)態(tài)嗅探,解密
3.
應(yīng)用調(diào)試
4.
在iOS應(yīng)用上dump類和方法信息iOS在Cydia安裝Frida,我們該怎樣安裝呢?
注意
如果你第一次打開Cydia,搜索Frida是搜索不到的,我們需要在軟件源中添加,紅線畫的是frida軟件源地址,你可以添加一下.
- 如果你已經(jīng)配置完成,我們跳轉(zhuǎn)到搜索頁面
我們搜索frida,然后安裝即可.
- 我們Mac下安裝frida,怎么安裝呢?
打開我們的終端,輸入 sudo pip install frida
我們通過終端已完成安裝
注意
如果出現(xiàn)下面的錯(cuò)誤
Uninstalling a distutils installed project (six) has been deprecated and will be
removed in a future version. This is due to the fact that uninstalling a distutils
project will only partially uninstall the project.
我們?nèi)绾谓鉀Q這個(gè)問題呢?
原因:Apple預(yù)安裝的這個(gè)six庫出于安全原因被設(shè)置為sudo也不可以執(zhí)行操作揉忘,所以需要依賴于高版本的庫就需要更新six.
終端執(zhí)行命令
sudo pip install frida –upgrade –ignore-installed six
問題解決后,你可以在嘗試安裝
我們配置frida-ios-dump,并配置frida
firda-ios-dump下載地址-
我已經(jīng)下載好了,我們打開文件看看
frida-ios-dump
我們可以看到j(luò)s,python,sh腳本等文件
- 我們執(zhí)行
sudo pip install -r /opt/frida-ios-dump/requirements.txt --upgrade
命令配置環(huán)境
下載了很多文件,需要等待一會,就會配置好
- 我們還需要編輯一下dump.py文件中的參數(shù)
1.
你可以直接打開文件
2.
你也可以通過命令打開文件vim /opt/dump/frida-ios-dump/dump.py
,進(jìn)行編輯后保存
3.
如果沒有修改密碼,這里了不需要進(jìn)行修改;如果修改密碼,請修改你的密碼
4.
到這里frida環(huán)境配置完成
- 我們打開終端,進(jìn)行端口轉(zhuǎn)發(fā),通過ssh連接越獄機(jī).(連接過程,我會在Cydia文章詳細(xì)介紹)
端口轉(zhuǎn)發(fā)
ssh連接越獄機(jī)
- 我們接著執(zhí)行dump.py -l命令,查看一下需要砸殼的應(yīng)用
- 接著我們執(zhí)行dump.py 應(yīng)用名/應(yīng)用bundle id
- 可以在用戶目錄下找到砸殼的ipa
- 我把ipa中的二進(jìn)制文件拷貝到桌面,驗(yàn)證是否砸殼成功
沒有殼的應(yīng)用,cyrptid 為0
4.總結(jié)
我們本篇文章主要講解了砸殼三劍客.
- dumpdecrypted
- Clutch
- frida-ios-dump
文章介紹到這里了.
下篇文章繼續(xù)介紹iOS逆向工具.