1. 程式人生 > >iOS逆向工程-工具篇

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逆向工程中,可以使用gdb來對iOS應用進行動態分析,進行單步除錯,也可以使用Cycript來對iOS進行動態分析。 


本文簡要介紹了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標識跟蹤(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 TreeSample 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有發現很多self0也有耗時的情況,經指出後,此為在棧頂次數,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,應為是官方維護的,所以在後期維護上可以更放心,所以推薦使