背景
- Reveal 和 FLEX 都是非常強(qiáng)大的利器憎瘸。
- Reveal 可以查看APP的視圖入篮,層次,動態(tài)修改空間位置等幌甘,是一款非常強(qiáng)大的界面調(diào)試工具利器潮售。
- FLEX 是應(yīng)用內(nèi)部調(diào)試工具,包括動態(tài)查看類锅风,庫酥诽,沙盒,動態(tài)修改UI皱埠,等一款非常強(qiáng)大的分析利器肮帐。
- 此篇文章是介紹了如何將這兩款工具,在非越獄機(jī)上边器,集成這兩款強(qiáng)大利器训枢。
先演示下效果(抖音APP示例)
快速集成 - 步驟
- brew install ldid
- 通過腳本安裝Theos:https://github.com/bigsen/Theos-Script
- 安裝 MonkeyDev
git clone https://github.com/AloneMonkey/MonkeyDev.git
cd MonkeyDev/bin
sudo ./md-install
- 下載工程后運(yùn)行:https://github.com/bigsen/CrackeApp
目錄
- Reveal 和 FLEX 介紹
- 搭建開發(fā)環(huán)境 - Theos
- 搭建開發(fā)環(huán)境 - MonkeyDev
- 獲取脫殼后的 IPA
- 在IPA中植入 Reveal 和 Flex
1. Reveal 和 FLEX 介紹
(1)Reveal 是什么
- Reveal 官方地址:https://revealapp.com
- Reveal 是一個iOS程序界面調(diào)試工具,可以在Reveal上查看視圖的層級和修改控件的屬性饰抒,用來調(diào)試UI肮砾。
- Reveal 允許開發(fā)者在不修改代碼、不重新構(gòu)建項目袋坑、不重新部署應(yīng)用程序的情況下就能夠調(diào)試iOS應(yīng)用的用戶界面仗处。
(2)Reveal 延長試用時間方法
- 對于官網(wǎng)下載的Reveal眯勾,默認(rèn)給予的是14天左右的試用時間。
- 首先 https://revealapp.com/download/ 從官網(wǎng)下載reveal婆誓,并填寫自己(未注冊過)的郵箱吃环。
- 然后會收到一封郵件,包含試用的激活碼洋幻。
- 打開reveal 輸入激活碼即可郁轻。
- 試用到期后,把電腦時間調(diào)整到注冊日期之時文留,然后再打開reveal即可恢復(fù)試用時間好唯。
(1)FLEX 是什么
- FLEX官方地址:https://github.com/Flipboard/FLEX
- Flipboard/ FLEX (Flipboard Explorer) 是 Flipboard 發(fā)布的應(yīng)用內(nèi)調(diào)試工具,開發(fā)者可在toolbar中查看和修改運(yùn)行中的應(yīng)用燥翅。
(2)FLEX 安裝
- 可通過pod方式引入:pod 'FLEX', '~> 2.0'
(3)FLEX 功能:
-
查看骑篙、實(shí)時修改view(與Reveal相關(guān)功能類似,視覺驗證中非常有用)
-
監(jiān)控網(wǎng)絡(luò)請求記錄(與Charles抓包功能類似)
-
沙盒內(nèi)容查看(數(shù)據(jù)持久化內(nèi)容)
-
查看App中所有的類以及所用到的系統(tǒng)Framework森书。
-
動態(tài)查看和修改NSUserDefaults值靶端。
快速查看打印日志(來自NSLog)
動態(tài)修改對象屬性值。
動態(tài)調(diào)用實(shí)例和類方法凛膏。
2. 搭建開發(fā)環(huán)境 - Theos
(1)安裝方式一(自動)
- 自動下載腳本TheosScript.sh杨名,不需手動添加ldid、libsubstrate猖毫、dpkg-deb等台谍。
- 腳本地址:https://github.com/bigsen/Theos-Script
演示:
(2)安裝方式二(手動)
1. 從 GitHub 上下載Theos
export THEOS=/opt/theos
sudo git clone --recursive https://github.com/theos/theos.git $THEOS
小問題:git 克隆下來的theos,make packget install 如果提示提示缺少 _Prefix/NullabilityCompat.h 等文件鄙麦,需要我們?nèi)?a target="_blank">https://github.com/theos/headers 把這個頭文件放到/opt/theos/include目錄中就行了典唇。
sudo git clone https://github.com/theos/headers /opt/theos/include/
2. 配置ldid
ldid 是專門用來 名 iOS 可執(zhí)行文件的工具,用以在越獄 iOS 中 代替 Xcode 自帶的 codesign镊折。
- 第一種方法:
brew install ldid
- 第二種方法:
從 http://joedj.net/ldid 下 ldid,把它放在“ /opt/theos/bin/ ”下,然后用以下命令賦予它可執(zhí)行權(quán)限:
sudo chmod 777 /opt/theos/bin/ldid
3. dpkg-deb
deb 是越獄開發(fā)安裝包的標(biāo)準(zhǔn)格式,dpkg-deb 是一個用于操作 deb 文件的工具,有了這個工具,Theos 才能正確地把工程打包成為 deb 文件胯府。
從 https://raw.githubusercontent.com/DHowett/dm.pl/master/dm.pl 下 dm.pl,將其重命名為 dpkg-deb 后,放到“/opt/theos/bin/”目錄下,然后用以下命令賦予其可執(zhí)行權(quán)限:
sudo chmod 777 /opt/theos/bin/dpkg-deb
3. 搭建開發(fā)環(huán)境 - MonkeyDev
- MonkeyDev ,是越獄開發(fā)iOSOpenDev的升級恨胚,越獄插件開發(fā)集成神器骂因。
- 官方文檔:https://github.com/AloneMonkey/MonkeyDev/wiki
git clone https://github.com/AloneMonkey/MonkeyDev.git
cd MonkeyDev/bin
sudo ./md-install
- 這樣以后, 本地就有了MonkeyDev 開發(fā)功能赃泡, 可以在Xcode新建項目時寒波,選擇MonkeyApp。
4. 獲取脫殼后的 IPA (3種方法)
第一種:
- 利用"dumpdecrypted"給ipa砸殼:http://www.reibang.com/p/a4373b5feca0
第二種:
- 一條命令砸殼 (詳細(xì)菜鳥版) :http://www.reibang.com/p/6eb62eabb988
第三種:
- 通過越獄設(shè)備升熊, 使用PP助手越獄版本, 下載對應(yīng)APP到手機(jī)上俄烁。
- 然后使用ifunbox,從/var/mobile/Containers/Bundle/Application 中找到级野,拷貝出來.app 包即可页屠。
第四種:
通過PP助手是下載越獄ipa文件。
5. 在IPA中植入Reveal 和 Flex
到現(xiàn)在這一步我們已經(jīng)有了:
- FLEX 工具
- Reveal 工具
- MonkeyDev 環(huán)境
- 脫殼后的 IPA文件
然后我們就可以正式開始我們的集成工作:
(1)新建 MonkeyDev 工程。
(2)替換 Reveal Framework 為自己電腦當(dāng)前對應(yīng)版本辰企。
- 使用自己電腦的RevealServer.framework替換掉/opt/MonkeyDev/frameworks下面的RevealServer.framework风纠。
sudo rm -f -r /opt/MonkeyDev/Frameworks/RevealServer.framework
sudo cp -f -r /Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/RevealServer.framework /opt/MonkeyDev/Frameworks/RevealServer.framework
(3)MonkeyDev 工程添加FLEX Pod依賴。
- 打開 MonkeyDev 工程中的 Podfile牢贸,在target ' XXX Dylib' do
里面填寫pod 'FLEX', '~> 2.0'竹观。
(4)注冊監(jiān)聽,初始化FLEXManager潜索。
- 導(dǎo)入頭文件臭增。
- 在CHConstructor里注冊DidFinish監(jiān)聽,初始化FLEX竹习。
(5)放入脫殼后的ipa到MonkeyDev工程速址。
然后運(yùn)行MonkeyDev工程。
某些APP啟動會Crash由驹,需要打開AntiAntiDebug.m芍锚,取消注釋這句話。
rebind_symbols((struct rebinding[1]){{"sysctl", my_sysctl, (void*)&orig_sysctl}},1);
文中Demo示例:https://github.com/bigsen/CrackeApp
http://www.reibang.com/p/db142e71ce9a
參考文章
參考書籍
- 《iOS逆向工程》
- 《iOS應(yīng)用與逆向安全》