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