開(kāi)發(fā)的時(shí)候:
1.明確需求予跌、設(shè)計(jì)稿、交互稿
2.根據(jù)需求善茎、設(shè)計(jì)稿券册、交互稿編寫(xiě)出我們想要的應(yīng)用逆向開(kāi)發(fā):
拿到目標(biāo)應(yīng)用去分析界面組成結(jié)構(gòu)、代碼邏輯、程序的執(zhí)行流程來(lái)了解內(nèi)部的原理烁焙。(從現(xiàn)有產(chǎn)品推導(dǎo)技術(shù)實(shí)現(xiàn)細(xì)節(jié)的過(guò)程)航邢。
在我們打開(kāi)應(yīng)用的時(shí)候可以看到不同的界面和不同的功能,如果我們想要了解某個(gè)功能骄蝇。比如過(guò)網(wǎng)易云音樂(lè)的聲音識(shí)別功能膳殷,那么我們就要用到逆向工程。在逆向工程中九火,首先我們要通過(guò)工具分析赚窃,對(duì)應(yīng)用的界面結(jié)構(gòu)、網(wǎng)絡(luò)請(qǐng)求岔激、文件操作等各個(gè)方面入手勒极,來(lái)尋找線(xiàn)索分析出我們想要的東西。這樣我們就會(huì)得到軟件界面的組成結(jié)構(gòu)虑鼎,可以進(jìn)一步通過(guò)某個(gè)按鈕去獲取響應(yīng)事件函數(shù)辱匿。這個(gè)時(shí)候,我們就要用到靜態(tài)分析炫彩,通過(guò)靜態(tài)分析我們可以針對(duì)某個(gè)響應(yīng)事件函數(shù)匾七,去分析它程序內(nèi)部功能具體實(shí)現(xiàn),調(diào)用了哪些函數(shù)江兢,執(zhí)行流程是怎么樣的昨忆。那么,我們通過(guò)對(duì)不同函數(shù)的分析可以得到應(yīng)用代碼的框架構(gòu)成划址。
通過(guò)靜態(tài)分析扔嵌,我們只能得到應(yīng)用里有哪些函數(shù),函數(shù)里面又執(zhí)行哪些代碼夺颤。但是痢缎,我們想要分析程序運(yùn)行的時(shí)候的代碼執(zhí)行流程以及參數(shù)的傳遞,那么這個(gè)時(shí)候我們就要用到動(dòng)態(tài)分析世澜。通過(guò)動(dòng)態(tài)分析独旷,我們可以對(duì)目標(biāo)程序進(jìn)行debug,打印出它的參數(shù)寥裂,以及一步步調(diào)試他的執(zhí)行流程等等嵌洼。
那么,通過(guò)上面的分析之后封恰,我們對(duì)程序的界面麻养、程序的具體流程有了一定的了解,那么這個(gè)時(shí)候诺舔,我們就可以根據(jù)目標(biāo)程序的功能來(lái)實(shí)現(xiàn)我們自己的一些功能和增強(qiáng)它的一些功能鳖昌,這就是逆向工程的魅力所在备畦。
windows
OllyDbg與Windbg進(jìn)行動(dòng)態(tài)調(diào)試、 IDA進(jìn)行靜態(tài)分析
安卓
通過(guò)ApkTool \ dex2jar 對(duì)apk文件反編譯成dex文件许昨、資源文件對(duì)dex文件轉(zhuǎn)成jar文件懂盐,讓后進(jìn)一步得到jave偽代碼這樣就可以分析出安卓文件的實(shí)現(xiàn)原理和實(shí)現(xiàn)邏輯。
iOS
通過(guò)class-dump得到糕档,目標(biāo)程序的所有類(lèi)和類(lèi)里面的方法莉恼。通過(guò)Reveal可以得到目標(biāo)程序的界面層次和界面的構(gòu)成,我們還可以通過(guò)其它工具來(lái)動(dòng)態(tài)調(diào)試速那、跟蹤目標(biāo)程序俐银,得到我們想要的結(jié)果。
層次:
內(nèi)核驅(qū)動(dòng)層琅坡、硬件層
分析可以得到底層的具體實(shí)現(xiàn)和實(shí)現(xiàn)原理悉患。
設(shè)備框架層
framework里面的具體代碼邏輯,或者說(shuō)我們想要了解我們調(diào)用了某個(gè)api函數(shù)后榆俺,底層實(shí)現(xiàn)了哪些操作。
應(yīng)用層
我們可以對(duì)別人的應(yīng)用進(jìn)行分析,(界面組成結(jié)構(gòu)坞淮、某個(gè)功能茴晋、攔截它的數(shù)據(jù)等)
通過(guò)Reveal可以得到界面結(jié)構(gòu)、界面層次以及界面構(gòu)成回窘。打印界面結(jié)構(gòu)诺擅,通過(guò)界面結(jié)構(gòu),我們可以得到某個(gè)控件的對(duì)象進(jìn)而得倒control對(duì)象啡直,讓后對(duì)control進(jìn)行跟蹤調(diào)試分析得到具體的執(zhí)行函數(shù)烁涌。
通過(guò)snoop-it,得到一個(gè)類(lèi)里面的所有方法酒觅,然后手動(dòng)去調(diào)用它的方法撮执,還可以得到它的文件操作、keychine操作舷丹、網(wǎng)絡(luò)操作以及一些加密函數(shù)操作等等這樣就可以根據(jù)不同層次對(duì)應(yīng)用進(jìn)行分析抒钱。
通過(guò)Hopper,可以把二進(jìn)制的代碼翻譯成匯編代碼颜凯,通過(guò)匯編代碼進(jìn)行分析谋币,可以知道函數(shù)內(nèi)部調(diào)用了哪些函數(shù),以及這些函數(shù)的名稱(chēng)是什么症概。
通過(guò)IDA進(jìn)行分析蕾额,同樣這兩款工具可以轉(zhuǎn)成成高級(jí)語(yǔ)言的偽代碼,通過(guò)偽代碼為們可以很清楚的知道一個(gè)函數(shù)的內(nèi)部調(diào)用可哪些函數(shù)以及它的參數(shù)是什么彼城。
使用lldb附加到手機(jī)上的應(yīng)用诅蝶,讓程序去斷下來(lái)逼友,在我們想要設(shè)置斷點(diǎn)的地方設(shè)置一個(gè)斷點(diǎn),讓程序繼續(xù)運(yùn)行秤涩。當(dāng)程序運(yùn)行到我們的斷點(diǎn)的時(shí)候帜乞,就會(huì)自動(dòng)斷下來(lái),這個(gè)時(shí)候我們就可以打印程序的參數(shù)筐眷,以及在某個(gè)跳轉(zhuǎn)的地方黎烈,判斷程序的執(zhí)行方向,執(zhí)行流程和執(zhí)行邏輯等匀谣。
除了調(diào)試工具照棋,還有其它工具,對(duì)程序的運(yùn)行進(jìn)行動(dòng)態(tài)的跟蹤武翎,打印內(nèi)部函數(shù)的調(diào)用方法以及參數(shù)烈炭。