CTF實戰(zhàn)24 二進制軟件逆向分析基礎(chǔ)

CTF實戰(zhàn)24 二進制軟件逆向分析基礎(chǔ)

首先,向小姐姐致敬~

然后,拜一下祖師爺~

重要聲明

本培訓(xùn)中提到的技術(shù)僅適用于合法CTF比賽和獲得合法授權(quán)的滲透測試,請勿用于其他非法用途,如有違反,與本文作者無關(guān)。

逆向工程定義

逆向工程(reverse engineering),也稱為反向工程,是一種技術(shù)過程,通過對目標(biāo)產(chǎn)品進行逆向分析和研究,從而推斷出其處理流程、組織結(jié)構(gòu)、功能性能規(guī)格等設(shè)計要素,以制作出功能相近但不完全相同的產(chǎn)品。

逆向工程起源于商業(yè)及軍事領(lǐng)域的硬件分析,其主要目的是在無法輕易獲得必要的生產(chǎn)信息的情況下,直接從成品分析中推導(dǎo)出產(chǎn)品的設(shè)計原理。

雖然逆向工程可能會被誤認為是對知識產(chǎn)權(quán)的嚴(yán)重侵害,但在實際應(yīng)用中,它反而可能保護知識產(chǎn)權(quán)所有者。例如,在集成電路領(lǐng)域,如果懷疑某公司侵犯知識產(chǎn)權(quán),可以使用逆向工程技術(shù)來尋找證據(jù)。

為什么要進行逆向工程呢?原因包括分析惡意代碼、了解軟件的技術(shù)細節(jié)、破解收費軟件(嘿嘿)、加固軟件安全(與滲透測試類似)、漏洞分析等。

逆向工程必備技能

  1. 必須熟練掌握各基礎(chǔ)匯編指令,能夠理解普通的匯編代碼。

首先說一下第一點,這應(yīng)該不需要多解釋吧,逆向工程如果不懂匯編怎么進行逆向分析啊哈哈哈。

比如需要知道基本的計算機中空間和內(nèi)存空間是如何存取數(shù)據(jù)的,EAX、EBX、ECX、EDX、ESI等寄存器的作用。

但這里有一個小問題:怎樣才算熟練掌握各基礎(chǔ)匯編指令呢?

我這里貼一段小小的匯編代碼,如果你能不看下面的解釋,就能明白這段代碼的大概操作,那么恭喜你,你已經(jīng)熟練掌握了基礎(chǔ)的匯編指令。

第三行是將eax所指向的地址上的數(shù)據(jù)取出來,賦給edx,最后將edx的值賦到ecx指向的地址上。

可能不是經(jīng)常做惡意代碼分析的人一看這個代碼就懵了。

  1. 需要會c語言編程,熟練掌握各種結(jié)構(gòu)體的剖析。

現(xiàn)在我們來說說第二點,為什么要熟練使用C語言?剛剛那段匯編代碼,看起來肯定很難理解,我們可以將其轉(zhuǎn)換成C語言,這樣分析起來就容易多了,尤其是在代碼量極大的時候。

將匯編轉(zhuǎn)換成等價的C語言代碼,會節(jié)省我們很多分析時間(不要跟我說有插件)。

如果你能獨立完成匯編到C語言代碼的轉(zhuǎn)換,那么說明第二點你也是合格的了~

比如剛剛那段代碼,我們轉(zhuǎn)換一下看看(我喜歡用linux的C風(fēng)格),這里我就不定義各個變量了。

可能這樣寫出來有些同學(xué)還是一臉懵逼,這和看匯編差不多啊。

但是在某些逆向分析中,出現(xiàn)的結(jié)構(gòu)體等,用匯編分析就是一連串的地址變地址,如果寫成C語言的形式,看上去就清爽多了。

  1. 需要了解基本的Win32編程和Linux編程。

比如惡意代碼調(diào)用了哪個庫,不需要記住每個windows的API,但你要知道哪里去查,比如Windows就是MSDN,如果是Linux,就是man。

當(dāng)然,對于逆向來說,最重要的還是長期堅持不懈的努力和知識的積累。

在逆向的世界里,不管你是Java很6,還是python很6,只要你是第一次接觸逆向的話,都是一樣的起點,除非你C語言很6,啊哈哈哈。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊5 分享