iOS逆向工程-工具篇
對於初開始學習iOS逆向工程的人來說,實現一個tweak
可以算是入門逆向工程了。當然了,可能你現在還不知道tweak
是什麼。簡單來說,你可以把一個tweak當作某一個app的一個外掛(類似於瀏覽器廣告遮蔽外掛)。在app執行的時候,tweak會hook住某個函式,然後在hook的函式裡面,你可以插入你的程式碼。比如使用者在登陸微信賬號的時候,tweak可以hook住登入函式,dump出使用者的賬號密碼。那問題來了,我們要如何知道哪個函式是賬號登入函式咧?這就涉及到我們如何去分析一個iOS app
要進行iOS逆向工程,建議掌握iOS應用的開發相關知識,相信看本文的讀者應該都具備。 進行iOS逆向工程的一個關鍵就是工具的使用,工欲善其事,必先利其器。用好工具可以事半功倍。甚至可以做之前可能根本沒想到能夠做的事情。
這裡介紹的工具可以分為如下幾類:
- UI分析工具
- 程序分析工具
- 檔案系統檢視工具
- 資料庫檢視工具
- 網路分析工具
- 逆向程式開發工具
- 反彙編工具
- 偵錯程式
- 效能監控工具
- crash分析工具
UI分析工具
UI分析工具是對iOS應用的UI進行分析的工具,有Reveal和PonyDebugger等。
Reveal能夠在執行時除錯和修改iOS應用程式。它能連線到應用程式,並允許開發者編輯各種使用者介面引數,這反過來會立即反應在程式的UI上。就像用FireBug除錯HTML頁面一樣,在不需要重寫程式碼、重新構建和重新部署應用程式的情況下就能夠除錯和修改iOS使用者介面。 --InfoQ
使用Reveal的效果如圖:
使用PonyDebugger的效果如圖:
程序分析工具
檔案系統檢視工具
在iOS裝置上可以安裝iExplorer, iFunbox, iTool等工具,可以檢視iOS應用的檔案系統結構。使用iFunbox開啟陌陌的檔案目錄,如下圖所示:
網路分析工具
使用Tcpdump, WireShark, Charles、httpscope等工具可以對應用的網路資料進行分析。
使用Charles對網路資料包進行分析的示意圖:
逆向程式開發工具
開發越獄程式和日常開發的iOS程式很相似,不過,越獄程式能做更強大的事情。你的裝置越獄之後,你就能夠hook進Apple提供的幾乎所有的class,來控制iPhone/iPad的功能。
Theos大幅簡化了編寫越獄程式的流程,後面會對該工具進行詳細的介紹。
反彙編工具
可執行程式碼分析
- dumpdecrpted
- class_dump,class_dump_z,classdump_dyld
- Disassemblers
- IDA
- Hopper
- otool
- strings
- nm
IDA Pro是一款非常強大的反彙編工具,甚至能夠將彙編程式碼轉換成近似於原始碼的虛擬碼。
如下圖所示[1]:
可以看到,基本上相當於原始碼。
偵錯程式
執行時分析
- GDB/LLDB
- Cycript
- Logify
- weak_classdump
- InspectiveC
本文簡要介紹了iOS逆向工程要用到的工具,後面的文章會對用到的工具做進一步的介紹。
效能監控工具
手把手教time profiler
鑑於網上沒有較完善的time profile教程,官網上的介紹也很簡略,look在此寫一篇time profile的小教程,此篇文件囊括了谷歌前兩頁的搜尋結果,look濃縮翻譯了部分精華並加入了些個人理解,有不對的地方或需要補充的地方,歡迎大家斧正和指導。
在此感謝carmelosui關於self的指正。
一、啟動time profiler
已使用過time profiler的同志請直接跳到
首先您的手機得有證書,能確保能run過,筆者用的是xcode5.0.2 instrument5.0.1,以下的圖示均以xcode5.0.2 instrument5.0.1為準,有同學反饋證書都OK了,用time profiler時app會閃退、手機接著重啟,可能是手機越獄的原因,請用非越獄手機試試。
啟動time profile兩種方式
1.長按Xcode左上角的run鍵幾秒,將會出現一個下拉列表,然後選擇profile
2.通過xcode選單欄,Product -> Profile 啟動instrument
instrument裡選取time profiler,然後點Profile:
Time Profile就啟動了,操作一段時間後,點選stop,停止分析:
二、基本介紹
如果您對time profiler每個面板,大部分欄位瞭如指掌,請跳到
主面板
首先點選下圖view中三個選擇器,確保所有的檢視均有開啟
主介面如下:
圖1
1、可以通過range設定您需要關注的時間段,在圖1標識5 跟蹤(track)面板中
通過時間軸線,設定您的起止時間:
2.run timer and run navigator,記錄您run的次數,通過左右三角箭可以檢視上/下一次執行:
3.Liabrary,選取這個後,右邊會出現instrument工具的庫,您可以選取其他工具,然後拖到左上角的instrument檢視中,由於look這裡只介紹time profile,其他工具請查閱其他文件。
4.過濾器,如果您需要查詢具體的類或函式,在此輸入類名或函式名,圖1標識8詳情面板中將會展示您過濾後的結果
5.跟蹤面板(track pane)
6.擴充套件詳情面板(extended detail pane)
7.選項面板(options pane)
8.詳情面板(detail pane)用於展示主要資訊
詳情面板(detail pane)介紹
下面介紹最重要的詳情面板(detail pane)和擴充套件詳情列表(Extended Detail),time profiler下我們主要看兩種檢視Call Tree和Sample List
呼叫樹(Call Tree)檢視
Column heading | DefinDefinition | 翻譯 |
Running Time | The amount of time the symbol ran. | 該符號(函式)執行時間,注意是累積時間,time profiler不會順著程式流程去統計時間 |
Self | The number of times the symbol calls itself. | 並非呼叫次數,look有發現很多self為0也有耗時的情況,經指出後,此為在棧頂次數,look有待考證 |
Symbol Name | The name of the symbol being called. | 被呼叫的符號資訊 |
詳情面板call tree檢視與擴充套件詳情面板對應關係如圖:
經carmelosui指導,呼叫樹檢視下還可以開啟一些官網上沒有提到的資訊,如圖所示:
關於self #self self%,可以參考carmelosui 在stackoverflow上的提問和carmelo對本文的評論:
Self in the Time Profiler refers to the amount of time spent in the given function itself, excluding time spent in other methods that it calls.
Self % is the same thing but expressed as a percentage of the total running time.
# Self is the number of actual profiler samples that hit this function or method. The Time Profiler samples every 1 ms by default, so this number will often be the same as the Self value.
如上僅供參考,具體有待考證,look有空再demo驗證
樣本列表(sample list)
Column heading | Definition |
Timestamp | 該取樣開始時間 |
Depth | 堆疊深度 |
CPU | 執行緒執行在哪塊cpu上 |
Thread | The thread identifier. |
Hot Frame | 該取樣中呼叫最頻繁的函式 |
Responsible Library | 呼叫該函式的庫 |
Responsible Caller | 呼叫該函式的函式 |
sample list檢視下,詳情面板與擴充套件詳情面板對應關係如圖:
一些簡單技巧
如果您想一級級開啟呼叫棧,點選符號資訊前的展開/收起即可,如果您想一下全部開啟呼叫棧,按住option,再點展開/收起
您也可以按耗時,呼叫次數的升序/降序進行排列,如圖所示:
放大(shift) /縮小(control)+拖動時間軸線:調整跟蹤面板的單位時間長度,
也可以View ->snap Track to fit自動匹配合適的時間間隔顯示
相關推薦
iOS逆向工程-工具篇
對於初開始學習iOS逆向工程的人來說,實現一個tweak可以算是入門逆向工程了。當然了,可能你現在還不知道tweak是什麼。簡單來說,你可以把一個tweak當作某一個app的一個外掛(類似於瀏覽器廣告遮蔽外掛)。在app執行的時候,tweak會hook住某個函式,然後在hoo
iOS逆向之工具篇
簽名 github ram 配置 AC true else shu -a 一、常用工具:1)AlfredAlfred3.2 Mac 破解文檔: http://www.sdifen.com/alfred32.html常用設置和操作:https://www.jianshu.co
iOS逆向工程之App脫殼
工程 脫殼 一、生成dumpdecrypted.dylib動態庫首先我們要生成“砸殼”用的動態庫dumpdecrypted.dylib,我們“砸殼”時主要用到這個動態庫。該動態庫的源碼在github上是開源的(Github地址),要想得到dumpdecrypted.dylib這個動態庫,只需要從git
iOS逆向工程之Hopper中的ARM指令
工程一、Hopper中的ARM指令ARM處理器就不多說了,ARM處理器因為低功耗等原因,所以大部分移動設備上用的基本上都是ARM架構的處理器。當然作為移動設備的Android手機,iPhone也是用的ARM架構的處理器。如果你想對iOS系統以及你的應用進一步的了解,那麽對ARM指令集的了解是必不可少的,ARM
iOS逆向工程概述(轉)
tails 盤古 order detail 功能 分析工具 border 還要 越獄 逆向工程一詞,對很多人來說可能很陌生,在android領域,我們經常會聽到“反編譯某個apk”,那麽逆向工程從某種角度講也包括反編譯這項技術,這樣一對比,可能我們就更容易理解逆向工程的定義
iOS - 逆向工程
逆向工程 ssi command 安裝完成 repo min round relay ipa 公司最近搞得物聯網項目,很註重安全,對於我這種架構師,當然考慮到APP使用上的安全。分享一篇逆向基礎文章. 1.ios逆向工程指的是在軟件層面上進行逆向分析的一個過程。如果想要達到
IDEA下mybatis逆向工程工具和坑點
mybatis逆向工程:使用mybatis generator外掛,將資料庫表自動生成Bean,mapper,dao檔案,幫你剩下大把時光,但其中有很多坑點,這裡也記錄下來。 1. 首先在pom.xml檔案下加外掛的配置 <build> <plugins> &l
一百多個黑客總結的Python滲透、逆向工程工具, 拿穩了 手別抖
下面我們就開始吧~ ———————————————————————— 如果你想參與漏洞研究、逆向工程和滲透,我建議你時候用Python語言。Python已經有很多完善可用的庫,我將在這裡把他們列出來。 這個清單裡的工具大部分都是Python寫成的,一部分是現有C
NSA 將向公眾開源逆向工程工具 GHIDRA
據 ZDNet 報道,NSA 將在今年3月初於舊金山舉行的 RSA 安全會議上開源一款免費的逆向工程工具。該軟體名為 GHIDRA ,可將可執行檔案分解為彙編程式碼。 據悉,GHIDRA 釋出於 21 世紀初,在過去幾年裡一直被用於美國政府機構當中,以瞭解惡意
uncompyle--pyc的逆向工程工具
安裝 最方便的就是使用pip安裝 pip install uncompyle uncompyle6 --help 檢視幫助 uncompyle6 models.pyc > models.py 將models.pyc反編譯成py檔案 uncompile -o .
ios逆向工程-靜態分析
轉載自:http://my.oschina.net/iq19900204/blog/340297 最近在學習IOS逆向工程,檢視網路上的資料也不是太多,邊學邊總結一下。 首先學習資料: 《ios應用逆向工程 分析與實戰》 --------------------
Theos的安裝和使用-iOS逆向工程
Theos的安裝和使用-iOS逆向工程 Theos就是一套越獄開發工具包 1. Theos的安裝 1.1 安裝homebrew https://brew.sh/ 1.2 安裝dpkg sudo brew install dpkg 1.3 安
Hopper Disassembler基礎使用-iOS逆向工程
Hopper Disassembler基礎使用-iOS逆向工程 1.選擇包 2.顯示包內容 3. 4.
Mybatis逆向工程工具改進版(Version 1.1)
相對於原始版本,有以下改進: 可指定生成的實體類繼承指定SuperClass 提取Mapper方法,抽象成一個SuperMapper介面,所有的Mapper介面繼承此介面,以泛型指定key和model的型別 調整了一些程式碼的結構和邏輯 先看工具類結構:
iOS逆向工程之Hopper+LLDB除錯第三方App
LLDB是Low Level Debugger的簡稱,在iOS開發的除錯中LLDB是經常使用的,LLDB是Xcode內建的動態除錯工具。使用LLDB可以動態的除錯你的應用程式,如果你不做其他的額外處理,因為debugserver缺少task_for_pid許可權,所以你只
iOS逆向工程整理_0x01
原理 Objective-C 是一門動態語言,我們可以利用OC的Runtime動態的替換App原有的函式,來達到我們(不可告人)的目的。OC 中對某個物件的方法的呼叫並不像 C++ 一樣直接取得方法的實現的偏移值來呼叫,所以 C++ 方法與實現的關係在編譯時就
iOS 高效率編程工具篇
tinypng .com bsp targe 網站 .cn ref 編程 tar 原文鏈接: 確實有很多好用的工具。 http://huluo666.cn/2016/03/30/iOS%20高效率編程工具篇/ 圖片壓縮網站:https://tinypng.comiOS
Power Designer資料庫建模工具,正向、逆向工程
使用PD(UML工具——Power Designer)設計資料庫正向工程 現在我們來使用Power Designer這個工具設計資料庫。首先開啟Power Designer這個工具,點選【檔案】選單,在下拉框中選中【建立新模型】,如下: 在彈出的對話方塊中建立一個Model,可按
軟體工具——PowerDesigner逆向工程匯出Oracle資料庫表結構
一、準備工作: 準備工作包括,安裝或已經有建立好的oracle資料庫,建立好user、tablespace、table等;安裝Oracle客戶端、PLSQL等軟體並配置好資料庫連線,安裝PowerDesigner軟體。可以參考我的博文: 二、PowerDesi
Unity的IOS匯出工程配置工具xcodeapi
在把Unity打包成IOS安裝包是,經常需要自動化設定匯出工程的各項配置。 在Unity 4.x時代,有個常用的工具叫XUPorter,在Unity 5.x之後,Unity官方提供了另外一套工具,叫做xcodeapi,應為是官方維護的,所以在後期維護上可以更放心,所以推薦使