砸殼原理
砸殼顧名思義就是對軟件進行逆向操作抢腐,對已加密的軟件進行解密,從而獲取真實軟件源碼肴颊。
App Store下載的包全都是經(jīng)過蘋果加密過的包氓栈。蘋果不允許開發(fā)者自己加密ipa包渣磷,加密后的ipa包婿着,我們是無法對其進行反編譯的。也無法class-dump醋界,需要對其進行解密才能反編譯竟宋。
砸殼的兩種方式
一、靜態(tài)砸殼
使用已知的解密方法對軟件進行解密叫靜態(tài)砸殼形纺,靜態(tài)砸殼難度大丘侠,需要知道其軟件的加密算法才能對其解密。
二逐样、動態(tài)砸殼
從進程的內(nèi)存空間中獲取軟件鏡像(image)進行轉存處理叫動態(tài)砸殼蜗字,動態(tài)砸殼無需關心軟件的加密技術,只需要從內(nèi)存中獲取即可脂新,這種方法相對簡單挪捕。
為什么可以通過這種方式進行砸殼呢?
任何軟件的加密方式都需要系統(tǒng)內(nèi)核能讀懂争便,系統(tǒng)內(nèi)核不認識也就無法運行级零。系統(tǒng)內(nèi)核能對其運行,也就對其解密了滞乙,解密后鏡像會保存在內(nèi)存中奏纪,我們就是通過這種方式對其進行獲取的。
砸殼工具介紹
1斩启、clutch
Clutch是由KJCracks開發(fā)的一款開源砸殼工具序调。工具支持iPhone、iPod Touch兔簇、iPad发绢,該工具需要使用iOS8.0以上的越獄手機應用。
Clutch 是一個可執(zhí)行文件男韧,固不能直接clone代碼來使用朴摊。我們可以在(release)頁面下載最新的可執(zhí)行文件來使用。
Clutch是一個在手機執(zhí)行的軟件此虑,我們要將其拷貝到手機(已越獄)甚纲。
- 連接手機
# ssh root@手機IP
$ssh root@192.168.0.1
- 拷貝文件到手機
# scp 被拷貝文件名 root@機IP:可執(zhí)行文件地址;
# 手機中的這個目錄地址(/usr/bin)的文件,是在任何地方都可以執(zhí)行的目錄文件朦前。
$scp Clutch-2.0.4 root@192.168.0.1:/usr/bin
- 列出可以砸殼的列表
# 列出可以砸殼的列表(列表中都是正在運行的APP)
$Clutch -i
- 砸殼
# Clutch –d 應用ID
$ Clutch -d 4
- 完成后會打印文件保存路徑
# com.gotokeep.keep-iOS9.0-(Clutch-2.0.4)-2.ipa 是導出的包名
DONE: /private/var/mobile/Documents/Dumped/com.gotokeep.keep-iOS9.0-(Clutch-2.0.4)-2.ipa
Fnished dumping com.gotokeep.keep in 40.1 seconds
- 通過ifunbox打開手機上面路徑介杆,將包拷貝到電腦
- 驗證是否砸殼成功(檢查包內(nèi)的MachO文件)
# Keep是MachO文件
$ otool -l Keep | grep crypt
2鹃操、dumpdecrypted
Github開源工具, dumpdecrypted這個工具就是通過建立一個名為dumpdecrypted.dylib的動態(tài)庫春哨,插入目標應用實現(xiàn)脫殼荆隘。
- Git Clone
# clone
$git clone https://github.com/stefanesser/dumpdecrypted.git
- Make 編譯生成動態(tài)庫
# 在文件的目錄下執(zhí)行make
$make
- 遠程拷貝到手機
#拷貝到手機跟目錄下
# scp 拷貝
# dumpdecrypted.dylib 動態(tài)庫
# root 手機root賬號
# 192.168.0.1 手機IP地址
# ~/ 手機根目錄
$scp dumpdecrypted.dylib root@192.168.0.1:~/
- 連接手機
# ssh root@手機IP
$ssh root@192.168.0.1
- 查看需要砸殼的app列表路徑
# 查看需要砸殼的app列表路徑
$ps -A
- 砸殼:通過DYLD_INSERT_LIBRARIES 環(huán)境變量插入動態(tài)庫執(zhí)行
$DYLD_INSET_LIBRARIES=路徑
- 完成后會生成
應用名.decrypted
文件,dumpdecrypted只給我們導出了Mach-O文件赴背,沒有同時把資源導出來椰拒,也沒有打包成ipa,所以它的速度更快一些凰荚。 - 找到在手機跟目錄的
應用名.decrypted
通過ifunbox拷貝到電腦 - 驗證是否砸殼成功
# Keep是MachO文件
$ otool -l `應用名.decrypted` | grep crypt
3燃观、frida-ios-dump
該工具基于frida提供的強大功能通過注入js實現(xiàn)內(nèi)存dump然后通過python自動拷貝到電腦生成ipa文件。
安裝Mac端frida
- 查看python版本便瑟,Mac都是自帶的
$python -V
Python 2.7.10
- 查看pip版本缆毁,沒有則安裝
# 安裝pip
$sudo easy_install pip
- 安裝frida
# 安裝frida
$sudo pip install frida-tools
- 安裝frida出現(xiàn)的問題
問題1:
chian$ sudo pip uninstall prompt-toolkit
The directory '/Users/chian/Library/Caches/pip/http' or its parent directory
is not owned by the current user and the cache has been disabled.
Please check the permissions and owner of that directory.
If executing pip with sudo, you may want sudo's -H flag.
解決辦法:
$sudo-H pip install frida-tools
問題2:Uninstalling a distutils installed project (six)
解決辦法:
$sudo pip install frida –upgrade –ignore-installed six
配置frida-ios-dump環(huán)境
- clone iOS-dump
$sudo git clone https://github.com/AloneMonkey/frida-ios-dump
- 進入目錄安裝即可
$sudo pip install -r frida-ios-dump/requirements.txt –upgrade
- 安裝出現(xiàn)的問題:
問題1:
$frida-tools 1.2.2 has requirement prompt-toolkit<2.0.0,>=0.57, but you'll have prompt-toolkit 2.0.7 which is incompatible
解決辦法:降低 prompt-toolkit 版本
# 卸載
$sudo pip uninstall prompt-toolkit
# 安裝指定版本
$sudo pip install prompt-toolkit==1.0.6
越獄手機iOS端安裝frida
- 啟動 Cydia
- 添加軟件源 軟件源 Sources -> 編輯 Edit(左上角)-> 添加 Add(右上角)-> 輸入 https://build.frida.re/
- 根據(jù)設備的32位或64位cpu構架安裝對應的frida。
- 連接手機(連接教程)輸入列出可砸殼應用命令檢查是否可以使用
frida-ps -U
- 修改dump.py參數(shù)
$vim /opt/dump/frida-ios-dump/dump.py
#用戶名
User = 'root'
# 密碼
Password = 'alpine'
# 手機IP地址或者映射地址
Host = 'localhost'
# 端口號到涂,端口號在設置USB連接時修改了
Port = 2222
- 設置別名
打開.bash_profile
$vim ~/.bash_profile
在末尾加上一條
# 注意:/opt/dump 是文件目錄路徑脊框,可以按需更改。
alias dump.py="/opt/dump/frida-ios-dump/dump.py"
使別名生效
source ~/.bash_profile
通過frida砸殼
- 打開終端映射端口
# 映射端口
$iproxy 12345 22
- 新建終端窗口連接手機
# 127.0.0.1 是IP地址
# -p 表示端口號
$ssh -p 12345 root@127.0.0.1
- 砸殼
# 列出可砸到應用列表
$frida-ps -U
# 砸其中的QQ
$dump.py QQ
砸殼成功后會在frida-ios-dump
目錄下生成砸殼后的ipa包践啄。
- 完成砸殼驗證是否砸殼成功
# Keep是MachO文件
$ otool -l `應用名.decrypted` | grep crypt
手動砸殼
請?zhí)D查看手動砸殼