教你動手做一個iOS越獄app

demo

前言

俗話說得好, 萬事開頭難. 僅僅是上圖一個如此簡單地不能再簡單的小app, 其實都不算是app, 只是注入了一段代碼進系統中, 等到特定的函數方法調用的時候就會被我們hook掉, 執行我們寫的代碼, 僅此而已.

哈哈, 就是這樣一個小功能, 搞得我焦頭爛額了一個晚上, 所以大家不用害怕, 連我這樣的菜鳥都能實現, 大家只要認真看我的總結, 就一定可以自己也動手在自己越獄iPhone, iPad上嗨起來!

ps : 為了紀念這神圣的一刻, 就算是這么簡單的程序我也把它放到了我的Github上, 也算是一個里程碑吧. 還有就是萬一哪天我自己忘了的時候能回頭看看就能把這些知識撿回來. GitHub入口 -> 第一個越獄程序代碼

廢話不多說, 我們直入正題!


準備動作

你需要準備的是 :

  • 一臺Mac
  • 一部已經越獄的iPhone or iPad
  • Theos
  • Xcode
  • Xcode Command Line Tools
  • dpkg

Mac

這個..就不說了吧. 再不行虛擬機也可以頂著上啊

越獄iPhone

越獄的方法網上已經有很多成熟的方法了, 我的4s用PP助手真的就接近一鍵越獄了. 當然這臺越獄iPhone還需要配置.

安裝OpenSSH

由于接著要在電腦上用命令行直接連接到手機給手機安裝, 所以這里必須配置好. 方法也很簡單, Cydia的主界面拉下去就有OpenSSH的配置方法了, 這里不再贅述.

ps : 友情提示以下, 配置好之后是有一個原始的root密碼的, 必須修改掉, 否則容易讓不安好心的人連接到你的手機.

    方法如下 : 
    進入命令行工具
    ssh root@你的手機的IP地址
    passwd 
    修改好之后輸入logout就能斷開連接了
    由于每次用ssh鏈接手機都需要輸入密碼比較麻煩, 有一種一勞永逸的方法, 大家可以自行Google~

安裝apt與ldid

直接在Cydia搜索apt和ldid, 安裝即可.

Xcode

相信做iOS開發的都有吧..這里就不再說了, 只是如果你Mac上有多個Xcode的話, 需要用以下指令指定一個Theos默認使用的Xcode

sudo xcode-select -s /Application/Xcode.app/Contents/Developer 大家根據自己實際Xcode的位置來定.

Xcode Command Line Tools

在命令行下執行xcode-select --install即可

dpkg

首先安裝MacPort, 在官網下載安裝就行了. 安裝好之后可以通過在命令行中輸入port version來查看是否安裝成功.

然后輸入sudo port install dpkg就能安裝dpkg了, dpkg是用來把我們寫的Tweak代碼打包成deb的工具

ps : 越獄app安裝包后綴為.deb, 而沒越獄的為.ipa.

Theos

我們的主角終于上場了. 我們的代碼就是用這個軟件來編寫.

下載Theos

export THEOS=/opt/theos 配置環境變量, 以后THEOS就相當于theos的絕對路徑, 即/opt/theos

sudo git clone git://github.com/DHowett/theos.git $THEOS 從GitHub上下載Theos

配置ldid

這里下載ldid, 把他放到/opt/theos/bin/下, 并用以下命令賦予它可執行權限

sudo chmod 777 /opt/theos/bin/ldid

解決Theos的bug

首先在Cydia中搜索安裝CydiaSubstrate, 然后用iFunBox或scp等方式, 將iOS上的/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate拷貝到Mac上, 重命名為libsubstrate.dylib之后放到/opt/theos/lib/下, 替換掉無效的文件即可. (我這部Mac上lib文件夾是空文件夾).

ok, 大功告成, 我們終于可以用Theos大展拳腳啦!!!

創建Theos工程

依然是使用命令行進行創建Theos項目

/opt/theos/bin/nic.pl : 自動NIC(New Instance Creator).

然后這里會有許多個模板, 就跟Xcode我們創建項目的時候也有許多模板給我們選擇, 是Command Line Tool or Single View Application .... 這里也是. 我們選擇iphone/tweak這個.

Project Name : 項目名稱

Package Name : 打包成deb包的名稱(類似于bundle identifier)

Author/Maintainer Name : 作者名

MobileSubstrate Bundle filter : 該工程作用的對象的bundle identifier, 想hook哪個app, 就輸入哪個app的bundle identifier. 例如微信有可能是com.tencent.wechat

List of application to terminate upon installation : 該tweak安裝完成后需要重啟的應用, 一般重啟SpringBoard. (相當于重啟桌面). 不用的話就輸入 -

ok, 工程創建完成啦

Theos基本知識

創建完后一般會有4個文件

    Makefile
    Tweak.xm
    control
    xxx.plist

Makefile

該文件指定工程用到的文件, 框架,庫等信息. 例如你的Tweak.xm文件用到了UIKit, Foundation等其他什么框架, 都在這里描述. 里面具體可以寫些什么大家可以自行Google啦.

這里需要注意的是, 如果要把程序通過ssh的方式安裝在手機上, 就必須在里面加一段
THEOS_DEVICE_IP = 手機的IP地址

Tweak.xm

我們寫代碼的文件, 后綴中的x代表這個文件支持Logos語法. m代表支持C++. 如果只有一個單獨的x代表支持Logos和C, xm則支持Logos和C/C++. 跟我們的.m和.mm一個意思.

這個文件默認內容就是一個注釋, 簡易的指導書. 這里介紹一些我們用到的概念

%hook

%hook ClassName : 代表要hook這個類.

    %hook SpringBoard
    /* 這里則為你要hook的函數, 方法 */
    %end
%orig

用在鉤住(hook)的函數內部, 代表調用被鉤住的函數的原始代碼

%log

用在鉤住(hook)的函數內部, 用來打印函數的類名, 參數等信息, 還可自己追加想要打印的信息.

%new

用在%hook的內部, 用于給一個現有的類添加新函數.

ps : 還有一些例如%group, %ctor, %init, %c等大家可自行Google其用法, 這里不再贅述

control

該文件記錄了deb包管理系統所需的基本信息, 會被打包進deb包中.

xxx.plist

跟我們應用中的info.plist作用類似.

開始編碼

由于我們的app非常小, 只是在iPhone啟動SpringBoard.app完成的時候顯示一個alertView而已, 所以我們的代碼非常精簡

    %hook SpringBoard

    - (void)applicationDidFinishLaunching:(id)application
    {
        %orig; // 調用原來的代碼

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Welcome to iPhone 4s!" message:nil delegate:self cancelButtonTitle:@"Goddamn!" otherButtonTitles:nil];

        [alert show]; // 顯示彈窗

    }

    %end

編譯 + 打包 + 安裝

在項目文件夾下使用make命令, 就可以編譯Theos工程了. 編譯完成當前目錄下會多一個obj文件夾

make package命令, 打包程序. 打包成功后當前目錄下會多一個package文件夾, 你的deb文件就在里邊

make package install : 編譯+打包+安裝一條龍服務, 直接將程序編譯打包后通過ssh連接的方式安裝在你的手機上. 當然你也可以把deb文件先放到手機上再利用iFile或其他應用安裝.

Done! coffee time.

ps : 配置文件和代碼都能在我的GitHub上找到, 有什么不懂的可以Google或者在這里留個言, 我都會盡可能快地回復, 相互學習, 共同進步! Good luck!

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

推薦閱讀更多精彩內容