iOS逆向-day1:逆向內(nèi)容的簡介與越獄環(huán)境搭建

總體內(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(越獄后的 App Store)

  • 5.1、Cydia的簡單介紹

    • Cydia(越獄后的 App Store),可以在Cydia中安裝各種第三方的軟件(插件、補丁、APP)
    • 作者:Jay Freeman (網(wǎng)名:saurik)
      Jay Freeman` (網(wǎng)名:`saurik`)
  • 5.2、Cydia安裝軟件的步驟

    • 步驟1、添加軟件源(不同軟件的軟件源可能不同),下面以 pp助手源:http://apt.25pp.com 為例
      添加軟件源
    • 步驟2、進入軟件源找到對應(yīng)的軟件,開始安裝
      進入軟件源找到對應(yīng)的軟件
    • 步驟3、如果軟件源中的軟件太多,可以搜索查找
  • 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必備軟件安裝)

  • 6.5、(Mac必備軟件安裝)

    iFunBox與PP助手

    • iFunBox管理文件系統(tǒng)
    • PP助手自由安裝海量APP;卸載APP;備份APP為ipa安裝包(iOS9開始,不再支持備份APP)
  • 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;
    }
    

八、提高工作效率的工具

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