使用THEOS編寫Tweak

馬萬旻發表於2018-06-28

特特特特特別強調,只用於技術交流,任何責任我都不想負~~
再特特特特特別強調,如果你一步一步跟著做,出現了任何問題,任何報錯。不要急不要急,後面會有您想要的。

本例攔截某即時通訊軟體?的手機登入頁面中的登入點選事件。步驟如下:

  1. 開啟終端,執行nic.pl,會出現12個選項。
NIC 2.0 - New Instance Creator
------------------------------
  [1.] iphone/activator_event
  [2.] iphone/application_modern
  [3.] iphone/cydget
  [4.] iphone/flipswitch_switch
  [5.] iphone/framework
  [6.] iphone/ios7_notification_center_widget
  [7.] iphone/library
  [8.] iphone/notification_center_widget
  [9.] iphone/preference_bundle_modern
  [10.] iphone/tool
  [11.] iphone/tweak
  [12.] iphone/xpc_service
複製程式碼
  1. 編寫tweak,選擇第11個,直接輸入:
    $ 11
  2. 接下來會進行一系列初始化設定。

Project Name (required): //建立專案的唯一名字。
Package Name [com.yourcompany.wechatpwddemo]: //建立包的唯一ID,中括號中為預設選項,注意小寫。
Author/Maintainer Name [馬萬旻]://建立者的名字
[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]://需要注入的目標應用的Bundle ID(你要為哪個APP編寫tweak)
[iphone/tweak] List of applications to terminate upon installation (space-separated, '-' for none) [SpringBoard]://安裝成功後殺掉的制定程式(SpringBoard就是我們正向開發中心心念念想控制的那個桌面?)

初始化成功後,會在當前目錄中生成一個與你的Project Name同名的純小寫資料夾,子目錄下有四個檔案。

  • Makefile //makefile檔案
  • Tweak.xm //編寫程式碼的檔案
  • WeChatPwdDemo.plist //plist檔案,用於指定需要注入的目標檔案的bundle id。
  • control //制定deb包的一些資訊,包括名字、描述、版本號等。
  1. 攔截某即時通訊軟體?的手機登入頁面中的登入點選事件,通過分析,我們可以找到登入事件的響應方法,編輯Tweak.xm寫入以下內容:
%hook WCAccountNewPhoneVerifyViewController
- (void)onNext {
	%orig;
	UIView *view = MSHookIvar<UIView *>(self,"_pwdView");
	UITextField *pwdTf = view.subviews[0].subviews[0];
	NSLog(@"\n\n\n\n\n\n\n\n%@\n\n\n\n\n\n\n\n\n", pwdTf.text);
}
%end
複製程式碼

在使用者輸入密碼的時候,將會在控制檯輸出密碼。

  1. 在生成的四個檔案目錄下,執行$ make,使用$ make message=yes可以看到Theos的內部處理細節。編譯完成後,會生成一個隱藏的.theos資料夾和一個obj資料夾。
  2. 將其打包成deb。執行$ make package。完成後會生成一個packages資料夾,資料夾下會有一個deb包。
  3. 將deb檔案安裝到手機中,執行$ make install,這裡會報錯,需要在環境變數中設定,可以設定在makefile檔案中,也可以設定在.zchrc/.bash_profile中。 這裡的THEOS_DEVICE_IP和THEOS_DEVICE_PORT是ssh登入的IP和埠。
$ export THEOS_DEVICE_IP=127.0.0.1
$ export THEOS_DEVICE_PORT=12345
複製程式碼

安裝完成後,會在裝置的Library/MobileSubstrate/DynamicLibraries/檢視到你的dylib和plist。以下方式可以檢視日誌:

  • 在Xcode->Window->Devices and Simulators選項,從控制檯檢視執行的log資訊。
  • 執行brew install libimobiledevice命令,安裝libimobiledevice命令工具。執行idevicesyslog | grep 關鍵字命令,檢視日誌。

在使用theos的時候,有幾個坑,點這裡

相關文章