1. 程式人生 > >iOS開發之逆向工程

iOS開發之逆向工程

逆向工程:是一個廣義概念,是指從可執行的程式系統出發,運用解密、反彙編、系統分析、動態除錯等多種技術對軟體進行分析,推匯出軟體產品的結構、流程、演算法、軟體架構、設計模式、執行方法、相關資源及文件等這一過程。軟體逆向的整個過程統稱為軟體逆向工程,過程中所採用的技術統稱為軟體逆向工程技術。究其義,這是個軟體安全方面的技術。

逆向工程的目的

(1)分析競品的最新研究或者產品原型(包括所用的技術,所使用的框架)

(2)學術/學習目的。

(3)破解應用的使用許可權

(4)識別競品潛在的侵權行為

逆向工程的作用是什麼

1.逆向工程並不是為了破解他人的軟體為目的,在商業領域,有更加重要的作用,具體包括以下幾個方面。

2.安全審查:對於iOS 開發者來說,不僅僅是完成產品的業務功能,尤其對大公司,還需要非常重視安全問題。通過逆向工程,及早發現問題,修改問題,避免釋出後到使用者手中引起各種輿情問題,損害公司聲譽。

3.分析競品:1.參考競品app的架構設計;2.參考競品app的介面設計;3.關鍵技術的實現細節。

4.學術研究:通過逆向,實現學術研究,主要用於學習。

5.突破app的使用限制:很多app對不同的使用者有使用許可權的限制,比如收費,或者vip使用者才能使用的功能,通過逆向提前獲取使用許可權,當然不推薦這種方式,建議大家還是支援正版。

6.識別侵權:主要用於調查競品或商業產品,識別侵權行為

逆向工程的分析工具

工欲善其事必先利其器,掌握了方法之後,還要學會使用各種工具,分析app的不同功能。這些工具主要包括以下:

砸殼檢視APP標頭檔案

工具

一.App Store上的應用都使用了FairPlay DRM數字版權加密保護技術。我們要對檔案進行反彙編,而IPA都是加密的,哪怎麼辦呢?所以在逆向之前我們需要先對應用進行砸殼。這裡我們使用的是 dumpdecrypted。(還可以使用

Clutch,這裡我們就不講Clutch了)

dumpdecrypted 程式碼

Dumps decrypted mach-o filesfromencrypted iPhone applicationsfrommemory to disk.This tool is necessaryforsecurity researchers to be able to look under the hoodofencryption.

二.class-dump是用於解析Mach-O檔案中儲存的OC執行時資訊的。他能生成類的宣告、分類、協議。和otool -ov類似,但是由於class-dump的結果是以OC程式碼展示的,所以有很強的可讀性。

class-dump 程式碼

This is a command-line utility for examining the Objective-C runtime information stored in Mach-O files.

It generates declarations for the classes, categories and protocols. This is the same information provided by using ‘otool -ov’,

but presented as normal Objective-C declarations, so it is much more compact and readable.

一臺越獄手機

iOS為了保證安全性,所有的應用都是在沙盒中執行。所以要想完成逆向操作,我們需要更高階的許可權。沒有越獄裝置那就無法展開學習和研究工作。

1.安裝好 dumpdecrypted和 class-dump 以後,在越獄機上Cydia上安裝 openSSH,通過MAC終端控制手機,openSSH密碼是alpine(手機和電腦需要在同一網段,然後點開設定檢視當前手機分配的ip地址)

2.在越獄機上Cydia上安裝 Cycript

3.找出要反編譯APP的執行檔案目錄,為了避免干擾,最好殺掉其他程序,只打開反編譯APP,使用ps -e命令得到路徑。。。。。。。其中的 /var/mobile/Applications/B1215D4A-24B7-480F-B91D-8F5386B0211A/QQ.app/QQ 就是我們要找的

4.使用Cycript找出反編譯APP的Documents目錄路徑。。。。。。。其中的 /var/mobile/Applications/B1215D4A-24B7-480F-B91D-8F5386B0211A/Documents/ 就是我們要找的Documents目錄路徑

5.將dumpdecrypted_7.dylib拷貝到Documents目錄下,此處是使用scp方式,也可以使用iFunBox或者PP助手進行檔案操作(這裡的dumpdecrypted_7.dylib是別人已經生成好的)地址

6.然後就是使用dumpdecrypted砸殼。。。。。。其中的 QQ.decrypted 就是我們要的破解檔案

7.使用class-dump將檔案解析。。。。。。得到的QQ.m檔案就是我們需要的標頭檔案,class-dump --arch armv7 QQ.decrypted > QQ.m,

將QQ.decrypted拷貝到Mac桌面資料夾,使用class-dump進行解析armv7,其他型號使用相對應的 4(armv7),4s(armv7),5(armv7),5s(arm64),6(arm64),6s(arm64)

(1)分析從AppStore下載的IPA包

class-dump--archarmv7QQ.decrypted>QQ.m

(2)分析從越獄平臺下載的越獄IPA包

class-dump-HMYXJ.app-o/Users/damon/Desktop/test/headMYXJ

分析APP UI

Reveal:Reveal能夠在執行時除錯和修改iOS應用程式。它能連線到應用程式,並允許開發者編輯各種使用者介面引數,這反過來會立即反應在程式的UI上。就像用FireBug除錯HTML頁面一樣,在不需要重寫程式碼、重新構建和重新部署應用程式的情況下就能夠除錯和修改iOS使用者介面。

此方法只適用於有原始碼的專案,並不適用分析任意APP。如有需要分析任意APP請猛點這裡

1.首先下載Revleal破解版(純屬廢話) 最後有整個操作步驟的GIF。

2.啟動Reveal 選中選單欄中的Help-->Show Reveal Library in Finder --> iOS Library.

拖動新增Reveal.framework到工程中。選中 Copy items into destination group's folder (if needed)以及當前的targets。

3.TARGETS中設定命令

TARGETS --> Settings --> Other Linker Flags -->Any iOS Simulator SDK(選擇這個命令是指任何模擬器執行reveal都能分析) -ObjC

4.這時執行工程,出現報錯,報錯內容為如下,這時我們需要引入「libz.dylib」庫,然後重新執行工程

再次執行,成功如下

5.開啟 Reveal 工具,左上角選中我們的「你的工程名字」工程,然後就可以檢視工程內 UI 的結構了。如圖:

附上整個操作的GIF

https://upload-images.jianshu.io/upload_images/1428549-95bd37a111e91b7e.gif?imageMogr2/auto-orient/

iOS 砸殼匯出標頭檔案

砸殼 匯出標頭檔案

安裝class-dump

砸殼步驟:

開始砸殼前 確保手機裝置跟mac在同一區域網!!!

1:ssh [email protected] (iP地址為裝置的iP地址)預設密碼:alpine

2:拷貝dumpdecrypted.dylib 到App的Documents的目錄

2.1:手機開啟需要砸殼的APP

3:執行砸殼:

F7DAC9BB-4CC1-4CC3-880C-E0CD954DB9FD

3.1:進入到 Documents 目錄下:  /var/mobile/Containers/Data/Application/F7DAC9BB-4CC1-4CC3-880C-E0CD954DB9FD/Documents/6B099246-F386-417D-BD8F-F679BFAF2F2C AsktaoMobile iOS.app

注:程序名字如果有空格 空格前加”\”

3.2: DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/6B099246-F386-417D-BD8F-

F679BFAF2F2C/AsktaoMobile\ iOS.app/AsktaoMobile\ iOS

砸殼成功後在document裡面找到 .decrypted檔案

4:使用class-dump匯出標頭檔案的命令格式:

class-dump -H 需要匯出的框架路徑 -o 匯出的標頭檔案存放路徑

class-dump -H /Users/apple2015/Desktop/AsktaoMobile\ iOS.decrypted -o /Users/apple2015/Desktop/touwenjian

反編譯

Hopper是一款執行在Mac、Windows和Linux下的除錯(os x only)、反彙編和反編譯的互動式工具。

可以對32、64位的MAC程式、Windows程式和IOS程式(arm)進行除錯、反編譯等。

功能

(1)能夠分析出函式的程式碼塊、變數等

(2)可以生成程式碼塊的控制流圖CFG

(3)可以通過Python指令碼來呼叫Hopper的其他一些功能,使用更加靈活

(4)在MAC上還可以通過GDP動態除錯分析

(5)對Objective C的極佳的支援——能夠解析出Selector、字串和傳送的訊息

(6)反編譯,生成虛擬碼

IDA Pro是一個非常強大的反彙編和除錯工具,支援Windows,Linux, Mac OS X平臺

網路介面分析

Charles是Mac下常用的對網路流量進行分析的工具,類似於Windows下的Fiddler。在開發iOS程式的時候,往往需要除錯客戶端和伺服器的API介面,這個時候就可以用Charles,Charles能夠攔截SSL請求、模擬慢速網路、支援修改網路請求包並多次傳送、能夠篡改Request和Response等強大的功能。下面介紹安裝和使用方法。

功能

(1)攔截SSL請求

(2)模擬慢速網路選單Proxy中的Throttle Setting可以對此進行設定

(3)支援修改網路請求包並多次傳送

(4)斷點功能Charles能夠斷到傳送請求前(篡改Request)和請求後(篡改Response)

(5)捕獲記錄控制 可以過濾出關注的請求。選單Proxy中的Record Setting可以對此進行設定

使用偵錯程式hook

gdb除錯命令

已經整合在Xcode中去了用於除錯App程式

但是直接在硬體裝置上執行時,可以獲得更多的功能

可以除錯裝置上所有的程序

快速分離和重新附著到某個程序上

沒有桌面形式的作業系統上進行開發程式時的除錯

攻擊者可以修改gdb命令的指令碼檔案,來達到操作裝置上任何程式的

執行、修改、監控裝置上的所有的程式

如何防止被反編譯

程式碼混淆的必要性以及方法:

(1)使用c語言實現關鍵的程式碼邏輯

(2)使用巨集替換逆向工程參考文章

TARGETS中設定命令

TARGETS --> Settings --> Other Linker Flags -->Any iOS Simulator SDK(選擇這個

( 其實作為一個開發者有一個學習的氛圍跟一個交流圈子特別重要,這是我的一個iOS交流群687528266,不管是小白還是大牛都歡迎入駐,大家一起交流成長! )

相關推薦

iOS開發逆向工程

逆向工程:是一個廣義概念,是指從可執行的程式系統出發,運用解密、反彙編、系統分析、動態除錯等多種技術對軟體進行分析,推匯出軟體產品的結構、流程、演算法、軟體架構、設計模式、執行方法、相關資源及文件等這一過程。軟體逆向的整個過程統稱為軟體逆向工程,過程中所採用的技術統稱為軟體逆

iOS開發如何獲取自己工程所有圖片

網上都是如何獲取別人APP裡所有的圖片,當然也可以把自己的APP用相同的方法把圖片弄出來。這裡用正向思維把圖片拷出來。 正常來講從自己的工程把圖片資源弄出來一份,是下面的步驟 1.在工程裡搜檔案 “.png”  “.jpg” ".jpeg" ".gif" 2.選中連

iOS開發如何優雅的替換工程裡所有的系統彈框UIAlertView,UIActionSheet,UIAlertController 的原理

現在又要替換UIAlertView和UIActionSheet UIActionSheet使用的不多,按照系統的屬性方法名,重新定義一個類 實現一下就好,和UISwitch那個類似。 這裡以UIAlertView為例,因為它使用的特別多,直接在工程裡能搜到500多個,

Xcode工程編譯錯誤iOS開發Xcode9報錯 Compiling IB documents for earlier than iOS7 is no longer supported.

概要:   在我們升級到Xcode9時,最低的編譯版本為iOS8,但是在使用一些SDK的時候就會報出Compiling IB documents for earlier than iOS7 is no longer supported. 這句錯誤,這個時候我們點選錯誤跳轉到Xib或Storyboard中隨後

iOS開發統計Xcode工程的程式碼行數

1.開啟終端,用cd命令 定位到工程所在的目錄,如果需要統計某個資料夾的程式碼行數,則cd到當前資料夾下 2.呼叫以下命名即可把每個原始碼檔案行數及總數統計出來 find . "(" -name "

IOS開發新增第三方lib或從其他工程引入lib時的連結錯誤:ld: symbol(s) not found for architecture i386

首先要確保正確的新增步驟 1)拷貝到新project目錄下 2)新增到工程裡 3)在新工程的targets->Build Phases->target dependencies 點選+ 新增lib 3) 在新工程的targets->Summary->

Xcode工程編譯錯誤iOS開發Sending '__strong typeof (xxx)' (aka 'xxxx *__strong') to parameter of incompatible type 'id<xxx>'

ram 分享 一行 警告 解決 class send 文件 interface iphone開發出現警告: Sending ‘__strong typeof (xxx)‘ (aka ‘xxxx *__strong‘) to parameter of incompatibl

ios開發 -- invalid nib registered for identifier

層級關系 註意 刪除 出現 ide 提示 sta tab 後來 今天在寫代碼的時候,碰到這麼一個問題: invalid nib registered for identifier (重用符) - nib must contain exactly one top level

iOS開發視頻根據url獲取第一幀圖片,獲取任一幀圖片

keyword rac onerror 根據 ati parameter all ger mage + (UIImage*) thumbnailImageForVideo:(NSURL *)videoURL atTime:(NSTimeInterval)time { AV

iOS開發Runtime常用示例總結

開發一、構建Runtime測試用例本篇博客的內容是依托於實例的,所以我們在本篇博客中先構建我們的測試類,Runtime將會對該類進行相關的操作。下方就是本篇博客所涉及Demo的目錄,上面的RuntimeKit類是講Runtime常用的功能進行了簡單的封裝,而下方的TestClass以及相關的類目就是我們Run

ios開發Swift新手入門

間距 cati rmi article ride edit ner .com 設置 1、關於swift和調試,swift在ios7.0才支持,ios8.3系統的真機必需要xcode6.3才幹調試。安裝xcode6.3需要os x 10.10以上 2、應用程序由Main.

IOS開發——objectForKey與valueForKey在NSDictionary中的差異

什麽 iat app 報錯信息 lease 方法 去掉 defined atom 從 NSDictionary 取值的時候有兩個方法,objectForKey: 和 valueForKey:,這兩個方法具體有什麽不同呢? 先從 NSDictionary 文檔中來看這兩個方法

ios開發--鍵盤的監聽

efault key nil self. transform blog mar form owa 監聽鍵盤的彈出,讓整個頁面向上移動,比較簡單,僅做記錄使用: 代碼如下: // 監聽鍵盤 [[NSNotificationCenter defaultCenter]

ios開發--CAKeyframeAnimation的詳細用法

edi true nco 創建 rds repeat oval iat ima 簡單的創建一個帶路徑的動畫效果,比較粗糙,不過事先原理都是一樣的, 代碼如下: 1,創建動畫所需的view -(void)creatView { moveView = [UIView

ios開發--CGRect/CGSize/CGPoint/CGVector/CGAffineTransform/UIEdgeInsets/UIOffset和NSString之間的轉換

距離 轉換 nsstring transform ans ins -c cto cnblogs 僅做記錄,一個函數和字符串之間的互相轉換 方法如下: UIKIT_EXTERN NSString *NSStringFromCGPoint(CGPoint point); UI

iOS開發解析XML格式數據

trac pri dsta service ext inset ech dna 們的 XML格式的數據是一種數據的傳輸格式。因為它方便編寫。結構清晰,所以深受程序猿的喜愛,非常多人都喜歡使用XML格式數據傳輸或者作

iOS開發地圖與定位

control 移動 idt line tor mkmapview 什麽 .cn 構建   不管是QQ還是微信的移動client都少不了定位功能,之前在微信demo中沒有加入定位功能,今天就寫個定位的小demo來了解一下定位和地圖的東西。地圖和定位看上去是挺高大

iOS開發使用UICollectionView實現美團App的分類功能【偶現大眾點評App的一個小bug】

sso leg 一個 borde spa line 註意 oba alt 郝萌主傾心貢獻,尊重作者的勞動成果,請勿轉載。假設文章對您有所幫助,歡迎給作者捐贈,支持郝萌主,捐贈數額任意,重在心意^_^ 我要捐贈: 點擊捐贈Cocos2d-X源代碼下載:點我傳送遊戲官方下載

ios開發--UIWebView全屬性

ebe excel 武器 秘密武器 可能 自適應 天氣 2個 ntb 最近的項目當中需要用到html和ios的交互,所以就湊空整理一下,所有webView相關的方法和屬性,如有不對的地方,請大家不吝指教! 代碼如下: 1,創建webview並設置代理 UIWebView

ios開發--系統控件顯示中文

出現 nav ges 進行 code 技術 ava ios urn 雖然一直知道X-code肯定提供有語言本地化的設置地方,但是一直也做個記錄,有些時候的漢化,還是需要使用代碼去控制,鍵盤的右下角、navagiton的return使用代碼修改,調用系統相機時,也是出現英文的