iOS逆向之分析工具的安裝和使用

      網(wǎng)友投稿 1502 2025-03-31

      一、逆向 App 總體思路

      UI 分析:Cycript 、Reveal;

      代碼分析:

      代碼在 Mach-O 文件,所以要對 Mach-O 文件進(jìn)行靜態(tài)分析;

      MachOView、class-dump、Hopper Disassember、ida;

      動態(tài)調(diào)試:

      對運行中 App 進(jìn)行代碼調(diào)試;

      debugserver、LLDB;

      代碼編寫:

      注入代碼到 App 中;

      必要時還可能需要重新簽名、打包 ipa。

      二、MonkeyDev 安裝與使用

      ① 安裝

      MonkeyDev 是 iOSOpenDev 的升級,是非越獄插件開發(fā)集成神器:

      可以使用 Xcode 開發(fā) CaptainHook Tweak、Logos Tweak 和 Command-line Tool,在越獄機(jī)器開發(fā)插件,是原來 iOSOpenDev 功能的遷移和改進(jìn);

      只需拖入一個砸殼應(yīng)用,自動集成 class-dump、restore-symbol、Reveal、Cycript 和注入的動態(tài)庫并重簽名安裝到非越獄機(jī)器;

      支持調(diào)試自己編寫的動態(tài)庫和第三方 App;

      支持通過 CocoaPods 第三方應(yīng)用集成 SDK 以及非越獄插件,簡單來說就是通過 CocoaPods 搭建一個非越獄插件商店。

      MonkeyDev -:MonkeyDev。

      官方說明文檔地址:MonkeyDev 官方文檔。

      ② 使用

      點擊 File - New - Project,創(chuàng)建 iOS 項目,選擇 iOS 滑動到最下方可以看到 MonkeyDev 提供的模塊,選擇相應(yīng)的項目類型,就可以創(chuàng)建對應(yīng)的項目:

      創(chuàng)建完成后,工程如下;

      MonkeyTestAppDylib 是將被注入目標(biāo) App 的動態(tài)庫,我們自己要 hook 的代碼可以在 MonkeyTestAppDylib.m 文件里面編寫,它支持 OC runtime 的 HOOK,C 函數(shù)的 fishhook,AntiAntiDebug 里面是反反調(diào)試的代碼;

      fishhook這個是自動集成的 fishhook 模塊,MonkeyDev 的 Framewroks 已經(jīng)自動集成 RevealServer.framework 和 libcycript.dylib,如果選擇 Release 編譯的話是不會集成的。

      準(zhǔn)備脫殼后的 ipa 文件,然后右鍵項目里面的 TargetApp 文件夾 Show in Finder,把 ipa 文件拖入下面的位置,TargetApp 文件夾下的 put ipa or app here 這個文件不要刪除。

      ③ Xcode 12 運行錯誤解決

      動態(tài)庫證書錯誤:

      在 TARGETS 的 Build Settings 下添加 CODE_SIGNING_ALLOWED 為 NO:

      ld: file not found: /usr/lib/libstdc++.dylib 錯誤:

      在 MonkeyTestAppDylib 的 Build Settings 的 Other Linker Flags 中移除掉 /usr/lib/libstdc++.dylib 和 -weak_library:

      三、Reveal 安裝與使用

      ① 安裝

      Reveal 是一個很強大的 UI 分析工具,UI 分析非常直觀,用來查看 App 的 UI 布局相當(dāng)方便。

      關(guān)聯(lián) MonkeyDev,打開 Reveal 頁面,Help-Show Reveal Library in Finder -iOS Library 拷貝RevealServer.framework,然后前往 /opt/MonkeyDev/Frameworks 替換掉 RevealServer.framework:

      ② 使用

      在真機(jī)上運行 monkeyDev 工程,程序啟動后,打開 Reveal,選擇 USB 方式,點擊 App 的 icon,進(jìn)入 UI 分析頁。

      四、class-dump 的安裝和使用

      ① 安裝

      class-dump 主要用于提取 Mach-O 文件中的頭文件信息并生成 .h 文件,通過對生成的 .h 文件可分析對應(yīng) App 實現(xiàn)的基本思路和一些重要的類對應(yīng)的功能,以便進(jìn)一步進(jìn)行逆向工作。

      class-dump-:Class-dump。下載 class-dump 的 dmg 格式:class-dump-3.5.dmg:

      安裝操作:

      打開終端輸入:open /usr/local/bin;

      把 dmg 文件中的 class-dump 文件復(fù)制到 /usr/local/bin;

      改權(quán)限,終端輸入:

      sudo chmod 777 /usr/local/bin/class-dump

      1

      ② 使用

      在終端通過命令可以導(dǎo)出文本格式頭文件,可以導(dǎo)出 text 文件格式:

      class-dump -H iQiYiPhoneVideo -o IQIY

      1

      如需幫助則在終端輸入:

      class-dump --help

      1

      五、Hopper Disassembler

      Hopper Disassembler Mac 版是一個強大的 Mac 反編譯神器,可以反匯編,反編譯和調(diào)試應(yīng)用程序,而且支持 iOS 逆向,可以把 Mach-O 文件的機(jī)器語言代碼反編譯成匯編代碼、OC 或 Swift 的偽代碼。

      Hopper Disassembler 支持分解 Mach-O、ARM 和 Windows 二進(jìn)制文件,是程序員進(jìn)行拆開代碼進(jìn)行調(diào)試或?qū)W習(xí)的神器。

      Hopper Disassembler 官方-:Hopper。

      六、Cycript 安裝和環(huán)境配置

      ① 安裝

      Cycript 是 Objective-C++、ES6(javaScript)、Java 等語法的混合物,使用 Cycript 可以動態(tài)調(diào)試 App。

      Cycript 官方-:Cycript。

      Cycript 官方學(xué)習(xí)文檔:Cycript 官方文檔。

      從 Cycript 下載 SDK,下載完成后解壓文件夾放到 /opt 目錄下。

      ② 配置環(huán)境變量

      打開終端輸入:

      open -e .bash_profile

      1

      在打開的 .bash_profile 文件內(nèi)添加 Cycript 環(huán)境變量地址:

      export PATH=/opt/cycript_0.9.594/:$PATH

      1

      Cycript 需要依賴低版本的 ruby2.0:

      dyld: Library not loaded: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/libruby.2.0.0.dylib Referenced from: /opt/cycript_0.9.594/./Cycript.lib/cycript-apl Reason: image not found zsh: abort ./cycript -r 10.19.80.176:6666

      1

      2

      3

      4

      5

      6

      7

      查找到 ruby 安裝所在目錄:拷貝出 libruby.2.4.10.dylib ,并將動態(tài)庫改成 libruby.2.0.0.dylib,粘貼到 /opt/cycript_0.9.594/Cycript.lib/ 目錄下:

      ③ 使用

      打開終端進(jìn)入 cycript_0.9.594 目錄:cd /opt/cycript_0.9.594;

      在終端輸入電腦與真機(jī)必須同一局域網(wǎng)內(nèi)的IP地址:./cycript -r 10.19.80.176:6666

      按 enter 鍵出現(xiàn) cy# 表示成功連接。

      日志內(nèi)也可以查到可運行的 IP 地址:

      Download cycript(https://cydia.saurik.com/api/latest/3) then run: ./cycript -r 10.19.80.176:6666

      1

      control +D 退出查看,在 cy# 后面輸入:

      [[UIApp keyWindow]recursiveDescription].toString()

      1

      可以查看 UI 整體布局結(jié)構(gòu)。

      查找根視圖:

      cy# UIApp.keyWindow.rootViewController #""

      1

      2

      獲取對象的所有成員變量,使用(*對象):

      cy# *UIApp.keyWindow.rootViewController

      1

      篩選出某種類型對象:

      choose(UIViewController) choose(UITableViewCell)

      1

      使用遇到的問題:

      *** _syscall(connect(socket_, info->ai_addr, info->ai_addrlen)):../Console.cpp(306):CYSocketRemote [errno=61]

      1

      MDCycriptManager.h 中的端口值換一下,#define PORT 6666 換成端口為 6688。

      七、代碼注入

      @interface MyViewController @end %hook MyViewController \- (void)showLoginPopup{ NSLog(@"hook viewDidLoad method"); UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"溫馨提示" message:@"我的第一個tweak工程創(chuàng)建成功" delegate:self cancelButtonTitle:@"確定" otherButtonTitles:@"取消",nil]; [alertView show]; UITableView *p = MSHookIvar(self,"_tableView"); p.backgroundColor=[UIColor purpleColor]; } \- (void)toLogin{ %orig; UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"溫馨提示" message:@"你過來呀!" delegate:self cancelButtonTitle:@"確定" otherButtonTitles:@"取消",nil]; [alertView show]; } %end

      1

      2

      3

      4

      iOS逆向之分析工具的安裝和使用

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      iOS 逆向之路有坑有驚喜,需要了解并使用逆向中的各種工具,要求對匯編語言了解,熟悉各種腳本語言,對系統(tǒng)的底層知識的了解要求更高,越獄環(huán)境下的逆向自由度更高,非越獄環(huán)境下逆向依然充滿挑戰(zhàn)。在逆向別人 App 時候,也在提醒我們,開發(fā)項目中涉及的核心代碼安全性很重要,避免被泄漏出去。

      iOS 移動APP

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:您是否正在投資ERP成功的所有要素?
      下一篇:圖片轉(zhuǎn)換成文檔,怎樣將內(nèi)容原版放大到A4紙張上?(怎么把圖片轉(zhuǎn)化為a4紙大小)
      相關(guān)文章
      国产亚洲老熟女视频| 久久久久无码专区亚洲av| 亚洲国产成人片在线观看无码| 亚洲精品美女久久久久99小说| 日韩亚洲翔田千里在线| 亚洲成在人线在线播放无码| 亚洲1区2区3区精华液| 亚洲色一区二区三区四区| 久久亚洲精品专区蓝色区| 亚洲一区二区久久| 亚洲制服丝袜第一页| 久久狠狠爱亚洲综合影院| 亚洲免费视频播放| 亚洲人成电影院在线观看| 亚洲国产日产无码精品| 亚洲成人黄色在线| 亚洲天堂2016| 亚洲精品无播放器在线播放| 亚洲AV无码一区二区乱子仑 | 久久精品国产精品亚洲艾| 亚洲AV永久无码精品水牛影视| 国产V亚洲V天堂无码久久久| 久久精品国产亚洲av成人| 亚洲bt加勒比一区二区| 亚洲精品永久www忘忧草| 亚洲成人免费在线观看| 亚洲视频无码高清在线| 亚洲男人的天堂网站| 久久亚洲精品无码网站| 亚洲国产精品丝袜在线观看| 中文字幕亚洲不卡在线亚瑟| 亚洲Av无码专区国产乱码DVD| 亚洲影院在线观看| 久久久久se色偷偷亚洲精品av| 亚洲综合精品成人| 亚洲国产精品自产在线播放| 亚洲日本va中文字幕久久| 久久亚洲精品成人AV| 国产精品亚洲自在线播放页码| 亚洲欧美第一成人网站7777| 亚洲高清无码综合性爱视频|