iOS逆向-day4:Mach-O

一撞牢、APP從開發(fā)到安裝到手機的過程

  • 1.1介却、生成ipa包的過程


    • 選擇手機下的可執(zhí)行文件
  • 1.2童叠、真正安裝的過程

    • 安裝方式一:Xcode 直接跑在手機上
    • 安裝方式二:上傳到 App Store 下載
    • 安裝方式三:使用 通過PP助手结闸、iFunBox辩诞、Xcode等工具安裝坎弯,我采用的是 PP助手,直接把 1.1 里面的ipa直接拖進去就好
      PP助手

二译暂、逆向APP的思路

  • 2.1抠忘、界面分析,工具如下外永,在上一篇博客:iOS逆向-day3:Cycript 有介紹
    Cycript崎脉、Reveal
  • 2.2、代碼分析
    對Mach-O文件的靜態(tài)分析
    MachOView伯顶、class-dump囚灼、Hopper Disassembler、ida等
  • 2.3祭衩、動態(tài)調(diào)試
    對運行中的APP進行代碼調(diào)試
    debugserver灶体、LLDB
  • 2.4、代碼編寫
    注入代碼到APP中
    必要時還可能需要重新簽名掐暮、打包ipa

三蝎抽、class-dump

  • 3.1、class-dump 介紹

    • 顧名思義路克,它的作用就是把Mach-O文件的class信息給dump出來(把類信息給導出來)织中,生成對應的.h頭文件

      class-dump
    • 官方地址:http://stevenygard.com/projects/class-dump/

    • 下載完工具包后將class-dump文件復制到Mac的/usr/local/bin 目錄锥涕,這樣在終端就能識別class-dump命令了


  • 3.2、常用格式
    class-dump -H Mach-O 文件路徑 -o 頭文件存放目錄

    • -H 表示要生成頭文件
    • -o 用于制定頭文件的存放目錄
    • 舉例:我們以里面我們自己的app:qainshou 為例狭吼,首先拿到 qainshou.ipa
    • 我們可以看到上面最后一步,.h文件都可以拿到
    • 提示:如果大家是從PP助手下載的非越獄的app殖妇,在執(zhí)行上面的操作的時候可能只會拿到一個文件:CDStructures.h 文件刁笙,后面會說到 砸殼

四、代碼編譯過程 (OC或者Swift語言怎么變成Mach-O文件)

  • 4.1谦趣、在同一種架構(gòu)平臺下疲吸,每一條匯編指令都有與之對應的唯一的機器指令
  • 4.2、不同的OC代碼前鹅,編譯出來的匯編代碼可能是一樣的

五摘悴、Hopper Disassmbler

  • 5.1、Hopper Disassmbler介紹
    • Hopper Disassmbler能夠?qū)ach-O文件的機器語言代碼反編譯成匯編代碼舰绘、OC偽代碼或者Swift偽代碼
    • 常用快捷鍵:Shift + Option + X 找出哪里引用了這個方法
  • 5.2蹂喻、使用方法:
    • 首先找打mach-o文件(上面1.1或者3.2都有介紹找到 Mach-O 文件)

    • 打開軟件 Hopper Disassmbler 把mach-o文件拖入軟件內(nèi)


    • 可以的到匯編代碼如下圖

    • 把匯編代碼轉(zhuǎn)為偽代碼

六、動態(tài)庫共享緩存(dyld shared cache)

  • 6.1泞坦、從iOS3.1 開始做粤,為了提高性能谣旁,絕大部分的系統(tǒng)動態(tài)庫文件都打包存放到了一個緩存文件中(dyld shared cache)

    • 緩存文件路徑:/System/Library/Caches/com.apple.dyld/dyld_shared_cache_armX
  • 6.2、dyld_shared_cache_armX的X代表ARM處理器指令集架構(gòu)

    • v6
      iPhone蔓彩、iPhone3G
      iPod Touch、iPod Touch2
    • v7
      iPhone3GS驳概、iPhone4赤嚼、iPhone4S
      iPad、iPad2顺又、iPad3(The New iPad)
      iPad mini
      iPod Touch3G更卒、iPod Touch4、iPod Touch5
    • v7s
      iPhone5待榔、iPhone5C
      iPad4
    • arm64
      iPhone5S逞壁、iPhone6、iPhone6 Plus锐锣、iPhone6S腌闯、iPhone6S Plus
      iPhoneSE、iPhone7雕憔、iPhone7 Plus姿骏、iPhone8、iPhone8 Plus斤彼、iPhoneX
      iPad5分瘦、iPad Air蘸泻、iPad Air2、iPad Pro嘲玫、iPad Pro2
      iPad mini with Retina display悦施、iPad mini3、iPad mini4
      iPod Touch6
    • 所有指令集原則上都是向下兼容的
    • 動態(tài)庫共享緩存一個非常明顯的好處是節(jié)省內(nèi)存
    • 現(xiàn)在的ida去团、Hopper反編譯工具都可以識別動態(tài)庫共享緩存


      動態(tài)庫共享緩存

七抡诞、動態(tài)庫的加載

  • 7.1、在 Mac\iOS 中土陪,是使用了 /usr/lib/dyld 程序來加載動態(tài)庫
    • dyld
      dynamic link editor昼汗,動態(tài)鏈接編輯器
      dynamic loader,動態(tài)加載器

      提示:dyld源碼

  • 7.2鬼雀、從動態(tài)庫共享緩存抽取動態(tài)庫
    可以使用dyld源碼中的launch-cache/dsc_extractor.cpp
    • #if 0 前面的代碼刪除(包括#if 0)顷窒,把最后面的 #endif 也刪掉

    • 編譯dsc_extractor.cpp

      clang++ -o dsc_extractor dsc_extractor.cpp
      
    • 使用dsc_extractor

      ./dsc_extractor  動態(tài)庫共享緩存文件的路徑   用于存放抽取結(jié)果的文件夾
      

八、Mach-O文件

  • 8.1源哩、Mach-O 是Mach object 的縮寫鞋吉,是 Mac\iOS 上用于存儲程序、庫的標準格式

  • 8.2璧疗、屬于Mach-O格式的文件類型有

    • 可以在xnu源碼中坯辩,查看到Mach-O格式的詳細定義
      • EXTERNAL_HEADERS/mach-o/fat.h
      • EXTERNAL_HEADERS/mach-o/loader.h
  • 8.3、常見的 Mach-O 文件類型

    • MH_OBJECT
      目標文件(.o)
      靜態(tài)庫文件(.a)崩侠,靜態(tài)庫其實就是N個.o合并在一起
    • MH_EXECUTE:可執(zhí)行文件
      .app/xx
    • MH_DYLIB:動態(tài)庫文件
      .dylib
      .framework/xx
    • MH_DYLINKER:動態(tài)鏈接編輯器
      /usr/lib/dyld
    • MH_DSYM:存儲著二進制文件符號信息的文件
      .dSYM/Contents/Resources/DWARF/xx(常用于分析APP的崩潰信息)
    • 提示:在Xcode中查看target的Mach-O類型


  • 8.4漆魔、Mach-O 的基本結(jié)構(gòu)

  • 8.5改抡、窺探Mach-O的結(jié)構(gòu)

    • 命令行工具
      file:查看Mach-O的文件類型

      file  文件路徑
      
      • 這里以我在桌面的 qainshou 的Mach-O文件為例

      otool:查看Mach-O特定部分和段的內(nèi)容
      lipo:常用于多架構(gòu)Mach-O文件的處理

      • 查看架構(gòu)信息:lipo -info 文件路徑
        導出某種特定架構(gòu):lipo 文件路徑 -thin 架構(gòu)類型 -output 輸出文件路徑
        合并多種架構(gòu):lipo 文件路徑1 文件路徑2 -output 輸出文件路徑
    • GUI工具:MachOView,官網(wǎng)下載完使用是有問題的系瓢,建議去我的QQ群:584599353 的逆向文件里面獲取

  • 8.6阿纤、Universal Binary(通用二進制文件)

    • 通用二進制文件
      同時適用于多種架構(gòu)的二進制文件
      包含了多種不同架構(gòu)的獨立的二進制文件
    • 因為需要儲存多種架構(gòu)的代碼,通用二進制文件通常比單一平臺二進制的程序要大
    • 由于兩種架構(gòu)有共同的一些資源夷陋,所以并不會達到單一版本的兩倍之多
    • 由于執(zhí)行過程中欠拾,只調(diào)用一部分代碼,運行起來也不需要額外的內(nèi)存
    • 因為文件比原來的要大骗绕,也被稱為“胖二進制文件”(Fat Binary)
  • 8.6藐窄、dyld 和 Mach-O

    • dyld用于加載以下類型的Mach-O文件
      MH_EXECUTE
      MH_DYLIB
      MH_BUNDLE
    • APP的可執(zhí)行文件、動態(tài)庫都是由dyld負責加載的
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末酬土,一起剝皮案震驚了整個濱河市荆忍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖刹枉,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叽唱,死亡現(xiàn)場離奇詭異,居然都是意外死亡微宝,警方通過查閱死者的電腦和手機棺亭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芥吟,“玉大人侦铜,你說我怎么就攤上這事≈油遥” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵涤躲,是天一觀的道長棺耍。 經(jīng)常有香客問我,道長种樱,這世上最難降的妖魔是什么蒙袍? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮嫩挤,結(jié)果婚禮上害幅,老公的妹妹穿的比我還像新娘。我一直安慰自己岂昭,他們只是感情好以现,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著约啊,像睡著了一般邑遏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上恰矩,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天记盒,我揣著相機與錄音,去河邊找鬼外傅。 笑死纪吮,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的萎胰。 我是一名探鬼主播碾盟,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼奥洼!你這毒婦竟也來了巷疼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嚼沿,沒想到半個月后估盘,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡骡尽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年遣妥,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片攀细。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡箫踩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谭贪,到底是詐尸還是另有隱情境钟,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布俭识,位于F島的核電站慨削,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏套媚。R本人自食惡果不足惜缚态,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望堤瘤。 院中可真熱鬧玫芦,春花似錦、人聲如沸本辐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽师郑。三九已至环葵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宝冕,已是汗流浹背张遭。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留地梨,地道東北人菊卷。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像宝剖,于是被迫代替她去往敵國和親洁闰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 逆向App的基本步驟 界面分析Cycript万细、Reveal 代碼分析對Mach-O文件的靜態(tài)分析MachOView...
    迷心迷閱讀 746評論 0 0
  • 一、ipa了解是個壓縮包腰素,解壓后 二聘裁、逆向app思路; 界面分析Cycript:通過命令行查看界面的組成情況弓千,子控...
    Lovell_閱讀 1,377評論 0 1
  • Cycript簡介 Cycript是Objective-C++衡便、ES6(JavaScript)、Java等語法的混...
    斑駁的流年無法釋懷閱讀 805評論 0 0
  • UIKit的Mach-O文件在哪里洋访?镣陕? 系統(tǒng)的動態(tài)庫 從iOS3.1開始,為了提高性能姻政,絕大部分的系統(tǒng)動態(tài)庫文件都...
    Rathen閱讀 1,425評論 0 2
  • 一呆抑、APP從開發(fā)到安裝到手機的過程 二、逆向APP的思路 界面分析Cycript汁展、Reveal 代碼分析對Mach...
    阿凡提說AI閱讀 5,739評論 0 0