iOS逆向開發之工具介紹及簡單運用

進行iOS逆向開發首先需要下載相關的工具。

準備工作

  • 越獄手機(例如我的:iPhone 4s,系統8.4.1)
  • 越獄手機上的Cydia中安裝CycriptOpenSSH
  • Mac上安裝iFunBoxXCodeHopper DisassemblerSublime Text
  • Mac終端命令行中安裝Class DumpTheosDumpdecrypted

工具作用介紹

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和源碼文件。

  • 如果是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/:$PATH

    vim ~/.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之后,自動彈出一個警告框。先放一張結果圖:

逆向截屏.PNG

實現流程

1、利用dumpdecrypted.dylib砸殼

第一步:利用OpenSSH命令通過mac終端來操作手機,openSSH密碼是alpine。退出登錄的命令是exit。手機和電腦需要在同一個網段,連接同一個wifi,然后點開設置查看當前手機分配的IP地址。如下圖:

IP地址.png

然后輸入如下命令(密碼是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平臺上有兩種形式的動態庫,dylibframeworkFramework這種開發者用的比較多,而dylib這種就相對比較少一點,比如libsqlite.dyliblibz.dylib等。而tweak用的正是dylib這種形式的動態庫。我們可以在/Library/MobileSubstrate/DynamicLibraries目錄下查看手機上存在著的所有tweak。這個目錄下除dylib還存在著plistbundle兩種格式的文件,plist文件是用來標識tweak的作用范圍,而bundletweak所用到的資源文件。

與正常的App開發使用Xcode不同,Tweak的開發環境是theos或者iosopendeviosopendev是在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安裝后需要重啟的應用,這里我們也填寫傳奇來了的BundleIDcom.cqll.90

2、工程文件說明

Tweak工程新建完成后,其工程目錄的文件如下所示:

tweak文件目錄.png

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文件記錄工程的配置信息,主要作用是指定程序的作用范圍,內容如下:

alert.plist.png

從上面可以看到,該文件的內容是一系列的Dictionary,最外層為RootFilter鍵,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,看到如下結果:

逆向截屏.PNG

更多的介紹參考文章:
1、iOS逆向之TheOS
2、iOS逆向教程 2.1 Theos的安裝及用法

參考文章

1、iOS 逆向工程--基礎工具的運用
2、iOS逆向工程
3、ios逆向傻瓜入門教程(一)
4、IOS APP破解完整流程(逆向工程完整詳解)
5、iOS 逆向工程-淺析

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,978評論 2 374