如何進(jìn)行CTF-REVERSE的逆向練習(xí)

如何進(jìn)行CTF-REVERSE的逆向練習(xí),很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

創(chuàng)新互聯(lián)建站專注于荔波企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),商城網(wǎng)站定制開發(fā)。荔波網(wǎng)站建設(shè)公司,為荔波等地區(qū)提供建站服務(wù)。全流程按需策劃,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)

逆向是指通過反匯編和調(diào)試等一些手段及工具,分析計算機(jī)程序的二進(jìn)制可執(zhí)行代碼,從而獲得程序的算法細(xì)節(jié)和實現(xiàn)原理的技術(shù)。不僅如此,逆向技能在信息安全面向的具體工作,如惡意代碼分析、軟件漏洞挖掘、移動安全以及對軟件的破解方面發(fā)揮著巨大的作用。

前面介紹過CTF的web真題,那今天我們從CTF中選擇一個REVERSE題型來講解。

先介紹一下,REVERSE是CTF競賽中的一種常見題目類型,主要考察參賽選手逆向工程相關(guān)的知識,考查形式為通過對一個二進(jìn)制程序(exe、dll或者是elf等)進(jìn)行逆向分析,了解程序內(nèi)部的實現(xiàn)機(jī)制,最終目的可能是得到一個密碼,或者是編寫一個注冊機(jī)用于計算指定用戶名對應(yīng)的注冊碼等。

那我們要怎么才能對一個程序進(jìn)行逆向,一個完整的程序怎么看到它的代碼呢?

當(dāng)然別人也想到過這種問題,所以就出現(xiàn)了幾種幫助逆向的工具。

1.PEiD是一款著名的查殼工具,其功能十分強大,幾乎可以偵測出絕大部分的殼以及程序編譯信息。PEiD支持各種外部插件,同時支持用戶自定義的加殼程序簽名信息。

2.Ollydbg簡稱OD,是一款具有圖形用戶界面的用戶模式調(diào)試器,可以運行于各種主流Windows操作系統(tǒng)下。Ollydbg具有動態(tài)調(diào)試和靜態(tài)分析功能,非常容易上手,對異常的跟蹤處理相當(dāng)靈活,并且許多愛好者為這款調(diào)試器編寫了許多非常棒的插件,這些特性使得其成為Windows操作系統(tǒng)上用戶模式下動態(tài)調(diào)試器的首選。Ollydbg的反匯編引擎十分強大,可以識別數(shù)千個被C和Windows頻繁使用的函數(shù),并可以自動對參數(shù)進(jìn)行注釋。底下是OD一些常用的快捷鍵。

F2 設(shè)置一個斷點(如果斷點已經(jīng)存在,那么斷點將被刪除)

F4 運行到光標(biāo)所在行(運行到光標(biāo)所在行時自動斷下)

F7 單步跟蹤(如果遇到一個call,則跟蹤進(jìn)入)

F8 單步跟蹤(如果遇到一個call,則執(zhí)行完整個call)

F9 繼續(xù)執(zhí)行(運行程序,直到進(jìn)程退出或遇到下一個斷點)

3.IDA是一款交互式反匯編工具,其功能十分強大,支持多操作系統(tǒng)、多處理器下的二進(jìn)制程序的反匯編分析,并且可以和使用者進(jìn)行交互來提升處理效率。IDA支持插件,支持IDC腳本,Hex-Rays Decompiler是IDA一個十分強大的插件,支持將反匯編代碼直接轉(zhuǎn)換為C語言偽代碼,極大的提高了反匯編分析人員的工作效率。這底下是ida的快捷鍵可以幫助我們更加高效的進(jìn)行分析。

空格 在圖形模式和列表視圖模式之間切換反匯編視圖

F5 將反匯編指令還原為偽代碼

x 查看交叉引用

n 對變量名或者函數(shù)名進(jìn)行重命名操作

d 將二進(jìn)制數(shù)據(jù)解釋為字節(jié)/雙字/四字

c 將二進(jìn)制數(shù)據(jù)解釋為代碼

a 將二進(jìn)制數(shù)據(jù)解釋為字符串

實驗步驟

好我們來開始實驗,先進(jìn)入實驗網(wǎng)頁:CTF-REVERSE練習(xí)之逆向初探。

題目描述:

主機(jī)C:\Reverse\1目錄下有一個CrackMe1.exe程序,運行這個程序的時候會提示輸入一個密碼,當(dāng)輸入正確的密碼時,會彈出過關(guān)提示消息框,請對CrackMe1.exe程序進(jìn)行逆向分析和調(diào)試,找到正確的過關(guān)密碼。

我們開始第一步進(jìn)行外部行為分析不管在什么場景下,相信你在剛接觸一個新事物的時候,都會仔細(xì)觀察事物的外部特征,CTF做題也是一樣的,在拿到題目之后可以運行程序,觀察程序都有哪些地方可以輸入數(shù)據(jù),哪些按鈕點擊了會有什么樣的反應(yīng),在操作過程中出現(xiàn)了哪些提示等。

我們通過對CrackMe1.exe程序的觀察,知道程序需要輸入一個密碼,當(dāng)不輸入任何數(shù)據(jù)就點擊按鈕時,提示如下信息:

如何進(jìn)行CTF-REVERSE的逆向練習(xí)

當(dāng)輸入一串測試數(shù)據(jù)時,提示如下信息:

如何進(jìn)行CTF-REVERSE的逆向練習(xí)

這里有彈框還有提示,我們是不是直接去查找這個提示就可以了呢。但是我們在對一個程序進(jìn)行逆向分析之前,除了程序的動態(tài)行為之外,查看程序是否加殼(被何種程序加殼?是什么編譯器編譯的?)也是一個非常關(guān)鍵的步驟。之前提到了PEID,我們就用PEID來查殼我們選中程序后單擊右鍵,在右鍵菜單中選擇“Scan with PEiD”選項,就可以查看加殼信息了。我們這里看到的是Microsoft Visual C++ 6.0,說明CrackMe1.exe沒有加殼,且它是使用VC6編譯的。

如何進(jìn)行CTF-REVERSE的逆向練習(xí)

我們換OD來進(jìn)行動態(tài)調(diào)試,

動態(tài)調(diào)試可以幫助我們了解程序內(nèi)部執(zhí)行邏輯的許多詳細(xì)信息,很多信息只有在程序運行起來之后才會看到,這也是靜態(tài)分析所無法簡單獲取到的。OD是我們在Windows操作系統(tǒng)下動態(tài)調(diào)試器的首選。

操作選擇CrackMe1.exe程序后單擊右鍵,在右鍵菜單中選擇“用OllyICE”打開,就會進(jìn)行OD調(diào)試器的主界面,我們在反匯編指令列表窗口中單擊右鍵,依次選擇“Ultra String Reference”、“Find ASCII”菜單項,如圖所示:

如何進(jìn)行CTF-REVERSE的逆向練習(xí)

之后會彈出字符串列表窗口,這個窗口列出了當(dāng)前進(jìn)程內(nèi)存空間中存在的各種字符串,我們可以查看是否存在有我們感興趣的字符串。比如前面曾經(jīng)提示“密碼錯誤”的提示,那么我們就可以按下Ctrl+F,在彈出的窗口中輸入“密碼錯誤”,然后單擊確定按鈕查找:

如何進(jìn)行CTF-REVERSE的逆向練習(xí)

上面還有一個密碼正確,恭喜過關(guān),這是不是關(guān)鍵呢?我們試一試雙擊這個看看。

雙擊找到字符串的那一行,來到OD的反匯編窗口,就能看到代碼指令中引用這個字符串的地方了。如下圖所示:

如何進(jìn)行CTF-REVERSE的逆向練習(xí)

在這個代碼片段中,我們還看到了一個jnz跳轉(zhuǎn)指令,這個指令是否跳轉(zhuǎn)將決定著彈出成功的提示還是彈出失敗的提示,這樣的跳轉(zhuǎn)也就是所謂的關(guān)鍵跳轉(zhuǎn)。在關(guān)鍵跳轉(zhuǎn)之上的代碼往往就是關(guān)鍵的密碼判斷邏輯,因此我們可以著重分析關(guān)鍵跳轉(zhuǎn)之上的代碼。在關(guān)鍵跳轉(zhuǎn)之上,我們在下面的的位置下一個斷點(鼠標(biāo)單擊這行代碼選中,然后按下F2):

00401456. 55 push ebp

下好斷點之后,按下F9運行程序,隨便輸入一個密碼(比如test)后單擊按鈕,程序就自動在我們的斷點斷下了,接下來按F8開始進(jìn)行單步跟蹤,當(dāng)跟蹤到00401490的時候,我們發(fā)現(xiàn)了我們輸入的密碼test,同時發(fā)現(xiàn)字符串HeeTianLab,如圖所示:

如何進(jìn)行CTF-REVERSE的逆向練習(xí)

仔細(xì)分析上面的代碼,發(fā)現(xiàn)是在從這兩個字符串里面取出字符一個一個進(jìn)行對比,只要有一個字符不一樣,最終都會跳轉(zhuǎn)到提示失敗的地方去。那么可以猜測HeeTianLab就是正確的密碼了,我們運行另一個CrackMe1進(jìn)程,輸入HeeTianLab,彈出成功提示:

如何進(jìn)行CTF-REVERSE的逆向練習(xí)

這就通關(guān)了,接下來我用另外一個神器IDA再來做一遍,有動態(tài)的神器,肯定還有一個靜態(tài)的神器。

除了動態(tài)調(diào)試之外,靜態(tài)分析也是一種很重要的技能。靜態(tài)分析可以幫助我們快速了解程序的代碼執(zhí)行邏輯,尤其是使用IDA的Hex-Rays插件將匯編代碼生成偽代碼的功能,可以極大地提高我們的分析效率。

使用IDA打開CrackMe1.exe程序,IDA會提示選擇文件類型、處理器類型等,通常我們不需要修改這些設(shè)置,直接單擊“OK”按鈕即可。之后IDA會對程序進(jìn)行分析,等待一段時間,待分析結(jié)束之后,在下方的“Output Window”中會提示“The initial autoanalysis has been finished.”,如圖:

如何進(jìn)行CTF-REVERSE的逆向練習(xí)

在IDA的菜單中選擇“View”——“Open subviews”——“Strings”菜單項,就可以彈出字符串列表界面了,如圖所示:

如何進(jìn)行CTF-REVERSE的逆向練習(xí)

IDA的字符串列表界面沒有提供Ctrl+F快捷進(jìn)行查找的功能,所以我們需要手工翻頁來查找我們感興趣的字符串,拖到某一個地方的時候我們看到了提示相關(guān)的字符串:

如何進(jìn)行CTF-REVERSE的逆向練習(xí)

雙擊“密碼錯誤”這個字符串,來定定義該字符串的地方,然后鼠標(biāo)點擊字符串的名字,然后按下x鍵,進(jìn)行交叉引用查找,彈出的對話框如下圖所示:

如何進(jìn)行CTF-REVERSE的逆向練習(xí)

單擊OK按鈕來到引用這個字符串的地方,我們看到了一堆反匯編指令列表,這時候就可以對這里的匯編指令進(jìn)行分析了,如果不想看匯編指令也不要緊,按下F5鍵就可以生成函數(shù)的偽代碼了,我們看到偽代碼中將輸入的密碼和HeeTianLab進(jìn)行了比較:

如何進(jìn)行CTF-REVERSE的逆向練習(xí)

很明顯,HeeTianLab就是我們想要的密碼。

逆向的學(xué)習(xí)是一個需要對計算機(jī)相關(guān)及編程知識系統(tǒng)有較深了解的過程,它是一個不斷漸進(jìn)的階段性技能。想學(xué)好逆向,你必須具備眾多的編程語言儲備、安全相關(guān)知識、對計算機(jī)原理有良好的認(rèn)識和常識。而這些只是逆向的基礎(chǔ)!

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。

網(wǎng)站欄目:如何進(jìn)行CTF-REVERSE的逆向練習(xí)
轉(zhuǎn)載來于:http://muchs.cn/article38/pppgsp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、域名注冊、定制網(wǎng)站App設(shè)計、服務(wù)器托管定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名