《iOS底層原理文章匯總》
上一篇文章《iOS-逆向21-越獄&OpenSSH》介紹了越獄&OpenSSH歉备,本文介紹砸殼傅是。
1.iOS9的系統(tǒng)完美越獄恢復,拷貝unjailbreak.sh到越獄手機根目錄下蕾羊,只是sh unjailbreak.sh手機重啟后喧笔,恢復為非越獄環(huán)境
2.砸殼原理
應用加殼(加密)
提交給Appstore發(fā)布的App,都經(jīng)過官方保護而加密龟再,這樣可以保證機器上跑的應用是蘋果審核過的书闸,也可以管理軟件授權(quán)。經(jīng)過App Store加密的應用利凑,我們無法通過Hopper等反編譯靜態(tài)分析浆劲,也無法Class-Dump嫌术,在逆向分析過程中需要對加密的二進制文件進行解密才可以進行靜態(tài)分析,這一過程就是大家熟知的砸殼(脫殼)
應用砸殼(解密)
靜態(tài)砸殼
靜態(tài)砸殼就是在已經(jīng)掌握和了解到了殼應用的加密算法和邏輯后在不運行殼應用程序的前提下將殼應用程序進行解密處理梳侨。靜態(tài)脫殼的方法難度大蛉威,而且加密方發(fā)現(xiàn)應用被破解后就可能會改用更加高級和復雜的加密技術(shù)
動態(tài)砸殼
動態(tài)砸殼就是從運行在進程內(nèi)存空間中的可執(zhí)行程序映像(image)入手日丹,來將內(nèi)存中的內(nèi)容進行轉(zhuǎn)儲(dump)處理來實現(xiàn)脫殼處理走哺。這種方法實現(xiàn)起來相對簡單,且不必關(guān)心使用的是何種加密技術(shù)哲虾。
越獄的手機能訪問進程丙躏,從而能獲取到進程中的MachO文件,進程中的MachO是沒有加密的
3.Clutch
Clutch是由KJCracks開發(fā)的一款開源砸殼工具束凑。工具支持iPhone晒旅、iPod Touch、iPad汪诉,該工具需要使用iOS8.0以上的越獄手機應用废恋。
I.安裝,下載Clutch 2.0.4版本,是通用二進制文件
官網(wǎng)
II.拷貝Clutch 2.0.4文件到手機中scp -P 12345 ./Clutch-2.0.4 root@127.0.0.1:/var/root/Clutch
,拷貝的同時改Clutch 2.0.4文件為Clutch
III.給Clutch文件增加可執(zhí)行權(quán)限chmod +x Clutch
./Clutch -i查看安裝的軟件
IV.砸殼./Clutch -d 2,砸殼抖音
./Clutch -d 4,砸殼QQ,在手機/private/var/mobile/Documents/Dumped路徑下有砸殼好的ipa包扒寄,很明顯如下砸殼失敗了
V.從越獄手機中拷貝QQ的MachO文件到Mac中
scp -P 12345 root@127.0.0.1:/var/mobile/Containers/Bundle/Application/2018C47F-40F6-4FC3-B121-68472B7897EE/QQ.app/QQ ./QQ
otool -l QQ,查看可執(zhí)行文件QQ結(jié)構(gòu)
越獄插入鱼鼓,不污染三方應用的插件
非越獄的注入
4.在越獄手機中手動插入動態(tài)庫
I.新建工程,里面注入Inject動態(tài)庫,拷貝出Inject.framework到新建的工程目錄下,再拷貝到手機中
抖音路徑:/var/mobile/Containers/Bundle/Application/21CF3978-5308-4420-A7AA-615089512B70/Aweme.app/Aweme
QQ路徑:/var/mobile/Containers/Bundle/Application/2018C47F-40F6-4FC3-B121-68472B7897EE/QQ.app/QQ
微信路徑:/var/mobile/Containers/Bundle/Application/C4C23D7D-6554-4C76-BE88-D01FECE8B873/WeChat.app/WeChat
抖音極速版路徑:/var/mobile/Containers/Bundle/Application/A0CAA998-D2FC-4D91-9A83-384E9ED235C3/AwemeLite.app/AwemeLite
II.注入Inject動態(tài)庫到目標應用(抖音),在iOS9.3以后插入到哪一個進程都會出現(xiàn)kill 9,要切換成mobile用戶
我的iPhone6是iOS9.2.1的系統(tǒng)该编,root和mobile用戶權(quán)限都能注入成功F尽!
DYLD_INSERT_LIBRARIES=Inject.framework/Inject /var/mobile/Containers/Bundle/Application/21CF3978-5308-4420-A7AA-615089512B70/Aweme.app/Aweme
注入QQ也可以课竣,但會報一個錯嘉赎,注入重簽的微信也會報一個錯。
DYLD_INSERT_LIBRARIES=Inject.framework/Inject /var/mobile/Containers/Bundle/Application/2018C47F-40F6-4FC3-B121-68472B7897EE/QQ.app/QQ
換手機試下iPhone 8p,
微信路徑:/var/containers/Bundle/Application/65FADAD7-34CF-4EE9-B548-6403C1D757CF/WeChat.app/WeChat
支付寶路徑:/var/containers/Bundle/Application/C1ECB91B-F3A7-4C5E-BBE6-4F9A82F83126/AlipayWallet.app/AlipayWallet
InjectDemo路徑:/var/containers/Bundle/Application/50A02104-6D24-4B28-BE7D-218EC5E25914/InjectDemo.app/InjectDemo
scp -r -P 12345 Inject.framework root@localhost:/var/root
此時注入DYLD_INSERT_LIBRARIES=Inject.framework/Inject /var/containers/Bundle/Application/65FADAD7-34CF-4EE9-B548-6403C1D757CF/WeChat.app/WeChat
會報錯kill 9錯誤于樟,因為iPhone 8p是iOS11.0的系統(tǒng),切換mobile用戶su mobile
iOS 9.3以后報錯killed:9公条,切換mobile用戶,注入微信還報錯,注入支付寶也報錯迂曲,注入自己的進程InjectDemo成功
DYLD_INSERT_LIBRARIES=Inject.framework/Inject /var/containers/Bundle/Application/50A02104-6D24-4B28-BE7D-218EC5E25914/InjectDemo.app/InjectDemo
III.越獄設(shè)備中赃份,其他進程要插入插件、動態(tài)庫奢米,需利用環(huán)境變量DYLD_INSERT_LIBRARIES抓韩,任何一個進程只要DYLD_INSERT_LIBRARIES中有東西會立刻馬上去加載執(zhí)行了,若想插入自己寫的代碼鬓长,可以封裝成插件
5.dumpdecrypted
Github開源工具谒拴。 dumpdecrypted這個工具就是通過建立一個名為dumpdecrypted.dylib的動態(tài)庫,插入目標應用實現(xiàn)脫殼涉波。
I.make編譯生成dumpdecrypted.dylib和dumpdecrypted.o兩個文件
II.拷貝dumpdecrypted.dylib到iPhone6越獄機根目錄下scp -P 12345 dumpdecrypted.dylib root@127.0.0.1:/var/root
移動到手機/var/mobile目錄下英上,因為mobile用戶執(zhí)行dump命令時要有寫的權(quán)限炭序,而mobile用戶在/var/root目錄下是沒有寫的權(quán)限的,所以要拷貝到mobile用戶有寫的權(quán)限的目錄下/var/mobile執(zhí)行命令,才能成功dump出來
mv dumpdecrypted.dylib /var/mobile/
苍日,切換為mobile用戶
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/21CF3978-5308-4420-A7AA-615089512B70/Aweme.app/Aweme
dump成功抖音Aweme.decrypted
將砸殼后的抖音Aweme.decrypted拷貝到Mac桌面
scp -P 12345 root@127.0.0.1:/var/mobile/Aweme.decrypted ~/Desktop/
6.frida-ios-dump
A.Mac安裝方式
該工具基于frida提供的強大功能通過注入js實現(xiàn)內(nèi)存dump然后通過python自動拷貝到電腦生成ipa文件惭聂。
I.查看python版本python -V
II.查看pip版本 pip -V
安裝pip:sudo easy_install pip,若安裝pip3遇到如下報錯 sudo easy_install pip3
Password:
Searching for pip3
Reading https://pypi.org/simple/pip3/
Couldn't find index page for 'pip3' (maybe misspelled?)
Scanning index of all packages (this may take a while)
Reading https://pypi.org/simple/
No local packages or working download links found for pip3
error: Could not find suitable distribution for Requirement.parse('pip3')
解決辦法
curl -O https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py
遇到警告,sudo后面加-H
WARNING: The directory '/Users/cloud/Library/Caches/pip' or its parent directory is not owned or is not writable by the current user. The cache has been disabled. Check the permissions and owner of that directory. If executing pip with sudo, you should use sudo's -H flag.
III.sudo pip install frida-tools\sudo pip3 install frida-tools
若報警告WARNING: The directory '/Users/cloud/Library/Caches/pip' or its parent directory is not owned or is not writable by the current user. The cache has been disabled. Check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
前面加sudo -H pip3 install frida-tools
B.iOS安裝方式
I.添加源https://build.frida.re,安裝frida
進入/opt/MonkeyDev/bin目錄執(zhí)行frida-ps列出所有進程
frida-ps -U此時列出USB連接的進程
frida的作用:
/opt/MonkeyDev/bin下直接進入具體應用
frida -U 微信
報錯是因為我的手機里面安裝了一個正版微信,一個砸殼微信
Failed to spawn: ambiguous name; it matches: 微信 (pid: 5952), 微信 (pid: 3456)
frida -U 支付寶相恃,前提是支付寶在前臺運行辜纲,可正常進入,并能執(zhí)行frida語句拦耐,語法見官網(wǎng)doc
執(zhí)行ObjC的打印
C.dump-ios-ipa,以微信為例耕腾,dump出微信.ipa包
I.Install frida on device,添加源,在越獄iOS設(shè)備中安裝frida杀糯,如上問B.iOS安裝方式
II.sudo pip3 install -r requirements.txt --upgrade
III.開啟端口映射扫俺,執(zhí)行sh usbConnect.sh或iproxy 12345 22,為什么要有這一步,試想固翰,因為最終要從越獄iPhone設(shè)備上拷貝出砸殼后的.ipa包出來狼纬,必定要操作手機,需要連接Mac到iPhone骂际,需要端口號映射
IV.執(zhí)行./dump.py 微信疗琉,若遇到
Traceback(most recent call last):
File "./dump.py",line 11,in <module>
import frida
ImportError:No module named frida
解決辦法是將dump.py中的python改為python3,python版本是2改為python2,是python3就改為python3方援,通過python --version查看當前版本
V.若遇到端口報錯没炒,要先開啟端口映射執(zhí)行sh usbConnect.sh或iproxy 12345 22,同時要求改dump.py文件中的User(用戶名)、Password(密碼)犯戏、Host(主機名)和Port(端口號)送火。
[Error None] Unable to connect to port 2222 on 127.0.0.1or ::1
Try specifying -H/--hostname and/or -p/--port
VI.執(zhí)行./dump.py 微信,dump成功微信.ipa包在dump.py同級目錄下
VII.若想全局使用dump.py則將dump.py和dump.js兩個文件拷貝到Monkey目錄下先匪,并在.zshrc文件中將Monkey目錄配置環(huán)境變量种吸,通過which dump.py命令可查看dump.py是/opt/MonkeyDev/bin/dump.py目錄中的dump.py
D.默認越獄手機中不支持中文輸入,拷貝.inputrc到手機中
scp -P 12345 .inputrc root@localhost:/var/root/
set convert-meta off
set output-meta on 允許向終端輸出中文
set meta-flag on
set input-meta on 允許向終端輸入中文