總體內(nèi)容
1、逆向課程簡介
2、學習逆向的條件
3、iOS越獄(iOS Jailbreak)的優(yōu)點和缺點
4、完美越獄和非完美越獄以及如何判斷是否越獄成功?
5、Cydia(越獄后的App Store
)
6、iphone/Mac必備軟件安裝以及安裝包
7、代碼判斷設(shè)備是否越獄
8、提高工作效率的工具
一、逆向課程簡介
-
1.1、逆向總體圖
逆向課程簡介 - 1.2、學習逆向的效果:
初級開發(fā)
>高級開發(fā)
>底層開發(fā)
- 1.3、學習逆向的價值
- 掌握編碼的本質(zhì),編寫高效代碼
- 修改已有APP的功能
- 學習優(yōu)秀APP的設(shè)計
- 增強客戶端的安全性
- 通用性極強(越底層,通用性越強)
二、學習逆向的條件
- 2.1、至少有iOS開發(fā)經(jīng)驗:會寫 UI界面、多線程網(wǎng)絡(luò)、數(shù)據(jù)存儲等等
- 2.2、調(diào)試設(shè)備:iPhone 6s plus,建議至少iPhone 5S(因為從5S開始支持arm64架構(gòu))或者至少是iPad Air、iPad mini2等支持arm64架構(gòu)的設(shè)備
- 2.3、iOS 9.1完美越獄,建議至少iOS8完美越獄,版本也不能太高,要保證能夠完美越獄,檢查手機是否可以越獄
檢查手機是否可以越獄
三、iOS越獄(iOS Jailbreak)的優(yōu)點和缺點
- 2.1、iOS越獄的優(yōu)點
- 打造個性化、與眾不同的iPhone:自由安裝各種實用的插件、主題、APP;修改系統(tǒng)APP的一些默認行為
- 自由安裝非AppSore來源的APP:“付費APP”秒變“免費APP”;未越獄iPhone安裝APP的途徑(AppStore、真機調(diào)試、通過證書打包簽名ipa安裝)
- 靈活管理文件系統(tǒng),讓iPhone可以像U盤那樣靈活
- 給開發(fā)者提供了逆向工程的環(huán)境
- 2.2、iOS越獄的缺點
- 蘋果不予保修
- 費電,越獄后的iOS系統(tǒng)會常駐一些進程,耗電速度約提升10%~20%
- 在新的iOS固件版本出來的時候,不能及時地進行更新:(1)、每個新版本的固件,都會修復(fù)上一個版本的越獄漏洞,使越獄失效;(2)、如果需要保持越獄狀態(tài),要等待新的越獄程序發(fā)布時,才能升級相應(yīng)的固件版本
- 不再受iOS系統(tǒng)默認的安全保護,容易被惡意軟件攻擊,個人隱私有被竊取的風險
-
如果安裝了不穩(wěn)定的插件,容易讓系統(tǒng)變得不穩(wěn)定、變慢,甚至出現(xiàn)“白蘋果”等問題
白蘋果
四、完美越獄和不完美越獄
4.1、完美越獄:越獄后的iPhone可以正常關(guān)機和重啟
-
4.2、不完美越獄
- iPhone一旦關(guān)機后再開機時,屏幕就會一直停留在啟動畫面,也就是“白蘋果”狀態(tài)
- 能正常開機,但已經(jīng)安裝的破解軟件都無法正常使用,需要將設(shè)備與PC連接后,使用軟件進行引導才能使用
4.3、補充:一般說來,在蘋果發(fā)布新的iOS固件后,針對該固件的不完美越獄會先發(fā)布,隨后完美越獄才可能發(fā)布;一般較新的系統(tǒng)版本,均為不完美越獄
-
4.4、越獄方法推薦(我使用的是愛思助手越獄的)
-
4.5、以及如何判斷是否越獄成功?
-
手機桌面是否有
Cydia
手機桌面是否有Cydia提示:Cydia 出現(xiàn)無法加載網(wǎng)絡(luò)的解決辦法
Cydia 出現(xiàn)無法加載網(wǎng)絡(luò)
Cydia正常打開的頁面 -
工具判斷(比如
PP助手
或者ITools 越獄助手
)ITools 越獄助手
-
五、Cydia(越獄后的 App Store
)
-
5.1、Cydia的簡單介紹
- Cydia(越獄后的
App Store
),可以在Cydia中安裝各種第三方的軟件(插件、補丁、APP) - 作者:
Jay Freeman
(網(wǎng)名:saurik
)
Jay Freeman` (網(wǎng)名:`saurik`)
- Cydia(越獄后的
-
5.2、Cydia安裝軟件的步驟
- 步驟1、添加軟件源(不同軟件的軟件源可能不同),下面以
pp助手源
:http://apt.25pp.com 為例添加軟件源 - 步驟2、進入軟件源找到對應(yīng)的軟件,開始安裝
進入軟件源找到對應(yīng)的軟件
- 步驟3、如果軟件源中的軟件太多,可以搜索查找
- 步驟1、添加軟件源(不同軟件的軟件源可能不同),下面以
-
5.3、SpringBoard
-
有時候通過Cydia安裝完插件后,可能會出現(xiàn)以下界面
SpringBoard- SpringBoard就是iOS的桌面
iOS的桌面
-
六、iphone/Mac必備軟件安裝以及安裝包
-
6.1、建議安裝順序
建議安裝順序 -
6.2、Apple File Conduit "2"(iphone必備軟件安裝)
- 補丁的作用(可以訪問整個iOS設(shè)備的文件系統(tǒng);類似的補丁還有:afc2、afc2add),可以使用工具 iFunBox
iFunBox使用的展示提示:先在 軟件源 里面添加上面軟件源的鏈接,再到pp助手源里面的全部軟件包里面下載 Apple File Conduit "2"
-
6.3、AppSync Unified(iphone必備軟件安裝)
- AppSync Unified補丁的作用:可以繞過系統(tǒng)驗證,隨意安裝、運行破解的ipa安裝包
- 軟件源:http://apt.25pp.com
PP助手源
AppSync Unified
-
6.4、iFile(iphone必備軟件安裝)
- iFile的作用:可以在iPhone上自由訪問iOS文件系統(tǒng);類似的還有
Filza File Manager
、File Browser
- 軟件源:http://apt.thebigboss.org/repofiles/cydia
BigBoss
iFile
- iFile的作用:可以在iPhone上自由訪問iOS文件系統(tǒng);類似的還有
-
6.5、(Mac必備軟件安裝)
iFunBox與PP助手 -
6.6、安裝包
- 通常情況下的安裝方式
- 通過Cydia安裝的安裝包是deb格式的(結(jié)合軟件包管理工具apt)
- 通過PP助手安裝的安裝包是ipa格式的
- 如果通過Cydia源安裝deb失敗
- 通過可以先從網(wǎng)上下載deb格式的安裝包
- 數(shù)據(jù)線連上手機,通過
iFunBox
將deb安裝包放到/var/root/Media/Cydia/AutoInstall
以iFile為例 - 重啟手機,Cydia就會自動安裝deb
- 通常情況下的安裝方式
七、代碼判斷設(shè)備是否越獄,參考博客一和參考博客二,手機是否越獄判斷的 demo
-
7.1、越獄帶來的蘋果安全支付機制
- 蘋果是非常重視安全性的,所以給用戶設(shè)計了一套復(fù)雜的安全機制。但是很多用戶喜好自由或者是被一些商家惡意的,對手機進行了越獄。這嚴重的破壞了手機的安全性能,給一些惡意的應(yīng)用打開了方便之門。
- 而在蘋果支付中,蘋果為了保護用戶的隱私,支付憑證中不包含任何用戶的Apple ID信息,所以我們的服務(wù)器在驗證這個憑證的時候無法得知是誰的憑證,只能驗證這個憑證的真?zhèn)巍>拖褚恍┥碳野l(fā)行的不記名購物卡,只要卡是真的就可以使用,而不管你是否是這個卡的真正主人。
- 蘋果的這種支付機制保護了用戶的隱私,但也為不良的黑客提供了作案的機會。黑客可以對越獄的手機添加一種惡意軟件,軟件會竊取你支付過程中的支付憑證,然后偽造一份假的憑證,讓你的支付驗證在商家的服務(wù)器上失敗,但你的錢卻已經(jīng)支付,黑客再使用你真正的支付憑證在其他的賬號中驗證支付,而商家的服務(wù)器驗證該支付憑證是真的,商家則認為是黑客的賬號購買了商品。這樣黑客就盜取了用戶的資金。
所以,為了保護用戶的安全性,應(yīng)該對越獄的手機,取消其支付功能。
-
7.2、判斷設(shè)備是否越獄一:通過手機越獄后增加的越獄文件判斷,判斷這些文件是否存在,只要有存在的,就可以認為手機已經(jīng)越獄了。
const char* jailbreak_tool_pathes[] = { "/Applications/Cydia.app", "/Applications/limera1n.app", "/Applications/greenpois0n.app", "/Applications/blackra1n.app", "/Applications/blacksn0w.app", "/Applications/redsn0w.app", "/Applications/Absinthe.app", "/Library/MobileSubstrate/MobileSubstrate.dylib", "/bin/bash", "/usr/sbin/sshd", "/etc/apt", "/private/var/lib/apt/", NULL, }; +(BOOL)isJailBreak1 { for (int i=0; i<ARRAY_SIZE(jailbreak_tool_pathes); i++) { if ([[NSFileManager defaultManager] fileExistsAtPath:[NSString stringWithUTF8String:jailbreak_tool_pathes[i]]]) { NSLog(@"The device is jail broken!"); return YES; } } NSLog(@"The device is NOT jail broken!"); return NO; }
-
7.3、判斷設(shè)備是否越獄二:根據(jù)是否能打開cydia判斷(判斷cydia的URL scheme
URL scheme是可以用來在應(yīng)用中呼出另一個應(yīng)用,這個方法也就是在判定是否存在cydia這個應(yīng)用。)+(BOOL)isJailBreak2{ if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"cydia://"]]) { NSLog(@"The device is jail broken!"); return YES; } NSLog(@"The device is NOT jail broken!"); return NO; }
-
7.4、判斷設(shè)備是否越獄三:根據(jù)是否能獲取所有應(yīng)用的名稱判斷,沒有越獄的設(shè)備是沒有讀取所有應(yīng)用名稱的權(quán)限的
+(BOOL)isJailBreak3{ if ([[NSFileManager defaultManager] fileExistsAtPath:@"User/Applications/"]) { NSLog(@"The device is jail broken!"); NSArray *appList = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"User/Applications/" error:nil]; NSLog(@"appList = %@", appList); return YES; } NSLog(@"The device is NOT jail broken!"); return NO; }
-
7.5、判斷設(shè)備是否越獄四:根據(jù)使用stat方法來判斷cydia是否存在來判斷,這個方法的思路還是通過判定cydia應(yīng)用,但方法是使用stat函數(shù),同時會判斷是否有注入動態(tài)庫。
#import <sys/stat.h> +(BOOL)isJailBreak4 { struct stat stat_info; if (0 == stat("/Applications/Cydia.app", &stat_info)) { NSLog(@"Device is jailbroken"); return YES; } return NO; }
-
7.6、判斷設(shè)備是否越獄五:攻擊者可能會利用 Fishhook原理 hook了stat。那么,你可以看看stat是不是出自系統(tǒng)庫,有沒有被攻擊者換掉:
#import <dlfcn.h> +(BOOL)isJailBreak5 { int ret ; Dl_info dylib_info; int (*func_stat)(const char *, struct stat *) = stat; if ((ret = dladdr(func_stat, &dylib_info))) { NSLog(@"lib :%s", dylib_info.dli_fname); return YES; } return NO; }
-
7.7、判斷設(shè)備是否越獄六:讀取環(huán)境變量這個DYLD_INSERT_LIBRARIES環(huán)境變量,在非越獄的機器上應(yīng)該是空,越獄的機器上基本都會有
Library/MobileSubstrate/MobileSubstrate.dylib
char* printEnv(void) { char *env = getenv("DYLD_INSERT_LIBRARIES"); return env; } +(BOOL)isJailBreak6{ if (printEnv()) { NSLog(@"The device is jail broken!"); return YES; } NSLog(@"The device is NOT jail broken!"); return NO; }
八、提高工作效率的工具
-
8.1、Alfred(便捷搜索與工作流使用) 推薦博客,在博客里面有很多的使用方法介紹
Alfred 8.2、XtraFinder(增強型Finder)
8.3、iTerm2博客1 與iTerm2博客2,里面有安裝以及介紹, 配色方案,OhMyZsh,安裝,主題配置方法、 Mac OS 終端利器 iTerm2配置大全
8.4、Go2Shell下載地址:從Finder快速定位到命令行工具,可參考該 博客