逆向工程:是一個廣義概念,是指從可運行的程序系統出發,運用解密、反彙編、系統分析、動態調試等多種技術對軟件進行分析,推導出軟件產品的結構、流程、算法、軟件架構、設計模式、運行方法、相關資源及文檔等這一過程。軟件逆向的整個過程統稱爲軟件逆向工程,過程當中所採用的技術統稱爲軟件逆向工程技術。究其義,這是個軟件安全方面的技術。html
逆向工程的目的算法
(1)分析競品的最新研究或者產品原型(包括所用的技術,所使用的框架)設計模式
(2)學術/學習目的。安全
(3)破解應用的使用權限服務器
(4)識別競品潛在的侵權行爲網絡
逆向工程的做用是什麼架構
1.逆向工程並非爲了破解他人的軟件爲目的,在商業領域,有更加劇要的做用,具體包括如下幾個方面。app
2.安全審查:對於iOS 開發者來講,不只僅是完成產品的業務功能,尤爲對大公司,還須要很是重視安全問題。經過逆向工程,及早發現問題,修改問題,避免發佈後到用戶手中引發各類輿情問題,損害公司聲譽。框架
3.分析競品:1.參考競品app的架構設計;2.參考競品app的接口設計;3.關鍵技術的實現細節。ssh
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
upload-images.jianshu.io/upload_imag…
iOS 砸殼導出頭文件
砸殼 導出頭文件
安裝class-dump
砸殼步驟:
開始砸殼前 確保手機設備跟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)、反彙編和反編譯的交互式工具。
能夠對3二、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(選擇這個