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)鍵就是工具的使用,工欲善其事,必先利其器。

工具分類工具名稱

越獄工具盤古越獄

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

砸殼工具dumpdecrypted,離合器

查看頭文件工具類轉(zhuǎn)儲(chǔ)

反匯編工具Hopper,IDA Pro

調(diào)試器Cycript,gdb

UI分析工具揭示

網(wǎng)絡(luò)分析工具查爾斯

第一部分砸殼查看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 filesfromencrypted iPhone applicationsfrommemory to disk.This tool is necessaryforsecurity researchers to be able to look under the hoodofencryption.

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

類轉(zhuǎn)儲(chǔ)代碼

Thisisa command-line utilityforexamining the Objective-C runtime information storedinMach-O files.It generates declarationsforthe classes, categoriesandprotocols. Thisisthe same information provided by using ‘otool -ov’,but presentedasnormal Objective-C declarations, so itismuch more compactandreadable.

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

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

步驟

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

Mac-mini-Damon:~ damon$ ssh root@192.168.2.108root@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)程,并且找出正被使用的類信息,例如view controllers,內(nèi)部和第3方庫(kù),甚至程序的delegate的名稱。2.對(duì)于一個(gè)特定的類,例如View Controller, App delegate或者任何其他的類,我們能夠得到所有被使用的方法名稱。3.我們能夠得到所有實(shí)例變量的名稱和在程序運(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-masterMac-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.cMac-mini-Damon:dumpdecrypted-master damon$ lsMakefile? ? ? ? dumpdecrypted.c? ? dumpdecrypted.oREADME? ? ? ? ? dumpdecrypted.dylibMac-mini-Damon:dumpdecrypted-master damon$

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

iPhone4:~ root# ps -e PID TTY? ? ? ? ? TIMECMD1556??0:00.10/usr/libexec/afc2d -S -L -d /1564??0:03.07/usr/libexec/deleted --idleExit1566??0:00.15/System/Library/PrivateFrameworks/GeoServices.framework/geod1568??0:00.36/usr/libexec/mobileassetd1570??0:00.63/System/Library/Frameworks/AssetsLibrary.framework/Support/assetsd1612??0:00.37sshd: root@ttys0001622??0:06.20/var/mobile/Applications/B1215D4A-24B7-480F-B91D-8F5386B0211A/QQ.app/QQ1623??0:00.10/System/Library/Frameworks/UIKit.framework/Support/pasteboardd1613ttys0000:00.05-sh1628ttys0000:00.01ps -eiPhone4:~ root#

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

四。使用Cycript找出反compile-APP的文件目錄路徑

iPhone4:~ root# cycript -p QQcy# [[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/就是我們要找的文件目錄路徑

五。將dumpdecrypted_7.dylib拷貝產(chǎn)品到文件目錄下,此處是使用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/QQmach-o decryption dumperDISCLAIMER:This tool is only meantforsecurity research purposes,notforapplication crackers.[+] detected32bit ARM binaryinmemory.[+] offset to cryptidfound:@0x4a4c(from0x4000) = a4c[+] Found encrypted data at address00004000of length46284800bytes - type1.[+] Opening /private/var/mobile/Applications/B1215D4A-24B7-480F-B91D-8F5386B0211A/QQ.app/QQforreading.[+] Reading header[+] Detecting header type[+] Executable is a FAT image - searchingforright architecture[+] Correct arch is at offset16384inthe file[+] Opening QQ.decryptedforwriting.[+] Copying thenotencrypted start of the file[+] Dumping the decrypted data into the file[+] Copying thenotencrypted remainder of the file[+] Setting the LC_ENCRYPTION_INFO->cryptid to0at offset4a4c[+] 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.datConfigStorage/? FileTransferTemp/? MyFolder/? ? ? QQ.ini? ? ? ? QZoneImageThumb/? ? Video/? ? ? contents/? ? ? ? ? ? tbmg.dataroot#

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

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

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

Mac-mini-Damon:~ damon$ cd /Users/damon/Desktop/testMac-mini-Damon:test damon$class-dump--archarmv7QQ.decrypted>QQ.mMac-mini-Damon:test damon$

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

1)分析從蘋果商店下載的IPA包

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

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

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

第二部分分析APP UI

顯示簡(jiǎn)介

Reveal能夠在運(yùn)行時(shí)調(diào)試和修改iOS應(yīng)用程序。它能連接到應(yīng)用程序,并允許開發(fā)者編輯各種用戶界面參數(shù),這反過來(lái)會(huì)立即反應(yīng)在程序的UI上。就像用FireBug調(diào)試HTML頁(yè)面一樣,在不需要重寫代碼、重新構(gòu)建和重新部署應(yīng)用程序的情況下就能夠調(diào)試和修改iOS用戶界面。

顯示查看任意應(yīng)用程序的高級(jí)技巧介紹了如何在越獄設(shè)備上查看任意應(yīng)用程序的技巧:

1)iOS設(shè)備需要越獄,iOS6以上2)安裝Reveal,越獄設(shè)備與安裝Reveal的Mac在同一wifi內(nèi)。3)點(diǎn)擊菜單Help / Show Reveal LibraryinFinder,獲取libReveal.dylib4)將libReveal.dylib上傳到設(shè)備的/Library/MobileSubstrate/DynamicLibraries5)編輯并上傳一個(gè)libReveal.plist,格式和/Library/MobileSubstrate/DynamicLibraries下面的其他plist類似,其中的filter的bundle寫要查看的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)可以生成代碼塊的控制流圖CFG3)可以通過Python腳本來(lái)調(diào)用Hopper的其他一些功能,使用更加靈活4)在MAC上還可以通過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ò)接口分析

查爾斯簡(jiǎn)介

Charles是Mac下常用的對(duì)網(wǎng)絡(luò)流量進(jìn)行分析的工具,類似于Windows下的Fiddler。在開發(fā)iOS程序的時(shí)候,往往需要調(diào)試客戶端和服務(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ān)注的請(qǐng)求。菜單Proxy中的Record Setting可以對(duì)此進(jìn)行設(shè)置

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

gdb調(diào)試命令已經(jīng)集成在Xcode中去了用于調(diào)試App程序但是直接在硬件設(shè)備上執(zhí)行時(shí),可以獲得更多的功能可以調(diào)試設(shè)備上所有的進(jìn)程快速分離和重新附著到某個(gè)進(jìn)程上沒有桌面形式的操作系統(tǒng)上進(jìn)行開發(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的逆向工程讀書筆記

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

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

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

逆向工程參考文章

iOS逆向 -? dumpdecrypted工具砸殼

iOS的安全 - 使用Cycript進(jìn)行運(yùn)行時(shí)分析

dumpdecrypted砸殼

用dumpdecrypted給應(yīng)用砸殼

用dumpdecrypted給應(yīng)用砸殼

IOS逆向工程之砸殼

iOS的逆向工程-dumpdecrypted砸殼

手把手教你反編譯別人的應(yīng)用

iOS使用Class-dump分析App內(nèi)部實(shí)現(xiàn)

Objective-C Class-dump安裝和使用方法

使用類轉(zhuǎn)儲(chǔ)-Z分析支付寶應(yīng)用

IOS安全 - 使用類轉(zhuǎn)儲(chǔ)-Z導(dǎo)出IOS應(yīng)用類信息

iOS APP安全雜談

iOS APP安全雜談之二

iOS APP安全雜談之三

iOS URL Scheme劫持 - 在未越獄的iPhone 6上盜取支付寶和微信支付的帳號(hào)密碼

顯示真機(jī)查看任意APP

使用顯示調(diào)試自己和他人的應(yīng)用

分析微信來(lái)優(yōu)化自己的應(yīng)用

#微信搶紅包#源碼直接分享

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 逆向工程的目的 1)分析競(jìng)品的最新研究或者產(chǎn)品原型(包括所用的技術(shù),所使用的框架) 2)學(xué)術(shù)/學(xué)習(xí)目的。 3)破解...
    零度_不結(jié)冰閱讀 798評(píng)論 0 2
  • 逆向工程的目的 逆向工程的分析工具 進(jìn)行iOS逆向工程的一個(gè)關(guān)鍵就是工具的使用,工欲善其事,必先利其器。 第一部分...
    藍(lán)月空谷閱讀 29,069評(píng)論 14 148
  • iOS逆向工程需要用到越獄手機(jī), 需要注意的是9.2以下(不含9.2)的系統(tǒng)均可通過pp越獄助手進(jìn)行越獄, 而9....
    WillyGeek閱讀 7,461評(píng)論 6 19
  • 1.砸殼前的準(zhǔn)備 一臺(tái)越獄iphone??,根據(jù)以往經(jīng)驗(yàn),測(cè)試用的手機(jī)永遠(yuǎn)不要緊跟潮流升級(jí)系統(tǒng),在越獄手機(jī)中打開Cy...
    I_m趙昊閱讀 1,534評(píng)論 4 10
  • 過程 若想換得臺(tái)上三分鐘的精彩,付出的則必須是臺(tái)下十年功的努力刻苦。簡(jiǎn)單的成功,背后隱藏著神秘而偉大的是過程的復(fù)雜...
    豈曰無(wú)衣_83d9閱讀 257評(píng)論 0 0

友情鏈接更多精彩內(nèi)容