逆向工程基本概念
學(xué)習(xí)i春秋課程 > Windows逆向工程技術(shù) > 逆向工程技術(shù)的基本概念
侵權(quán)刪,i春秋課程很好呀,小伙伴萌對(duì)網(wǎng)絡(luò)安全感興趣可以學(xué)習(xí)一下😀
基本概念
軟件工程:通常被認(rèn)為是開(kāi)發(fā)一個(gè)新的系統(tǒng)
正向工程:從用戶的需求,到高層設(shè)計(jì),再到底層設(shè)計(jì),最后實(shí)現(xiàn)的過(guò)程。正向工程解決了功能的實(shí)現(xiàn)問(wèn)題,說(shuō)明了哪些功能需要增加和刪除。
逆向工程:對(duì)系統(tǒng)進(jìn)行分析,從而確定系統(tǒng)的組件,和組件間的相互作用,以其他形式來(lái)表現(xiàn)系統(tǒng),或者在較高層次上表示系統(tǒng)的過(guò)程。
對(duì)一個(gè)系統(tǒng)實(shí)施逆向工程時(shí),不改變系統(tǒng)本身,也不包括在此系統(tǒng)上構(gòu)建新系統(tǒng)。逆向工程解決了程序理解的問(wèn)題;
再工程:通過(guò)逆向工程重構(gòu)和正向工程,對(duì)現(xiàn)有系統(tǒng)審查和改造,將其重組為新的形式,再工程改變了系統(tǒng)的功能和方向(除了正向和逆向的分析,還有重構(gòu)的問(wèn)題,它是在抽象的層次上改變了表示形式和系統(tǒng))。
逆向工程最早出現(xiàn)在對(duì)硬件產(chǎn)品的分析中,指通過(guò)拆解機(jī)器裝置并觀察其運(yùn)行情況來(lái)推導(dǎo)其制造方法、工作原理和原始設(shè)計(jì)的行為。
這個(gè)課程所講授的逆向工程主要指的是閱讀反匯編(將機(jī)器語(yǔ)言代碼轉(zhuǎn)換成匯編語(yǔ)言代碼)后的代碼及使用調(diào)試器分析軟件行為等工作。
軟件逆向分上圖兩部分,首先對(duì)早期程序大范圍分析觀察-》系統(tǒng)及逆向,它幫助我們確定程序的結(jié)構(gòu),可能幫我們找到感興趣的區(qū)域,一旦對(duì)程序有了一個(gè)基礎(chǔ)的認(rèn)識(shí),并確定了感興趣的區(qū)域,就可以進(jìn)入下一個(gè)階段—》》代碼級(jí)逆向技術(shù)
代碼級(jí)逆向技術(shù)為我們提供所選擇塊代碼的詳細(xì)信息,系統(tǒng)級(jí)逆向包括運(yùn)行各種工具,利用不同操作系統(tǒng)服務(wù)獲取信息,檢查程序可執(zhí)行文件,跟蹤程序輸入輸出……這些信息大多數(shù)來(lái)自操作系統(tǒng)(一個(gè)程序與外界的任何交互必須來(lái)自操作系統(tǒng)=所以逆向工作者必須了解操作系統(tǒng))
在逆向過(guò)程中,通過(guò)OS可以獲取所研究程序的大量信息
代碼級(jí)逆向是一個(gè)復(fù)雜的過(guò)程,它是從程序二進(jìn)制代碼中提取實(shí)際理念和算法,要求逆向工程師不但要掌握逆向技術(shù),而且還要對(duì)軟件開(kāi)發(fā)、CPU、OS有深入的了解,軟件的復(fù)雜度深不可測(cè),即使能夠得到編寫良好,文檔齊全的源代碼,人們理解起來(lái)也是很困難的,破解構(gòu)成程序所使用的指令序列更是難上加難。
代碼級(jí)逆向從非常低層次觀察代碼,我們會(huì)看到運(yùn)轉(zhuǎn)軟件所有微小細(xì)節(jié),這些細(xì)節(jié)大多由編譯器自動(dòng)生成,理解這些細(xì)節(jié)如何與程序及其功能連接起來(lái),成為一件非常困難的事情
從高級(jí)語(yǔ)言程序到目標(biāo)代碼,需要經(jīng)過(guò)編譯、鏈接,工作過(guò)程大致為:
編譯和反編譯不一定要生成匯編代碼,一般生成某種設(shè)計(jì)好的中間語(yǔ)言。但在反編譯的二進(jìn)制解碼過(guò)程中,首先會(huì)生成一種類匯編或匯編代碼,因此二進(jìn)制解碼也可稱為反匯編,并且反編譯的過(guò)程中中間代碼也有很多級(jí)別,類匯編或匯編代碼只是低級(jí)中間語(yǔ)言。
軟件工程應(yīng)用
實(shí)際工作重要應(yīng)用–反匯編
代碼恢復(fù)理解
分析有價(jià)值的二進(jìn)制程序,獲取并理解其(關(guān)鍵)功能結(jié)構(gòu),提高自己的技術(shù)水平,擴(kuò)展學(xué)習(xí)獲取技術(shù)的渠道,擺脫自身研究的不足。(可能有些時(shí)候還需要脫殼方面的技術(shù)
)
算法的識(shí)別
利用(密碼)算法在匯編級(jí)別的特征,進(jìn)行相關(guān)的算法識(shí)別;當(dāng)然也有在抽象語(yǔ)言級(jí)別上進(jìn)行的(現(xiàn)階段研究不太成熟,非主要手段)。
軟件破解、惡意代碼分析
通過(guò)動(dòng)態(tài)跟蹤分析惡意軟件的執(zhí)行過(guò)程,收集觀查惡意軟件的行為,為編寫惡意代碼查殺工具提供思路,甚至進(jìn)行取證提供依據(jù)。
漏洞挖掘和利用
對(duì)于操作系統(tǒng)和應(yīng)用軟件,漏洞的挖掘和利用,是主動(dòng)攻擊的重要手段,一旦成功效果明顯應(yīng)用起來(lái)也比較廣泛,難度和工作量較大,現(xiàn)階段的一般研究方法是在反匯編分析的基礎(chǔ)上,結(jié)合動(dòng)態(tài)跟蹤、調(diào)試技術(shù)來(lái)進(jìn)行。
Rootkit深入
Rootkit(原意是根權(quán)限工具,而實(shí)際中常指使用了Rootkit技術(shù)的病毒、木馬,他與傳統(tǒng)木馬(R3)的不同在于:通過(guò)加載一個(gè)驅(qū)動(dòng)或者其它手段,使部分代碼或者全部代碼都在內(nèi)核(RO)中進(jìn)行) VS HIPS(主機(jī)入侵檢測(cè)):勝負(fù)取決于誰(shuí)做得更底層,誰(shuí)知道更多沒(méi)有公開(kāi)的底層內(nèi)容,這需要在反匯編的基礎(chǔ)上進(jìn)行內(nèi)核的調(diào)試,探索底層未知的部分,網(wǎng)上發(fā)表的都是過(guò)時(shí)的或者不是非常重要的"點(diǎn)撥"。
軟件逆向過(guò)程
從具體目標(biāo)代碼到高級(jí)語(yǔ)言程序的反過(guò)程
軟件逆向分析發(fā)展現(xiàn)狀
根據(jù)應(yīng)用用途大致分為反匯編和反編譯兩個(gè)發(fā)展方向
反匯編是將二進(jìn)制指令翻譯成匯編代碼
反編譯是將其翻譯成高級(jí)語(yǔ)言的代碼(比如C#)
反匯編工具
IDA
全名(IDA Pro Disassembler and Debugger),DataRescue公司的強(qiáng)大專業(yè)反匯編調(diào)試軟件;最好的靜態(tài)反匯編工具,針對(duì)80X86架構(gòu)作了許多的優(yōu)化和額外的識(shí)別分析(現(xiàn)今分析最為透徹的產(chǎn)品),當(dāng)然也支持其它架構(gòu)的處理器,另外也支持跟蹤調(diào)試。
強(qiáng)大的功能擴(kuò)展
Processor:擴(kuò)展處理器支持
Plug-in:插件IDA功能擴(kuò)展
Loader:支持不同的可執(zhí)行文件支持
Debugger:不同平臺(tái)和(遠(yuǎn)程)調(diào)試的支持
IDA在靜態(tài)密碼算法識(shí)別有很廣泛應(yīng)用,特別是嵌入式系統(tǒng)的非X86結(jié)構(gòu)
這個(gè)課程在靜態(tài)調(diào)試技術(shù)具體講解此軟件
OllyDbg
32位Windows系統(tǒng)環(huán)境下的二進(jìn)制文件分析調(diào)試工具,其重點(diǎn)在于動(dòng)態(tài)跟蹤分析二進(jìn)制代碼,但由于這些操作都是在目標(biāo)代碼進(jìn)行反匯編后進(jìn)行,因此也常被作為一款反匯編工具使用。
這個(gè)課程在動(dòng)態(tài)調(diào)試技術(shù)具體講解此軟件
C32Asm
國(guó)產(chǎn)的針對(duì)Windows平臺(tái)下PE格式文件的優(yōu)秀反匯編器,其提供快速的靜態(tài)反匯編和16進(jìn)制文件編輯功能,另外還有一些便利的內(nèi)存操作和修改功能。
IDA全面且強(qiáng)大,C32系統(tǒng)開(kāi)銷小,比較輕快
反編譯工具
dcc/UQBT/Boomerang
dcc:Cristina Cifuentes在澳大利亞昆士蘭大學(xué)博士論文中的反編譯原型系統(tǒng),作為從DOS到C反編譯EXE文件的先驅(qū)代表,主要通過(guò)傳統(tǒng)編譯優(yōu)化技術(shù)和圖論來(lái)執(zhí)行相關(guān)分析操作1994年停止發(fā)展更新,有許多的局限,只是概念上的證明程序。
UQBT:主要作者Cristina Cifuentes,其作為一個(gè)通用的二進(jìn)制翻譯框架,輸入的二進(jìn)制代碼通過(guò)逆向分析產(chǎn)生高級(jí)的C代碼,再通過(guò)普通的C編譯器編譯和優(yōu)化,最終生成目標(biāo)平臺(tái)上對(duì)應(yīng)代碼。UQBT目標(biāo)識(shí)二進(jìn)制翻譯,但其框架中前端技術(shù)可供逆向分析借鑒使用。
Boomerang:主旨為通過(guò)開(kāi)源社區(qū)發(fā)展一個(gè)通用的反編譯器。其重用了dcc和UQBT中的相關(guān)技術(shù),并成為新代碼逆向研究的主題,不過(guò)其也存在不足。
反編譯
常用工具Hex-rays,主要用于局部函數(shù)的反編譯,便于理解函數(shù)。
其它應(yīng)用
內(nèi)核調(diào)試
深入底層研究的重要必備手段,也是之后技術(shù)突破所必需的。現(xiàn)階段內(nèi)核調(diào)試都是用Windbg進(jìn)行聯(lián)機(jī)調(diào)試。
漏洞挖掘利用
需要對(duì)目標(biāo)代碼進(jìn)行動(dòng)態(tài)的跟蹤調(diào)試。
二者都是在反匯編的基礎(chǔ)上進(jìn)行-反匯編是前提和基礎(chǔ)
總結(jié)
- 上一篇: c++学习书籍推荐《超越C++标准库:B
- 下一篇: 110-简单类型之整数类型和小数类型