adv-cmds
adv cmds是PushFix依賴包中的一個組件,而PushFix依賴包則是Cydia插件必備依賴包(絕大多數Cydia程序的依賴)之一在
Cydia中,安裝adv-cmds插件
Cycript
在越獄環(huán)境中使用
Cycript在越獄設備上,安裝
Cycript插件。需要先安裝adv-cmds插件,因為被Cycript插件所依賴在
Cydia中,安裝Cycript插件
在設備中打開
ps -A | grep WeChat ------------------------- 7619 ?? 0:39.37 /var/containers/Bundle/Application/454EA887-EB3B-43B3-ABFD-B9B2CA006981/WeChat.app/WeChat針對
cy環(huán)境root# cycript -p 7619此時我們并沒有污染
cycript命令進行調試了例如:獲取
UIApplicationUIApp ------------------------- #"<UIApplication: 0x10db0c260>"
導入cy文件
在越獄環(huán)境中,使用自定義
cy文件找到之前使用的“獲取當前控制器”的
cy腳本,在越獄環(huán)境中,將腳本拷貝到設備上的Cycript指定目錄下,即可使用將
cur_vc.cy腳本,拷貝到/usr/lib/cycript0.9目錄下scp -P 12345 ./cur_vc.cy root@localhost:/usr/lib/cycript0.9 ------------------------- cur_vc.cy 100% 959 496.6KB/s 00:00針對
cy環(huán)境。可以使用進程id或名稱cycript -p WeChat導入
cur_vc腳本@import cur_vc ------------------------- {}獲取當前控制器
currentVC() ------------------------- #"<MoreViewController: 0x10f36da00>"
使用
cy文件,必須拷貝到Cycript指定目錄下,這樣很可能造成文件沖突。所以Cycript引入了命名空間,可以將cy文件拷貝到不同子目錄中,然后按照指定規(guī)則導入在
/usr/lib/cycript0.9目錄下,已經默認存在一些子目錄iPhone6P:/usr/lib/cycript0.9 root# ls ------------------------- com/ cur_vc.cy* org/在
com目錄下,存在以作者名字命名的saurik目錄,里面存儲了官方的MS.cy腳本iPhone6P:/usr/lib/cycript0.9/com root# ls ------------------------- saurik/仿照官方的目錄結構,在
com目錄下,創(chuàng)建自定義目錄mkdir zang將
cur_vc腳本,移動到自定義目錄下mv ./cur_vc.cy /usr/lib/cycript0.9/com/zang進入
cy環(huán)境,導入cur_vc腳本@import com.zang.cur_vc ------------------------- {}使用這種方式,保證了腳本的唯一性,有效避免文件沖突。并且按不同目錄劃分,更利于腳本的管理
theos
theos是一個越獄開發(fā)工具包,使用它可以創(chuàng)建Tweak項目,動態(tài)Hook第三方程序使用
MonkeyDev框架,它提供的Logos語法,其實也依賴于theos
theos安裝sudo git clone --recursive https://github.com/theos/theos.git /opt/theos
theos有很多依賴庫,使用recursive參數,可以循環(huán)下載,將依賴庫一并安裝opt目錄,用來安裝附加軟件包。有時會出現(xiàn)系統(tǒng)權限問題,建議將theos安裝自定義目錄?;蛘甙惭b到opt目錄,然后在自定義目錄中拷貝一份
theos安裝后,配置環(huán)境變量vim ~/.zshrc ------------------------- export THEOS=/Users/zang/Zang/Tools/theos export PATH=$THEOS/bin:$PATH
安裝
theos的過程中,可能會一同安裝ldid
ldid是針對越獄插件的簽名工具。如果未安裝,需要手動安裝brew install ldid
theos插件
使用
theos插件,竊取Alipay的登錄密碼在設備中打開
Alipay,并找到它的進程ps -A | grep Alipay ------------------------- 8147 ?? 0:27.89 /var/containers/Bundle/Application/995CAC20-52A5-4D23-A605-FCF623931B79/AlipayWallet.app/AlipayWallet進入
Alipay進程的cy環(huán)境cycript -p AlipayWallet導入
cur_vc腳本@import com.zang.cur_vc
動態(tài)調試
進入
Alipay的密碼登錄頁面查看當前控制器
currentVC() ------------------------- #"<ALULoginContainerController: 0x10bf68860>"打印控制器下所有視圖
#0x10bf68860.view.recursiveDescription() .toString ()
首先找到登錄按鈕
在輸出的視圖中,搜索“登錄”文案,找不到任何結果。因為在
cy環(huán)境中,中文使用了Unicode編碼將“登錄”文案,通過
Unicode編碼為\u767b\u5f55在輸出的視圖中,搜索
\u767b\u5f55
- 共找到兩處“登錄”文案,第一處是“登錄”,第二處是“換個方式登錄”
找到“登錄”按鈕的
UIButton| | | <AUButton: 0x118e08500; baseClass = UIButton; frame = (16 367.667; 382 51); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x283f66aa0>> | | | | <UIImageView: 0x118e49990; frame = (0 0; 382 51); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x283f67da0>> | | | | <UIButtonLabel: 0x118e08af0; frame = (170.667 13.6667; 41 24); text = '\u767b\u5f55'; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x281e69400>> | | | | | <_UILabelContentLayer: 0x283f49d20> (layer)
找到
UIButton的事件響應者和事件名稱找到
UIButton的事件響應者#0x118e08500.allTargets ------------------------- [NSSet setWithArray:@[#"<AUButton: 0x118e08500; baseClass = UIButton; frame = (16 367.667; 382 51); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x283f66aa0>>",#"<ALUAccuratePWDView: 0x118e501a0; frame = (0 0; 414 736); layer = <CALayer: 0x283f85880>>"]]]
- 找到兩個響應者,一個是
UIButton自身,另一個是ALUAccuratePWDView控件確認
UIButton的觸摸事件#0x118e08500.allControlEvents ------------------------- 64
64對應的UIControlEventTouchUpInside枚舉值找到
UIControlEventTouchUpInside的定義UIControlEventTouchUpInside = 1 << 6
1左移6位,即:2的6次方,結果為64當
UIButton觸發(fā)UIControlEventTouchUpInside,事件響應者為ALUAccuratePWDView
找到響應者的事件名稱
通過響應者和觸摸事件,找到事件名稱
[#0x118e08500 actionsForTarget: #0x118e501a0 forControlEvent: 64] ------------------------- @["onNext"]
參數1為響應者對象,參數2為觸摸事件的枚舉值,返回事件名稱onNext登錄的
UIButton可觸發(fā)ALUAccuratePWDView對象的onNext方法
找到密碼文本框
在密碼框中輸入
123456使用老套路,在輸出的視圖中,搜索
123456
- 找到密碼框的
UITextField從視圖結構的層級分析:
UITextField→aluInputBox→aluAccurateLoginBox→ALUAccuratePWDView和密碼框相關的父視圖,可追尋至
ALUAccuratePWDView控件。此控件也是“登錄”按鈕的事件響應者
靜態(tài)分析
使用
frida-ios-dump導出Alipayfrida-ps -U ------------------------- PID Name 7652 Cydia 7619 微信 8147 支付寶 ...dump.py 支付寶解壓
ipa,拷貝出MachO文件,使用class-dump導出頭文件class-dump -H AlipayWallet -o ./header
- 小竅門:將包內容按大小排序,可快速定位
MachO文件找到
ALUAccuratePWDView.h文件
- 并沒有找到
aluAccurateLoginBox對象,但有一個命名為_loginBox的aluLoginBox對象找到
aluLoginBox.h文件
- 找到了命名為
_passwordInputBox的aluInputBox對象找到
aluInputBox.h文件
- 找到了命名為
_textField的aluTextField對象,繼承自UITextField可以鎖定密碼文本框的查找路徑:
self(ALUAccuratePWDView)→_loginBox(aluLoginBox)→_passwordInputBox(aluInputBox)→_textField(UITextField)→text(屬性)在
ALUAccuratePWDView.h文件中,同時找到了onNext方法
可以確定登錄按鈕的響應事件:
[ALUAccuratePWDView onNext]
搭建theos插件
使用
nic.pl,創(chuàng)建插件nic.pl ------------------------- NIC 2.0 - New Instance Creator [1.] iphone/activator_event [2.] iphone/activator_listener [3.] iphone/application_modern [4.] iphone/application_swift [5.] iphone/cydget [6.] iphone/flipswitch_switch [7.] iphone/framework [8.] iphone/library [9.] iphone/notification_center_widget [10.] iphone/notification_center_widget-7up [11.] iphone/preference_bundle_modern [12.] iphone/theme [13.] iphone/tool [14.] iphone/tool_swift [15.] iphone/tweak [16.] iphone/tweak_with_simple_preferences [17.] iphone/xpc_service Choose a Template (required):輸入
15,選擇iphone/tweak插件輸入工程名稱
Project Name (required): AlipayPwdDemo輸入包名稱,類似
BundleID,要求全部小寫Package Name [com.yourcompany.alipaypwddemo]: com.zang.alipaypwddemo輸入作者名稱,默認計算機名稱。如果不修改,直接回車
Author/Maintainer Name [zang]:輸入插件將要附加的進程,填寫
BundleID。可以在cy環(huán)境,通過APPID獲取[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]: com.alipay.iphoneclient輸入附加后殺掉的進程,默認為
SpringBoard(桌面進程),殺掉后所有進程都會重啟。如果不修改,直接回車[iphone/tweak] List of applications to terminate upon installation (space-separated, '-' for none) [SpringBoard]:插件創(chuàng)建完成,生成
tweak工程
AlipayPwdDemo.plist:附加應用的包名稱control:配置信息,版本號、作者名稱等Makefile:編譯時用到的文件,需要配置Tweak.x:代碼,使用Logos語法
修改
Tweak.x文件的后綴名
.x文件支持OC語法,我們需要支持OC、C/C++語法的.xm文件,故此將Tweak.x修改為Tweak.xm
修改
Makefile手機安裝插件,也是通過
SSH連接的,所以在Makefile中,增加USB連接的IP和端口的配置export THEOS_DEVICE_IP=localhost export THEOS_DEVICE_PORT=12345由于
Tweak.x文件的后綴名修改,在Makefile中,同步修改AlipayPwdDemo_FILESAlipayPwdDemo_FILES = Tweak.xm
將
alipaypwddemo目錄,使用vscode打開打開
Tweak.xm文件,寫入以下代碼:#import <UIKit/UIKit.h> %hook ALUAccuratePWDView - (void)onNext { UIView *view1 = MSHookIvar<UIView *>(self, "_loginBox"); UIView *view2 = MSHookIvar<UIView *>(view1, "_passwordInputBox"); UITextField *pwd = MSHookIvar<UITextField *>(view2, "_textField"); NSLog(@"登錄密碼:%@", pwd.text); } %end
安裝theos插件
工程目錄中,不允許包含中文,否則編譯報錯
使用終端,進入
alipaypwddemo目錄cd /Users/zang/Zang/Spark/LG/alipaypwddemo清理工程
make clean ------------------------- ==> Cleaning…編譯工程
make ------------------------- ==> Notice: Build may be slow as Theos isn’t using all available CPU cores on this computer. Consider upgrading GNU Make: https://github.com/theos/theos/wiki/Parallel-Building Making all for tweak AlipayPwdDemo… ==> Preprocessing Tweak.xm… ==> Compiling Tweak.xm (armv7)… ... ==> Merging tweak AlipayPwdDemo… ==> Signing AlipayPwdDemo…打包
make package ------------------------- ==> Notice: Build may be slow as Theos isn’t using all available CPU cores on this computer. Consider upgrading GNU Make: https://github.com/theos/theos/wiki/Parallel-Building Making all for tweak AlipayPwdDemo… make[2]: Nothing to be done for `internal-library-compile'. Making stage for tweak AlipayPwdDemo… dm.pl: building package `com.zang.alipaypwddemo:iphoneos-arm' in `./packages/com.zang.alipaypwddemo_0.0.1-1+debug_iphoneos-arm.deb'安裝
make install ------------------------- ==> Installing… Selecting previously unselected package com.zang.alipaypwddemo. (Reading database ... 1859 files and directories currently installed.) Preparing to unpack /tmp/_theos_install.deb ... Unpacking com.zang.alipaypwddemo (0.0.1-1+debug) ... Setting up com.zang.alipaypwddemo (0.0.1-1+debug) ... ==> Unloading SpringBoard…安裝成功后,設備的
SpringBoard(桌面進程)重啟在
Cydia中,可以看到我們的自定義插件
Mac電腦上,打開Devices and Simulators,選擇Open Console,打開控制臺
手機上,打開
Alipay,進入密碼登錄頁,輸入123456,點擊登錄按鈕
HOOK成功,使用theos插件,在不污染應用的情況下,竊取到Alipay的登錄密碼
theos與Xcode
如果電腦中有多個版本的
Xcode,需要指定Xcode路徑獲取
Xcode路徑xcode-select -p ------------------------- /Applications/Xcode.app/Contents/Developer指定
Xcode路徑xcode-select --switch /Applications/Xcode.app/Contents/Developer
總結
Cycript
- 越獄手機安裝
Cycript插件,依賴于adv-cmds插件- 依附進程,使用
cycript -p 進程id/名稱導入
cy文件
- 將自定義
cy文件,放入/usr/lib/cycript0.9目錄中- 為了不重名,放入
com目錄中,創(chuàng)建自己組織的文件夾- 加載時,使用
@import com.組織名稱.文件名稱
theos
- 是一個越獄開發(fā)工具包
- 可以創(chuàng)建
Tweak項目,動態(tài)Hook第三方程序搭建
theos插件
- 使用
nic.pl→15,創(chuàng)建iphone/tweak插件- 輸入的包名稱,類似
BundleID,要求全部小寫- 需要支持
OC、C/C++語法,修改Tweak.x文件后綴名,改為.xm- 文件后綴名的修改,同步修改
Makefile文件中的配置Makefile文件中,增加USB連接的IP和端口安裝
theos插件
- 工程目錄中,不允許包含中文,否則編譯報錯
- 清理工程:
make clean- 編譯工程:
make- 打包:
make package- 安裝:
make install
theos與Xcode
- 多個版本的
Xcode,需要指定Xcode路徑- 獲取
Xcode路徑,使用xcode-select -p- 指定
Xcode路徑,使用xcode-select --switch /Applications/Xcode.app/Contents/Developer











