進行iOS逆向開發首先需要下載相關的工具。
準備工作
- 越獄手機(例如我的:iPhone 4s,系統8.4.1)
- 越獄手機上的Cydia中安裝
Cycript
,OpenSSH
- Mac上安裝
iFunBox
,XCode
,Hopper Disassembler
,Sublime Text
- Mac終端命令行中安裝
Class Dump
,Theos
,Dumpdecrypted
工具作用介紹
OpenSSH
Mac連接手機,通過Mac的終端命令操作手機。
Cycript
獲取手機中某一個運行的進程,并可以獲取App進程后用OC
代碼獲取反編譯App的Documents
目錄路徑。
iFunBox
Mac端的連接手機后的圖形界面,比較方便的把砸殼后的文件直接導出到Mac上。下載地址:iFunBox
Xcode
這個就不用多說了,iOS開發工具。
Hopper Disassembler
這個是進行反匯編的工具,可以反匯編、反編譯并且調試你的應用,我們可以通過這個工具查看偽代碼的方法名和變量,還原函數體的具體邏輯。
下載破解版地址:hopper disassembler for mac破解版 v4.0.8
破解方法如下:http://www.sdifen.com/hopperdisassembler408.html
更多使用方法可以參考文章:iOS 逆向工程工具集之Hopper Disassembler破解版的安裝與使用
Class Dump
對App可執行文件獲取其頭文件,這樣我們可以根據頭文件中暴露的方法名去猜測其App的編寫邏輯。然后利用上述的反編譯工具對某一文件進行函數的具體編寫邏輯。
- 下載地址:Class Dump
安裝方法:
點擊下載后解壓后會有class-dump和源碼文件。
- 如果是OS X 10.11之前,可以直接將class-dump 復制到/usr/bin/class-dump目錄下即可。
- 如果是OS X 10.11,因為沒有/usr/bin文件夾的寫權限,所以我們得用另外的方法。
- 1、打開Terminal,輸入
mkdir ~/bin
,在當前用戶根目錄下創建一個bin目錄; - 2.把class-dump給拷貝到這個目錄里,并賦予其可執行權限:mv /path/to/class-dump ~/bin;
chmod +x ~/bin/class-dump
; - 3.打開~/.bash_profile文件:vi ~/.bash_profile,在文件最上方加一行:export PATH=$HOME/bin/:$PATH,然后保存并退出(在英文輸入法中依次按下esc和:(shift + ;,即冒號),然后輸入wq,回車即可);
- 在Terminal中執行
source ~/.bash_profile
;
更多class-dump
的使用可以參考文章iOS逆向之class-dump
Theos
創建一個Tweak
工程,通過定制工程文件,再通過指定的bundle id
,編譯+打包+安裝,從而向手機上的App注入代碼,進而實現對某個App中的功能的破解(例如會員去廣告、搶紅包等功能)。
安裝方法:
-
1、安裝
dpkg
sudo brew install dpkg
dpkg是Theos依賴的工具之一,dpkg是Debian Packager的縮寫。我們可以使用dpkg來制作deb,Theos開發的插件都將會以deb的格式進行發布的。所以我在安裝Theos之前要安裝dpkg, 當然此處我們使用強大的brew來完成dpkg的安裝。
-
2、安裝ldid
sudo brew install ldid
在Theos開發插件中,iOS文件的簽名是使用
ldid
工具來完成的,也就是說ldid
取代了Xcode自帶的Codesign
。 -
3、Theos安裝
cd opt/
git clone --recursive https://github.com/theos/theos.git因為我們的Theos一般是安裝在/opt/目錄下的,所以先cd到/opt目錄下,然后從github上相關的地址clone下來即可
下載好Theos后,還需要把theos的權限改為自己,如下命令chown $(id -u):$(id -g) /usr/local/opt/theos
最后這一步也很重要,要把theos的執行路徑加入到環境變量中,在~/. bash_profile中加上這么兩句:
export THEOS=/usr/local/opt/theos
export PATH=/usr/local/opt/theos/bin/:$PATHvim ~/.bash_profile加上上面兩條,保存退出。
-
4、測試安裝是否成功
重啟終端后,cd到任意可執行目錄,
執行:nic.pl
New Instance Creator開始執行則已經安裝成功。
nic.pl.png
更多關于theos
的安裝與使用參考文章:
Dumpdecrypted
俗稱:砸殼
,dumpdecrypted
是個出色的app脫殼開源工具,它的原理是:將應用程序運行起來(iOS系統會先解密程序再啟動),然后將內存中的解密結果dump
寫入文件中,得到一個新的可執行程序文件。
下載及生成砸殼用到dumpdecrypted.dylib工具,如下命令:
qingfengdeMacBook-Pro:練習 qingfeng$ git clone https://github.com/stefanesser/dumpdecrypted.git
Cloning into 'dumpdecrypted'...
remote: Enumerating objects: 31, done.
remote: Total 31 (delta 0), reused 0 (delta 0), pack-reused 31
Unpacking objects: 100% (31/31), done.
qingfengdeMacBook-Pro:練習 qingfeng$ ls
ArchitechureExample SwiftExample 架構學習
CoreAnimationExample TouchEventExample 函數式編程
RuntimeExample dumpdecrypted 工廠方法一
qingfengdeMacBook-Pro:練習 qingfeng$ cd dumpdecrypted
qingfengdeMacBook-Pro:dumpdecrypted qingfeng$ make
`xcrun --sdk iphoneos --find gcc` -Os -Wimplicit -isysroot `xcrun --sdk iphoneos
qingfengdeMacBook-Pro:dumpdecrypted qingfeng$ ls
Makefile dumpdecrypted.c dumpdecrypted.o
README dumpdecrypted.dylib
更多相關使用參考文章:dumpdecrypted介紹及其使用
Sublime Text
打開后面要用到的Makefile
文件。
下載地址:Sublime Text
實現目標
我們來破解一款“傳奇來了”的游戲,在我們打開“傳奇來了”APP之后,自動彈出一個警告框。先放一張結果圖:
實現流程
1、利用dumpdecrypted.dylib砸殼
第一步:利用OpenSSH
命令通過mac終端來操作手機,openSSH
密碼是alpine
。退出登錄的命令是exit
。手機和電腦需要在同一個網段,連接同一個wifi,然后點開設置查看當前手機分配的IP
地址。如下圖:
然后輸入如下命令(密碼是alpine
):
qingfengdeMacBook-Pro:~ qingfeng$ ssh root@192.168.11.130
root@192.168.11.130's password:
iPhone:~ root#
第二步:查找要反編譯app的路徑
ps -e
獲取手機中所有的當前運行的進程
ps -A|grep mobile
抓取手機上運行的APP進程
運行命令如下:
iPhone:~ root# ps -e
PID TTY TIME CMD
1 ?? 0:15.59 /sbin/launchd
32 ?? 0:11.16 /usr/libexec/UserEventAgent (System)
36 ?? 0:18.43 /System/Library/Frameworks/CoreTelephony.framework/Sup
...
iPhone:~ root# ps -A|grep mobile
382 ?? 0:14.73 /usr/libexec/mobileassetd
940 ?? 0:36.71 /var/mobile/Containers/Bundle/Application/CE59CF92-3C59-46B5-B3ED-81F1F7CC0440/CQClient.app/CQClient
951 ttys000 0:00.01 grep mobile
iPhone:~ root#
其中的/var/mobile/Containers/Bundle/Application/CE59CF92-3C59-46B5-B3ED-81F1F7CC0440/CQClient.app/CQClient
是我們要破解的app的路徑。
第三步:使用Cycript
找出反編譯App的Documents目錄路徑
這里有兩個路徑,/var/mobile/Containers/Bundle/Application/
下的是app的路徑,/var/mobile/Containers/Data/Application
則是我們要找的Documents
路徑。
我們通過如下命令來獲取App的Documents
路徑。
iPhone:~ root# cycript -p CQClient
cy# [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomans:NSUserDomainMask][0]
#"file:///var/mobile/Containers/Data/Application/A1BA8E41-6A42-4D1F-AAA5-7F1262622D25/Documents/"
cy#
其中的/var/mobile/Containers/Data/Application/A1BA8E41-6A42-4D1F-AAA5-7F1262622D25/Documents/
即是我們要找的Documents目錄路徑。
退出cyscript
命令環境control+z
。如下:
cy# ^Z
[1]+ Stopped(SIGTSTP) cycript -p CQClient
iPhone:~ root#
退出OpenSSH
的命令是exit
。但在這之前需要輸入命令jobs
,否則無法退出。具體可以查看這篇文章Linux中 “there are stopped jobs”問題的解決方案。命令如下:
iPhone:~ root# exit
logout
There are stopped jobs.
iPhone:~ root# jobs
[1]+ Stopped(SIGTSTP) cycript -p CQClient
iPhone:~ root# exit
logout
Connection to 192.168.11.130 closed.
第四步:將dumpdecrypted.dylib
拷貝到Documents目錄下,此處是使用的scp dumpdecrypted.dylib路徑 root@ip:Documents路徑
方式。也可以使用iFunBox或者PP助手進行文件操作(我試了不行,不知道是不是方法不對,還是在iFunBox或者PP助手展示的文件路徑不對)。此處的dumpdecrypted.dylib
可以通過上面Dumpdecrypted
工具介紹的方法生成。
命令如下:
qingfengdeMacBook-Pro:~ qingfeng$ scp /Users/qingfeng/Documents/WorkSpace/Exercise/dumpdecrypted/dumpdecrypted.dylib root@192.168.11.130:/var/mobile/Containers/Data/Application/A1BA8E41-6A42-4D1F-AAA5-7F1262622D25/Documents/
root@192.168.11.130's password:
dumpdecrypted.dylib 100% 193KB 1.8MB/s 00:00
qingfengdeMacBook-Pro:~ qingfeng$
第五步:使用dumpdecrypted
砸殼
重新用mac連接上手機,首先cd
到Documents路徑下,然后執行命令DYLD_INSERT_LIBRARIES= dumpdecrypted.dylib app路徑
。命令如下:
qingfengdeMacBook-Pro:~ qingfeng$ ssh root@192.168.11.130
root@192.168.11.130's password:
iPhone:~ root# cd /var/mobile/Containers/Data/Application/A1BA8E41-6A42-4D1F-AAA5-7F1262622D25/Documents/
iPhone:/var/mobile/Containers/Data/Application/A1BA8E41-6A42-4D1F-AAA5-7F1262622D25/Documents root# DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/CE59CF92-3C59-46B5-B3ED-81F1F7CC0440/CQClient.app/CQClient
mach-o decryption dumper
DISCLAIMER: This tool is only meant for security research purposes, not for application crackers.
[+] detected 32bit ARM binary in memory.
[+] offset to cryptid found: @0x9980(from 0x9000) = 980
[+] Found encrypted data at address 00004000 of length 655360 bytes - type 1.
[+] Opening /private/var/mobile/Containers/Bundle/Application/CE59CF92-3C59-46B5-B3ED-81F1F7CC0440/CQClient.app/CQClient for reading.
[+] Reading header
[+] Detecting header type
[+] Executable is a FAT image - searching for right architecture
[+] Correct arch is at offset 16384 in the file
[+] Opening CQClient.decrypted for writing.
[+] Copying the not encrypted start of the file
[+] Dumping the decrypted data into the file
[+] Copying the not encrypted remainder of the file
[+] Setting the LC_ENCRYPTION_INFO->cryptid to 0 at offset 4980
[+] Closing original file
[+] Closing dump file
iPhone:/var/mobile/Containers/Data/Application/A1BA8E41-6A42-4D1F-AAA5-7F1262622D25/Documents root#
利用ls
命令查看后,其中QQ.decrypted
就是我們要的破解文件。
iPhone:/var/mobile/Containers/Data/Application/A1BA8E41-6A42-4D1F-AAA5-7F1262622D25/Documents root# ls
CQClient.decrypted dumpdecrypted.dylib jrdb
2、使用class-dump
將文件解析
我們同樣用scp
命令將CQClient.decrypted
拷貝到Mac桌面文件夾。
qingfengdeMacBook-Pro:~ qingfeng$ scp root@192.168.11.130:/var/mobile/Containers/Data/Application/A1BA8E41-6A42-4D1F-AAA5-7F1262622D25/Documents/CQClient.decrypted /Users/qingfeng/Documents/WorkSpace/Exercise
root@192.168.11.130's password:
CQClient.decrypted 100% 1918KB 2.5MB/s 00:00
qingfengdeMacBook-Pro:~ qingfeng$
我們再使用class-dump
進行解析。
qingfengdeMacBook-Pro:QQHeader qingfeng$ class-dump --arch armv7 /Users/qingfeng/Documents/WorkSpace/Exercise/CQClient.decrypted -H -o /Users/qingfeng/Documents/WorkSpace/Exercise/CQClientHeader
qingfengdeMacBook-Pro:QQHeader qingfeng$
這樣即可獲取頭文件。因為我用的手機是iPhone4s,所以使用armv7
,其他型號使用相對應的4(armv7),4s(armv7),5(armv7),5s(arm64),6(arm64),6s(arm64),7(arm64)等
。
如果是用的frida-ios-dump
砸殼,砸殼出來的ipa文件,可以從里面獲取.app
文件,這個時候我們可以用class-dump -H /Users/xxxx/ProductName.app -o /Users/xxxx/HearderFile
這種形式的命令來獲取頭文件
3、反編譯靜態分析 Hopper Disassembler
Hopper是一款運行在Mac、Windows和Linux下的調試(os x only)、反匯編和反編譯的交互式工具。
可以對32、64位的MAC程序、Windows程序和IOS程序(arm)進行調試、反編譯等。功能如下:
- 能夠分析出函數的代碼塊、變量等
- 可以生成代碼塊的控制流圖CFG
- 可以通過Python腳本來調用Hopper的其他一些功能,使用更加靈活
- 在MAC上還可以通過GDP動態調試分析
- 對Objective C的極佳的支持——能夠解析出Selector、字符串和發送的消息
- 反編譯,生成偽代碼
- 分析快速,且占用資源少
我們把CQClient.decrypted
拖進去,就能進行代碼分析了。具體怎么分析可以參考這篇文章[Mac OSX 之自己動手初步學習破解軟件入門](Mac OSX 之自己動手初步學習破解軟件入門)
4、Tweak與Theos
tweak
的實質就是iOS平臺的動態庫。iOS平臺上有兩種形式的動態庫,dylib
與framework
。Framework
這種開發者用的比較多,而dylib
這種就相對比較少一點,比如libsqlite.dylib
,libz.dylib
等。而tweak
用的正是dylib
這種形式的動態庫。我們可以在/Library/MobileSubstrate/DynamicLibraries
目錄下查看手機上存在著的所有tweak
。這個目錄下除dylib
還存在著plist
與bundle
兩種格式的文件,plist
文件是用來標識tweak
的作用范圍,而bundle
是tweak
所用到的資源文件。
與正常的App開發使用Xcode不同,Tweak
的開發環境是theos
或者iosopendev
。iosopendev
是在theos
的基礎上實現的基于Xcode的開發環境。而theos
是一種命令式的開發編譯環境,與c/c++的命令行編譯形式很相像。
詳情參考這篇文章:Tweak及TheOS簡介
安裝參考工具介紹Theos
部分。
使用步驟及文件介紹如下:
1、Tweak
工程的創建
cd到要創建tweak
的目錄下,執行如下指令:
nic.pl
執行完nic.pl
指令后,會出現如下選擇模板的界面:
qingfengdeMacBook-Pro:CQClientTweak qingfeng$ nic.pl
NIC 2.0 - New Instance Creator
------------------------------
[1.] iphone/activator_event
[2.] iphone/application_modern
[3.] iphone/application_swift
[4.] iphone/cydget
[5.] iphone/flipswitch_switch
[6.] iphone/framework
[7.] iphone/ios7_notification_center_widget
[8.] iphone/library
[9.] iphone/notification_center_widget
[10.] iphone/preference_bundle_modern
[11.] iphone/tool
[12.] iphone/tool_swift
[13.] iphone/tweak
[14.] iphone/xpc_service
Choose a Template (required): 13
在這里我們要開發的是tweak
插件,所以輸入13
選擇iphone/tweak
,按下Enter
繼續。接著出現如下需要我們填寫信息的步驟:
Project Name (required): AlertTest
Package Name [com.yourcompany.alerttest]: com.tianfu.alert
Author/Maintainer Name [清風]: tianfu
[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]: com.cqll.90
[iphone/tweak] List of applications to terminate upon installation (space-separated, '-' for none) [SpringBoard]: com.cqll.90
Instantiating iphone/tweak in alerttest/...
Done.
- 1、
Project Name (required):
輸入工程名字,必填項。 - 2、
Package Name [com.yourcompany.alerttest]:
包名 - 3、
Author/Maintainer Name [清風]:
作者名字 - 4、
[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]:
要注入的程序的BundleID
,默認的進程為com.apple.springboard
,這里我們填寫com.cqll.90
游戲傳奇來了的BundleID
。 - 5、
List of applications to terminate upon installation
安裝后需要重啟的應用,這里我們也填寫傳奇來了的BundleID
,com.cqll.90
。
2、工程文件說明
Tweak
工程新建完成后,其工程目錄的文件如下所示:
2.1 control文件
該文件記錄了工程的基本信息,會被打包進deb
包中,字段內容如下:
Package: com.tianfu.alert
Name: AlertTest
Depends: mobilesubstrate
Version: 0.0.1
Architecture: iphoneos-arm
Description: An awesome MobileSubstrate tweak!
Maintainer: tianfu
Author: tianfu
Section: Tweaks
Package
字段:用于描述這個deb
的名字,采用的命名方式和bundle identifier
類似,可以按需更改;Name
字段:用于描述這個工程的名字,可以按需更改;-
Depends
字段:用于描述這個deb
的依賴。依賴指的是這個程序運行的基本條件,可以填寫固件版本或其他程序,如果當前iOS不滿足“依賴”中所定義的條件,則此tweak
無法正常工作,可以按需更改。例如:Depends: mobilesubstrate, firmware (>=6.0)
表示當前iOS版本必須在
6.0
以上,且必須安裝MobileSubstrate,才能正常運行這個tweak
。 Version
字段:用于描述這個deb
包的版本號,可以按需更改;Architecture
字段:用于描述deb
包安裝的目標設備架構,不要更改;Description
字段:deb
包的簡單介紹,可以按需更改;Maintainer
字段:用于描述tweak
的作者,可以按需更改;Author
字段:用于描述tweak
的作者,可以按需更改;Section
字段:用于描述deb
包所屬的程序類別,不要更改。
control
文件中,可以自定義的字段還有很多,一般上面的信息就已經足夠了。更全面的可以查看官方網站。值得注意的是:Theos
在打包deb
時會對control
文件做進一步的處理。比如更改Version
字段為:0.0.1-2,標識Theos
的打包次數,方便管理;增加Installed-Size
字段,用于描述deb
包安裝后的估算大小,與實際大小可能有偏差,不要更改。
2.2 Makefile
該文件用來指定工程編譯和鏈接要用到的文件、框架、庫等信息,將整個過程自動化。字段內容如下:
THEOS_DEVICE_IP = 192.168.11.130
THEOS = /usr/local/opt/theos
include $(THEOS)/makefiles/common.mk
TWEAK_NAME = AlertTest
AlertTest_FILES = Tweak.xm
include $(THEOS_MAKE_PATH)/tweak.mk
after-install::
install.exec "killall -9 CQClient"
- 第一行的
include
字段指定了工程的common.mk
,固定寫法,不要修改; -
TWEAK_NAME
字段填入的是建立工程時命令行輸入的Project Name
,與control
文件中的Name
字段對應,不要更改; -
ReverseDemo_FILES
字段指定工程包含的源文件,如果工程中需要用到多個源文件則用空格將各個文件名分開,可以按需更改; -
include
字段指定工程的mk
文件,這里新建的是tweak
工程,所以填入的是tweak.mk
文件,還可以根據需求填入application.mk
以及tool.mk
文件。 - 最后一行
after-install
字段指定安裝程序后需要執行的操作,這里需要注入CQClient
進程并執行自己的代碼,因此需要重啟CQClient
進程,好讓MobileSubstrate
加載對應的dylib
Makefile文件中除了自動生成的這些字段外,還可以根據功能手動添加其他字段:
THEOS_DEVICE_IP
字段用來指定要連接的手機設備的IP
,方便后面安裝。如上縮寫export THEOS_DEVICE_IP = 192.168.11.130
。THEOS
是存放theos命令的路徑。ARCHS
字段可以用來指定處理器架構,一般情況下填寫ARCHS = armv7 arm64
即可。-
TARGET
字段用來指定SDK版本,例如:TARGET = iphone:7.0
-
framework
字段可以指定要導入的框架,例如ReverseDemo_FRAMEWORKS = UIKit
,UIKit為后續測試代碼需要用到的框架,另一方面,還可以通過ReverseDemo_PRIVATE_FRAMEWORKS
字段指定要導入的私有庫,格式不變。例如ReverseDemo_FRAMEWORKS = UIKit CoreTelephony CoreAudio ReverseDemo_PRIVATE_FRAMEWORKS = AppSupport ChatKit
更多的可以參考這篇文章Theos
2.3 AlertTest.plist
plist文件記錄工程的配置信息,主要作用是指定程序的作用范圍,內容如下:
從上面可以看到,該文件的內容是一系列的Dictionary
,最外層為Root
,Filter
鍵,Filter
鍵下得array
即為要設置的部分。該部分分為三類:
- 第一類是
Bundles
,即所編寫程序的作用對象,這個類型的字段就是所要注入的程序Bundle名,如果要注入的進程為SpringBoard,則填入com.apple.springboard,可以指定多個作用對象; - 第二類是
Classes
,即指定要注入的類名,同樣是根據填入的字符串來篩選注入的類名; - 第三類
Executables
,及指定要注入的可執行文件名。
這三類Array
可以根據需要來設定。但按照混合配置方式,一個文件只有滿足Filter
中所有Array
下的至少一個條件,tweak
才能生效。這樣顯然不合理。所以額外有一個Mode
鍵,將其值設置為Any
,那么文件滿足Filter
中的任一條件就能成為tweak
的作用對象。
當Filter下的array只有一類時,不需要添加Mode和Any鍵值對。
2.4 Tweak.xm
該文件是實現具體功能的關鍵所在,是實現具體功能的源文件,這個文件支持Logos和C、C++語法。文件內容如下:
/* How to Hook with Logos
Hooks are written with syntax similar to that of an Objective-C @implementation.
You don't need to #include <substrate.h>, it will be done automatically, as will
the generation of a class list and an automatic constructor.
%hook ClassName
// Hooking a class method
+ (id)sharedInstance {
return %orig;
}
// Hooking an instance method with an argument.
- (void)messageName:(int)argument {
%log; // Write a message about this call, including its class, name and arguments, to the system log.
%orig; // Call through to the original function with its original arguments.
%orig(nil); // Call through to the original function with a custom argument.
// If you use %orig(), you MUST supply all arguments (except for self and _cmd, the automatically generated ones.)
}
// Hooking an instance method with no arguments.
- (id)noArguments {
%log;
id awesome = %orig;
[awesome doSomethingElse];
return awesome;
}
// Always make sure you clean up after yourself; Not doing so could have grave consequences!
%end
*/
以上的注釋展示了基本的Logos
語法,具體可以分為三類:
- 第一類
%hook
和%end
,其中%hook
后面指定要hook
的類名,另一方面,hook的整塊邏輯完成后結尾要加上%end
,在hook邏輯中可以添加要hook的函數,并在函數體內部實現想要添加的代碼邏輯; - 第二類是
%orig
,該語句代表執行原函數邏輯,即完成hook操作后可以選擇是否調用原函數的代碼,若需要調用則加上%orig;
即可; - 第三類是
%log
,這類代碼的作用是在log
中打印hook
的函數的類名、參數等信息。
除了注釋中展示的三種語法外,Logos還支持%group
、%init
、%ctor
等語法,更多的Logos語法參考這篇文章。
這里我們輸入代碼來實現個彈出提示框的簡單功能,代碼如下:
%hook AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"成功注入代碼" message:@"IOS 逆向工程" delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:nil];
[alertView show];
#pragma clang diagnostic pop
return %orig;
}
%end
3、編譯&打包&安裝
3.1 編譯
Theos采用與debian相同的make
命令來編譯Theos工程。執行如下指令:
qingfengdeMacBook-Pro:alerttest qingfeng$ make
輸出結果如下:
qingfengdeMacBook-Pro:alerttest qingfeng$ make
> Making all for tweak AlertTest…
==> Preprocessing Tweak.xm…
==> Compiling Tweak.xm (armv7)…
==> Linking tweak AlertTest (armv7)…
==> Generating debug symbols for AlertTest…
rm /Users/qingfeng/Documents/WorkSpace/Exercise/CQClientTweak/alerttest/.theos/obj/debug/armv7/Tweak.xm.mm
==> Preprocessing Tweak.xm…
==> Compiling Tweak.xm (arm64)…
==> Linking tweak AlertTest (arm64)…
==> Generating debug symbols for AlertTest…
rm /Users/qingfeng/Documents/WorkSpace/Exercise/CQClientTweak/alerttest/.theos/obj/debug/arm64/Tweak.xm.mm
==> Merging tweak AlertTest…
==> Signing AlertTest…
從上圖的輸出結果可以看到,Theos完成了預處理、編譯、簽名等一系列的操作,此時目錄下多了一個.theos
文件夾。
3.2 打包
使用如下指令打包:
qingfengdeMacBook-Pro:alerttest qingfeng$ make package
輸出結果如下:
qingfengdeMacBook-Pro:alerttest qingfeng$ make package
> Making all for tweak AlertTest…
make[2]: Nothing to be done for `internal-library-compile'.
> Making stage for tweak AlertTest…
dm.pl: building package `com.tianfu.alert:iphoneos-arm' in `./packages/com.tianfu.alert_0.0.1-1+debug_iphoneos-arm.deb'
這時候目錄下多了一個packages
文件夾,里面有一個.deb
文件。
3.3安裝
執行指令:
make package install
輸出結果如下:
qingfengdeMacBook-Pro:alerttest qingfeng$ make package install
> Making all for tweak AlertTest…
make[2]: Nothing to be done for `internal-library-compile'.
> Making stage for tweak AlertTest…
dm.pl: building package `com.tianfu.alert:iphoneos-arm' in `./packages/com.tianfu.alert_0.0.1-4+debug_iphoneos-arm.deb'
==> Installing…
root@192.168.11.130's password:
(Reading database ... 3518 files and directories currently installed.)
Preparing to unpack /tmp/_theos_install.deb ...
Unpacking com.tianfu.alert (0.0.1-4+debug) over (0.0.1-2+debug) ...
Setting up com.tianfu.alert (0.0.1-4+debug) ...
install.exec "killall -9 CQClient"
root@192.168.11.130's password:
qingfengdeMacBook-Pro:alerttest qingfeng$
可以看到已經成功安裝。打開app,看到如下結果:
更多的介紹參考文章:
1、iOS逆向之TheOS
2、iOS逆向教程 2.1 Theos的安裝及用法
參考文章
1、iOS 逆向工程--基礎工具的運用
2、iOS逆向工程
3、ios逆向傻瓜入門教程(一)
4、IOS APP破解完整流程(逆向工程完整詳解)
5、iOS 逆向工程-淺析