iOS開發之逆向工程

iOS_小賢發表於2019-04-09

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

逆向工程的目的

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

(2)學術/學習目的。

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

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

逆向工程的作用是什麼

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

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

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

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

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

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

逆向工程的分析工具

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

iOS開發之逆向工程

砸殼檢視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。

iOS開發之逆向工程

3.TARGETS中設定命令

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

iOS開發之逆向工程

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

iOS開發之逆向工程

iOS開發之逆向工程
再次執行,成功如下

iOS開發之逆向工程

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

iOS開發之逆向工程

附上整個操作的GIF

upload-images.jianshu.io/upload_imag…

iOS 砸殼匯出標頭檔案

砸殼 匯出標頭檔案

www.jianshu.com/p/a4373b5fe…

安裝class-dump

www.cnblogs.com/chars/p/531…

砸殼步驟:

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

1:ssh root@10.10.245.208 (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

反編譯

1.Hopper簡介

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)反編譯,生成虛擬碼

2.IDA Pro簡介

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

IDA Pro權威指南(第2版)

網路介面分析

Charles簡介

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命令的指令碼檔案,來達到操作裝置上任何程式的

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

iOS安全攻防(二十)動態除錯利器---gdb基礎篇

iOS的應用程式安全(22) - 使用GDB進行執行時分析和操作

iOS的逆向工程讀書筆記

如何防止被反編譯

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

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

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

TARGETS中設定命令

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

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

相關文章