iOS逆向工程

逆向工程的目的

1)分析競(jìng)品的最新研究或者產(chǎn)品原型(包括所用的技術(shù),所使用的框架)

2)學(xué)術(shù)/學(xué)習(xí)目的。

3)破解應(yīng)用的使用權(quán)限

4)識(shí)別競(jìng)品潛在的侵權(quán)行為

逆向工程的分析工具

進(jìn)行iOS逆向工程的一個(gè)關(guān)鍵就是工具的使用,工欲善其事,必先利其器。

工具分類(lèi) 工具名稱(chēng)

越獄工具 盤(pán)古越獄

查看文件工具 PP助手, iExplorer, iFunbox, iTool

砸殼工具 dumpdecrypted, Clutch

查看頭文件工具 class-dump

反匯編工具 Hopper, IDA Pro

調(diào)試器 Cycript, gdb

UI分析工具 Reveal

網(wǎng)絡(luò)分析工具 Charles

第一部分 砸殼查看APP頭文件

工具

一.App Store上的應(yīng)用都使用了FairPlay DRM數(shù)字版權(quán)加密保護(hù)技術(shù)。我們要對(duì)文件進(jìn)行反匯編,而IPA都是加密的,哪怎么辦呢?所以在逆向之前我們需要先對(duì)應(yīng)用進(jìn)行砸殼。這里我們使用的是 dumpdecrypted。(還可以使用Clutch,這里我們就不講Clutch了)

dumpdecrypted 代碼

Dumps decrypted mach-o files from encrypted iPhone applications from memory to disk.

This tool is necessary for security researchers to be able to look under the hood of encryption.

二.class-dump是用于解析Mach-O文件中存儲(chǔ)的OC運(yùn)行時(shí)信息的。他能生成類(lèi)的聲明、分類(lèi)、協(xié)議。和otool -ov類(lèi)似,但是由于class-dump的結(jié)果是以O(shè)C代碼展示的,所以有很強(qiáng)的可讀性。

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.

三.一臺(tái)越獄手機(jī)

iOS為了保證安全性,所有的應(yīng)用都是在沙盒中運(yùn)行。所以要想完成逆向操作,我們需要更高級(jí)的權(quán)限。沒(méi)有越獄設(shè)備那就無(wú)法展開(kāi)學(xué)習(xí)和研究工作。

步驟

一.安裝好 dumpdecrypted和 class-dump 以后,在越獄機(jī)上Cydia上安裝 openSSH,通過(guò)MAC終端控制手機(jī),openSSH密碼是alpine(手機(jī)和電腦需要在同一網(wǎng)段,然后點(diǎn)開(kāi)設(shè)置查看當(dāng)前手機(jī)分配的ip地址)

Mac-mini-Damon:~ damon$ ssh root@192.168.2.108

root@192.168.2.108's password:

iPhone4:~ root#

二.在越獄機(jī)上Cydia上安裝 Cycript

Cycript是一個(gè)理解Objective-C語(yǔ)法的javascript解釋器,這意味著我們能夠在一個(gè)命令中用Objective-C或者javascript,

甚至2者兼用。它能夠掛鉤正在運(yùn)行的進(jìn)程,能夠在運(yùn)行時(shí)修改應(yīng)用的很多東西。使用Cycript有如下好處:

1.我們能夠掛鉤正在運(yùn)行的進(jìn)程,并且找出正被使用的類(lèi)信息,例如view controllers,內(nèi)部和第3方庫(kù),甚至程序的delegate的名稱(chēng)。

2.對(duì)于一個(gè)特定的類(lèi),例如View Controller, App delegate或者任何其他的類(lèi),我們能夠得到所有被使用的方法名稱(chēng)。

3.我們能夠得到所有實(shí)例變量的名稱(chēng)和在程序運(yùn)行的任意時(shí)刻實(shí)例變量的值。

4.我們能夠在運(yùn)行時(shí)修改實(shí)例變量的值。

5.我們能夠執(zhí)行Method Swizzling,例如替換一個(gè)特定方法的實(shí)現(xiàn)。

6.我們可以在運(yùn)行時(shí)調(diào)用任意方法,即使這個(gè)方法目前并不在應(yīng)用的實(shí)際代碼當(dāng)中。

Mac-mini-Damon:dumpdecrypted-master damon$ cd /Users/damon/Desktop/dumpdecrypted-master

Mac-mini-Damon:dumpdecrypted-master damon$ make

`xcrun --sdk iphoneos --find gcc` -Os? -Wimplicit -isysroot `xcrun --sdk iphoneos --show-sdk-path` -F`xcrun --sdk iphoneos --show-sdk-path`/System/Library/Frameworks -F`xcrun --sdk iphoneos --show-sdk-path`/System/Library/PrivateFrameworks -arch armv7 -arch armv7s -arch arm64 -c -o dumpdecrypted.o dumpdecrypted.c

Mac-mini-Damon:dumpdecrypted-master damon$ ls

Makefile? ? ? ? dumpdecrypted.c? ? dumpdecrypted.o

README? ? ? ? ? dumpdecrypted.dylib

Mac-mini-Damon:dumpdecrypted-master damon$

三.找出要反編譯APP的執(zhí)行文件目錄,為了避免干擾,最好殺掉其他進(jìn)程,只打開(kāi)反編譯APP,使用ps -e命令得到路徑

iPhone4:~ root# ps -e

PID TTY? ? ? ? ? TIME CMD

1556 ??? ? ? ? 0:00.10 /usr/libexec/afc2d -S -L -d /

1564 ??? ? ? ? 0:03.07 /usr/libexec/deleted --idleExit

1566 ??? ? ? ? 0:00.15 /System/Library/PrivateFrameworks/GeoServices.framework/geod

1568 ??? ? ? ? 0:00.36 /usr/libexec/mobileassetd

1570 ??? ? ? ? 0:00.63 /System/Library/Frameworks/AssetsLibrary.framework/Support/assetsd

1612 ??? ? ? ? 0:00.37 sshd: root@ttys000

1622 ??? ? ? ? 0:06.20 /var/mobile/Applications/B1215D4A-24B7-480F-B91D-8F5386B0211A/QQ.app/QQ

1623 ??? ? ? ? 0:00.10 /System/Library/Frameworks/UIKit.framework/Support/pasteboardd

1613 ttys000? ? 0:00.05 -sh

1628 ttys000? ? 0:00.01 ps -e

iPhone4:~ root#

其中的 /var/mobile/Applications/B1215D4A-24B7-480F-B91D-8F5386B0211A/QQ.app/QQ 就是我們要找的

四.使用Cycript找出反編譯APP的Documents目錄路徑

iPhone4:~ root# cycript -p QQ

cy# [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0]

#"file:///var/mobile/Applications/B1215D4A-24B7-480F-B91D-8F5386B0211A/Documents/"

cy#

其中的 /var/mobile/Applications/B1215D4A-24B7-480F-B91D-8F5386B0211A/Documents/ 就是我們要找的Documents目錄路徑

五.將dumpdecrypted_7.dylib拷貝到Documents目錄下,此處是使用scp方式,也可以使用iFunBox或者PP助手進(jìn)行文件操作(這里的dumpdecrypted_7.dylib是別人已經(jīng)生成好的)地址

Mac-mini-Damon:~ damon$ scp /Users/damon/Desktop/dumpde/dumpdecrypted_7.dylib root@192.168.2.108:/var/mobile/Applications/B1215D4A-24B7-480F-B91D-8F5386B0211A/Documents/

root@192.168.2.108's password:

dumpdecrypted_7.dylib? ? ? ? ? ? ? ? ? ? ? ? 100%? 81KB? 81.0KB/s? 00:00

Mac-mini-Damon:~ damon$

六.然后就是使用dumpdecrypted砸殼

iPhone4:~ root# cd /var/mobile/Applications/B1215D4A-24B7-480F-B91D-8F5386B0211A/Documents/

iPhone4:/var/mobile/Applications/B1215D4A-24B7-480F-B91D-8F5386B0211A/Documents root# DYLD_INSERT_LIBRARIES=dumpdecrypted_7.dylib /var/mobile/Applications/B1215D4A-24B7-480F-B91D-8F5386B0211A/QQ.app/QQ

mach-o decryption dumper

DISCLAIMER: This tool is only meant for security research purposes, not for application crackers.

[+] detected 32bit ARM binary in memory.

[+] offset to cryptid found: @0x4a4c(from 0x4000) = a4c

[+] Found encrypted data at address 00004000 of length 46284800 bytes - type 1.

[+] Opening /private/var/mobile/Applications/B1215D4A-24B7-480F-B91D-8F5386B0211A/QQ.app/QQ for reading.

[+] Reading header

[+] Detecting header type

[+] Executable is a FAT image - searching for right architecture

[+] Correct arch is at offset 16384 in the file

[+] Opening QQ.decrypted for writing.

[+] Copying the not encrypted start of the file

[+] Dumping the decrypted data into the file

[+] Copying the not encrypted remainder of the file

[+] Setting the LC_ENCRYPTION_INFO->cryptid to 0 at offset 4a4c

[+] Closing original file

[+] Closing dump file

iPhone4:~ root# ls

(null)/? ? ? ? CustomFace/? ? ? ? Image/? ? ? ? Other/? ? ? ? QQAppSetting.plist? TRctBundle/? app.m? ? ? ? ? ? ? ? dumpdecrypted_7.dylib? wallet/

AVEngine.log? ? Doc/? ? ? ? ? ? ? LuaPluginDir/? QMusicSdk/? ? QQFlow.ini? ? ? ? ? Theme/? ? ? client_wording.json? giftInfo/? ? ? ? ? ? ? webappCache2/

Audio/? ? ? ? ? FileRecv/? ? ? ? ? MQZONEv1/? ? ? QQ.decrypted? QQHeadThumb/? ? ? ? ThemeInfo/? content/? ? ? ? ? ? patchScripts/? ? ? ? ? wupseq.dat

ConfigStorage/? FileTransferTemp/? MyFolder/? ? ? QQ.ini? ? ? ? QZoneImageThumb/? ? Video/? ? ? contents/? ? ? ? ? ? tbmg.data

root#

其中的 QQ.decrypted 就是我們要的破解文件

七.使用class-dump將文件解析

將QQ.decrypted拷貝到Mac桌面文件夾,使用class-dump進(jìn)行解析

Mac-mini-Damon:~ damon$ cd /Users/damon/Desktop/test

Mac-mini-Damon:test damon$ class-dump --arch armv7 QQ.decrypted > QQ.m

Mac-mini-Damon:test damon$

得到的QQ.m文件就是我們需要的頭文件,class-dump --arch armv7 QQ.decrypted > QQ.m,因?yàn)槲沂怯玫氖謾C(jī)是iPhone4做的(沒(méi)辦法,只能用公司不用的4進(jìn)行越獄),所以使用 armv7,其他型號(hào)使用相對(duì)應(yīng)的 4(armv7),4s(armv7),5(armv7),5s(arm64),6(arm64),6s(arm64)

1)分析從AppStore下載的IPA包

class-dump --arch armv7 QQ.decrypted > QQ.m

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

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

第二部分 分析APP UI

Reveal簡(jiǎn)介

Reveal能夠在運(yùn)行時(shí)調(diào)試和修改iOS應(yīng)用程序。它能連接到應(yīng)用程序,并允許開(kāi)發(fā)者編輯各種用戶(hù)界面參數(shù),

這反過(guò)來(lái)會(huì)立即反應(yīng)在程序的UI上。就像用FireBug調(diào)試HTML頁(yè)面一樣,在不需要重寫(xiě)代碼、

重新構(gòu)建和重新部署應(yīng)用程序的情況下就能夠調(diào)試和修改iOS用戶(hù)界面。

Reveal查看任意app的高級(jí)技巧介紹了如何在越獄設(shè)備上查看任意app的技巧:

1)iOS設(shè)備需要越獄,iOS6以上

2)安裝Reveal,越獄設(shè)備與安裝Reveal的Mac在同一wifi內(nèi)。

3)點(diǎn)擊菜單Help / Show Reveal Library in Finder,獲取libReveal.dylib

4)將libReveal.dylib上傳到設(shè)備的/Library/MobileSubstrate/DynamicLibraries

5)編輯并上傳一個(gè)libReveal.plist,格式和/Library/MobileSubstrate/DynamicLibraries下面的其他plist類(lèi)似,其中的filter的bundle寫(xiě)要查看的iOS App的bundle Id。

格式如下:

{ Filter = { Bundles = ( "你要查看的app的bundle Id" ); }; }

6)重啟iOS設(shè)備

第三部分 反編譯

一:Hopper簡(jiǎn)介

Hopper是一款運(yùn)行在Mac、Windows和Linux下的調(diào)試(os x only)、反匯編和反編譯的交互式工具。

可以對(duì)32、64位的MAC程序、Windows程序和IOS程序(arm)進(jìn)行調(diào)試、反編譯等。

功能

1)能夠分析出函數(shù)的代碼塊、變量等

2)可以生成代碼塊的控制流圖CFG

3)可以通過(guò)Python腳本來(lái)調(diào)用Hopper的其他一些功能,使用更加靈活

4)在MAC上還可以通過(guò)GDP動(dòng)態(tài)調(diào)試分析

5)對(duì)Objective C的極佳的支持——能夠解析出Selector、字符串和發(fā)送的消息

6)反編譯,生成偽代碼

7)分析快速,且占用資源少

二:IDA Pro簡(jiǎn)介

IDA Pro是一個(gè)非常強(qiáng)大的反匯編和調(diào)試工具,支持Windows,Linux, Mac OS X平臺(tái)

IDA Pro權(quán)威指南(第2版)

第四部分 網(wǎng)絡(luò)接口分析

Charles簡(jiǎn)介

Charles是Mac下常用的對(duì)網(wǎng)絡(luò)流量進(jìn)行分析的工具,類(lèi)似于Windows下的Fiddler。

在開(kāi)發(fā)iOS程序的時(shí)候,往往需要調(diào)試客戶(hù)端和服務(wù)器的API接口,這個(gè)時(shí)候就可以用Charles,Charles能夠攔截SSL請(qǐng)求、模擬慢速網(wǎng)絡(luò)、

支持修改網(wǎng)絡(luò)請(qǐng)求包并多次發(fā)送、能夠篡改Request和Response等強(qiáng)大的功能。下面介紹安裝和使用方法。

功能

1)攔截SSL請(qǐng)求

2)模擬慢速網(wǎng)絡(luò)

菜單Proxy中的Throttle Setting可以對(duì)此進(jìn)行設(shè)置

3)支持修改網(wǎng)絡(luò)請(qǐng)求包并多次發(fā)送

4)斷點(diǎn)功能

Charles能夠斷到發(fā)送請(qǐng)求前(篡改Request)和請(qǐng)求后(篡改Response)

5)捕獲記錄控制 可以過(guò)濾出關(guān)注的請(qǐng)求。菜單Proxy中的Record Setting可以對(duì)此進(jìn)行設(shè)置

第五部分 使用調(diào)試器hook

gdb調(diào)試命令

已經(jīng)集成在Xcode中去了用于調(diào)試App程序

但是直接在硬件設(shè)備上執(zhí)行時(shí),可以獲得更多的功能

可以調(diào)試設(shè)備上所有的進(jìn)程

快速分離和重新附著到某個(gè)進(jìn)程上

沒(méi)有桌面形式的操作系統(tǒng)上進(jìn)行開(kāi)發(fā)程序時(shí)的調(diào)試

攻擊者可以修改gdb命令的腳本文件,來(lái)達(dá)到操作設(shè)備上任何程序的

運(yùn)行、修改、監(jiān)控設(shè)備上的所有的程序

iOS應(yīng)用程序安全(22)-使用GDB進(jìn)行運(yùn)行時(shí)分析和操作

iOS安全攻防(二十)動(dòng)態(tài)調(diào)試?yán)?--gdb基礎(chǔ)篇

iOS逆向工程讀書(shū)筆記

第六部分 如何防止被反編譯

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

1) 使用c語(yǔ)言實(shí)現(xiàn)關(guān)鍵的代碼邏輯

2)使用宏替換

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,606評(píng)論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,582評(píng)論 3 418
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 176,540評(píng)論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,028評(píng)論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,801評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,223評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,294評(píng)論 3 442
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,442評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,976評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,800評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,996評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,543評(píng)論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,233評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,662評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,926評(píng)論 1 286
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,702評(píng)論 3 392
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,991評(píng)論 2 374

推薦閱讀更多精彩內(nèi)容

  • iOS逆向工程需要用到越獄手機(jī), 需要注意的是9.2以下(不含9.2)的系統(tǒng)均可通過(guò)pp越獄助手進(jìn)行越獄, 而9....
    WillyGeek閱讀 7,266評(píng)論 6 19
  • 逆向工程的目的 逆向工程的分析工具 進(jìn)行iOS逆向工程的一個(gè)關(guān)鍵就是工具的使用,工欲善其事,必先利其器。 第一部分...
    藍(lán)月空谷閱讀 28,779評(píng)論 14 148
  • 1、準(zhǔn)備工作:手機(jī)越獄 使用PP助手在windows環(huán)境下進(jìn)行越獄 給越獄的手機(jī)安裝openSSH,在cydia商...
    NI_Leo閱讀 467評(píng)論 0 2
  • 1.砸殼前的準(zhǔn)備 一臺(tái)越獄iphone??,根據(jù)以往經(jīng)驗(yàn),測(cè)試用的手機(jī)永遠(yuǎn)不要緊跟潮流升級(jí)系統(tǒng),在越獄手機(jī)中打開(kāi)Cy...
    I_m趙昊閱讀 1,287評(píng)論 4 10
  • 胡同,正在消失的影像…
    xnaza閱讀 346評(píng)論 0 0