背景
- Reveal 和 FLEX 都是非常強大的利器。
- Reveal 可以查看APP的視圖,層次,動態修改空間位置等,是一款非常強大的界面調試工具利器。
- FLEX 是應用內部調試工具,包括動態查看類,庫,沙盒,動態修改UI,等一款非常強大的分析利器。
- 此篇文章是介紹了如何將這兩款工具,在非越獄機上,集成這兩款強大利器。
先演示下效果(抖音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
目錄
- Reveal 和 FLEX 介紹
- 搭建開發環境 - Theos
- 搭建開發環境 - MonkeyDev
- 獲取脫殼后的 IPA
- 在IPA中植入 Reveal 和 Flex
1. Reveal 和 FLEX 介紹
(1)Reveal 是什么
- Reveal 官方地址:https://revealapp.com
- Reveal 是一個iOS程序界面調試工具,可以在Reveal上查看視圖的層級和修改控件的屬性,用來調試UI。
- Reveal 允許開發者在不修改代碼、不重新構建項目、不重新部署應用程序的情況下就能夠調試iOS應用的用戶界面。
(2)Reveal 延長試用時間方法
- 對于官網下載的Reveal,默認給予的是14天左右的試用時間。
- 首先 https://revealapp.com/download/ 從官網下載reveal,并填寫自己(未注冊過)的郵箱。
- 然后會收到一封郵件,包含試用的激活碼。
- 打開reveal 輸入激活碼即可。
- 試用到期后,把電腦時間調整到注冊日期之時,然后再打開reveal即可恢復試用時間。
(1)FLEX 是什么
- FLEX官方地址:https://github.com/Flipboard/FLEX
- Flipboard/ FLEX (Flipboard Explorer) 是 Flipboard 發布的應用內調試工具,開發者可在toolbar中查看和修改運行中的應用。
(2)FLEX 安裝
- 可通過pod方式引入:pod 'FLEX', '~> 2.0'
(3)FLEX 功能:
-
查看、實時修改view(與Reveal相關功能類似,視覺驗證中非常有用)
-
監控網絡請求記錄(與Charles抓包功能類似)
-
沙盒內容查看(數據持久化內容)
-
查看App中所有的類以及所用到的系統Framework。
-
動態查看和修改NSUserDefaults值。
快速查看打印日志(來自NSLog)
動態修改對象屬性值。
動態調用實例和類方法。
2. 搭建開發環境 - 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 等文件,需要我們去https://github.com/theos/headers 把這個頭文件放到/opt/theos/include目錄中就行了。
sudo git clone https://github.com/theos/headers /opt/theos/include/
2. 配置ldid
ldid 是專門用來 名 iOS 可執行文件的工具,用以在越獄 iOS 中 代替 Xcode 自帶的 codesign。
- 第一種方法:
brew install ldid
- 第二種方法:
從 http://joedj.net/ldid 下 ldid,把它放在“ /opt/theos/bin/ ”下,然后用以下命令賦予它可執行權限:
sudo chmod 777 /opt/theos/bin/ldid
3. dpkg-deb
deb 是越獄開發安裝包的標準格式,dpkg-deb 是一個用于操作 deb 文件的工具,有了這個工具,Theos 才能正確地把工程打包成為 deb 文件。
從 https://raw.githubusercontent.com/DHowett/dm.pl/master/dm.pl 下 dm.pl,將其重命名為 dpkg-deb 后,放到“/opt/theos/bin/”目錄下,然后用以下命令賦予其可執行權限:
sudo chmod 777 /opt/theos/bin/dpkg-deb
3. 搭建開發環境 - MonkeyDev
- MonkeyDev ,是越獄開發iOSOpenDev的升級,越獄插件開發集成神器。
- 官方文檔:https://github.com/AloneMonkey/MonkeyDev/wiki
git clone https://github.com/AloneMonkey/MonkeyDev.git
cd MonkeyDev/bin
sudo ./md-install
- 這樣以后, 本地就有了MonkeyDev 開發功能, 可以在Xcode新建項目時,選擇MonkeyApp。
4. 獲取脫殼后的 IPA (3種方法)
第一種:
- 利用"dumpdecrypted"給ipa砸殼:http://www.lxweimin.com/p/a4373b5feca0
第二種:
- 一條命令砸殼 (詳細菜鳥版) :http://www.lxweimin.com/p/6eb62eabb988
第三種:
- 通過越獄設備, 使用PP助手越獄版本, 下載對應APP到手機上。
- 然后使用ifunbox,從/var/mobile/Containers/Bundle/Application 中找到,拷貝出來.app 包即可。
第四種:
通過PP助手是下載越獄ipa文件。
5. 在IPA中植入Reveal 和 Flex
到現在這一步我們已經有了:
- FLEX 工具
- Reveal 工具
- MonkeyDev 環境
- 脫殼后的 IPA文件
然后我們就可以正式開始我們的集成工作:
(1)新建 MonkeyDev 工程。
(2)替換 Reveal Framework 為自己電腦當前對應版本。
- 使用自己電腦的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)注冊監聽,初始化FLEXManager。
- 導入頭文件。
- 在CHConstructor里注冊DidFinish監聽,初始化FLEX。
(5)放入脫殼后的ipa到MonkeyDev工程。
然后運行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.lxweimin.com/p/db142e71ce9a
參考文章
參考書籍
- 《iOS逆向工程》
- 《iOS應用與逆向安全》