教你動手做一個 iOS 越獄 app

來源:互聯網
上載者:User

標籤:

 

前言

 

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

 

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

 

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

https://github.com/Jerry4me/JRFirstJailBreakApp

 

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

 

 

準備動作

 

你需要準備的是 :

 

  • 一台Mac

  • 一部已經越獄的iPhone or iPad

  • Theos

  • Xcode

  • Xcode Command Line Tools

  • dpkg

 

Mac

 

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

 

越獄iPhone

 

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

 

安裝OpenSSH

 

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

 

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

 

方法如下 : 

進入命令列工具

ssh [email protected]你的手機的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/下, 並用以下命令賦予它可執行許可權

http://joedj.net/ldid

 

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! enjoyourself!

 

 

ps : 設定檔和代碼都能在我的GitHub上找到, 有什麼不懂的可以Google或者在這裡留個言, 我都會儘可能快地回複, 相互學習, 共同進步! Good luck!

 

教你動手做一個 iOS 越獄 app

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.