如何進(jìn)行CTF-REVERSE的逆向練習(xí),很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
創(chuàng)新互聯(lián)建站專注于荔波企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),商城網(wǎng)站定制開(kāi)發(fā)。荔波網(wǎng)站建設(shè)公司,為荔波等地區(qū)提供建站服務(wù)。全流程按需策劃,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)
逆向是指通過(guò)反匯編和調(diào)試等一些手段及工具,分析計(jì)算機(jī)程序的二進(jìn)制可執(zhí)行代碼,從而獲得程序的算法細(xì)節(jié)和實(shí)現(xiàn)原理的技術(shù)。不僅如此,逆向技能在信息安全面向的具體工作,如惡意代碼分析、軟件漏洞挖掘、移動(dòng)安全以及對(duì)軟件的破解方面發(fā)揮著巨大的作用。
前面介紹過(guò)CTF的web真題,那今天我們從CTF中選擇一個(gè)REVERSE題型來(lái)講解。
先介紹一下,REVERSE是CTF競(jìng)賽中的一種常見(jiàn)題目類型,主要考察參賽選手逆向工程相關(guān)的知識(shí),考查形式為通過(guò)對(duì)一個(gè)二進(jìn)制程序(exe、dll或者是elf等)進(jìn)行逆向分析,了解程序內(nèi)部的實(shí)現(xiàn)機(jī)制,最終目的可能是得到一個(gè)密碼,或者是編寫(xiě)一個(gè)注冊(cè)機(jī)用于計(jì)算指定用戶名對(duì)應(yīng)的注冊(cè)碼等。
那我們要怎么才能對(duì)一個(gè)程序進(jìn)行逆向,一個(gè)完整的程序怎么看到它的代碼呢?
當(dāng)然別人也想到過(guò)這種問(wèn)題,所以就出現(xiàn)了幾種幫助逆向的工具。
1.PEiD是一款著名的查殼工具,其功能十分強(qiáng)大,幾乎可以偵測(cè)出絕大部分的殼以及程序編譯信息。PEiD支持各種外部插件,同時(shí)支持用戶自定義的加殼程序簽名信息。
2.Ollydbg簡(jiǎn)稱OD,是一款具有圖形用戶界面的用戶模式調(diào)試器,可以運(yùn)行于各種主流Windows操作系統(tǒng)下。Ollydbg具有動(dòng)態(tài)調(diào)試和靜態(tài)分析功能,非常容易上手,對(duì)異常的跟蹤處理相當(dāng)靈活,并且許多愛(ài)好者為這款調(diào)試器編寫(xiě)了許多非常棒的插件,這些特性使得其成為Windows操作系統(tǒng)上用戶模式下動(dòng)態(tài)調(diào)試器的首選。Ollydbg的反匯編引擎十分強(qiáng)大,可以識(shí)別數(shù)千個(gè)被C和Windows頻繁使用的函數(shù),并可以自動(dòng)對(duì)參數(shù)進(jìn)行注釋。底下是OD一些常用的快捷鍵。
F2 設(shè)置一個(gè)斷點(diǎn)(如果斷點(diǎn)已經(jīng)存在,那么斷點(diǎn)將被刪除)
F4 運(yùn)行到光標(biāo)所在行(運(yùn)行到光標(biāo)所在行時(shí)自動(dòng)斷下)
F7 單步跟蹤(如果遇到一個(gè)call,則跟蹤進(jìn)入)
F8 單步跟蹤(如果遇到一個(gè)call,則執(zhí)行完整個(gè)call)
F9 繼續(xù)執(zhí)行(運(yùn)行程序,直到進(jìn)程退出或遇到下一個(gè)斷點(diǎn))
3.IDA是一款交互式反匯編工具,其功能十分強(qiáng)大,支持多操作系統(tǒng)、多處理器下的二進(jìn)制程序的反匯編分析,并且可以和使用者進(jìn)行交互來(lái)提升處理效率。IDA支持插件,支持IDC腳本,Hex-Rays Decompiler是IDA一個(gè)十分強(qiáng)大的插件,支持將反匯編代碼直接轉(zhuǎn)換為C語(yǔ)言偽代碼,極大的提高了反匯編分析人員的工作效率。這底下是ida的快捷鍵可以幫助我們更加高效的進(jìn)行分析。
空格 在圖形模式和列表視圖模式之間切換反匯編視圖
F5 將反匯編指令還原為偽代碼
x 查看交叉引用
n 對(duì)變量名或者函數(shù)名進(jìn)行重命名操作
d 將二進(jìn)制數(shù)據(jù)解釋為字節(jié)/雙字/四字
c 將二進(jìn)制數(shù)據(jù)解釋為代碼
a 將二進(jìn)制數(shù)據(jù)解釋為字符串
好我們來(lái)開(kāi)始實(shí)驗(yàn),先進(jìn)入實(shí)驗(yàn)網(wǎng)頁(yè):CTF-REVERSE練習(xí)之逆向初探。
題目描述:
主機(jī)C:\Reverse\1目錄下有一個(gè)CrackMe1.exe程序,運(yùn)行這個(gè)程序的時(shí)候會(huì)提示輸入一個(gè)密碼,當(dāng)輸入正確的密碼時(shí),會(huì)彈出過(guò)關(guān)提示消息框,請(qǐng)對(duì)CrackMe1.exe程序進(jìn)行逆向分析和調(diào)試,找到正確的過(guò)關(guān)密碼。
我們開(kāi)始第一步進(jìn)行外部行為分析不管在什么場(chǎng)景下,相信你在剛接觸一個(gè)新事物的時(shí)候,都會(huì)仔細(xì)觀察事物的外部特征,CTF做題也是一樣的,在拿到題目之后可以運(yùn)行程序,觀察程序都有哪些地方可以輸入數(shù)據(jù),哪些按鈕點(diǎn)擊了會(huì)有什么樣的反應(yīng),在操作過(guò)程中出現(xiàn)了哪些提示等。
我們通過(guò)對(duì)CrackMe1.exe程序的觀察,知道程序需要輸入一個(gè)密碼,當(dāng)不輸入任何數(shù)據(jù)就點(diǎn)擊按鈕時(shí),提示如下信息:
當(dāng)輸入一串測(cè)試數(shù)據(jù)時(shí),提示如下信息:
這里有彈框還有提示,我們是不是直接去查找這個(gè)提示就可以了呢。但是我們?cè)趯?duì)一個(gè)程序進(jìn)行逆向分析之前,除了程序的動(dòng)態(tài)行為之外,查看程序是否加殼(被何種程序加殼?是什么編譯器編譯的?)也是一個(gè)非常關(guān)鍵的步驟。之前提到了PEID,我們就用PEID來(lái)查殼我們選中程序后單擊右鍵,在右鍵菜單中選擇“Scan with PEiD”選項(xiàng),就可以查看加殼信息了。我們這里看到的是Microsoft Visual C++ 6.0,說(shuō)明CrackMe1.exe沒(méi)有加殼,且它是使用VC6編譯的。
我們換OD來(lái)進(jìn)行動(dòng)態(tài)調(diào)試,
動(dòng)態(tài)調(diào)試可以幫助我們了解程序內(nèi)部執(zhí)行邏輯的許多詳細(xì)信息,很多信息只有在程序運(yùn)行起來(lái)之后才會(huì)看到,這也是靜態(tài)分析所無(wú)法簡(jiǎn)單獲取到的。OD是我們?cè)赪indows操作系統(tǒng)下動(dòng)態(tài)調(diào)試器的首選。
操作選擇CrackMe1.exe程序后單擊右鍵,在右鍵菜單中選擇“用OllyICE”打開(kāi),就會(huì)進(jìn)行OD調(diào)試器的主界面,我們?cè)诜磪R編指令列表窗口中單擊右鍵,依次選擇“Ultra String Reference”、“Find ASCII”菜單項(xiàng),如圖所示:
之后會(huì)彈出字符串列表窗口,這個(gè)窗口列出了當(dāng)前進(jìn)程內(nèi)存空間中存在的各種字符串,我們可以查看是否存在有我們感興趣的字符串。比如前面曾經(jīng)提示“密碼錯(cuò)誤”的提示,那么我們就可以按下Ctrl+F,在彈出的窗口中輸入“密碼錯(cuò)誤”,然后單擊確定按鈕查找:
上面還有一個(gè)密碼正確,恭喜過(guò)關(guān),這是不是關(guān)鍵呢?我們?cè)囈辉囯p擊這個(gè)看看。
雙擊找到字符串的那一行,來(lái)到OD的反匯編窗口,就能看到代碼指令中引用這個(gè)字符串的地方了。如下圖所示:
在這個(gè)代碼片段中,我們還看到了一個(gè)jnz跳轉(zhuǎn)指令,這個(gè)指令是否跳轉(zhuǎn)將決定著彈出成功的提示還是彈出失敗的提示,這樣的跳轉(zhuǎn)也就是所謂的關(guān)鍵跳轉(zhuǎn)。在關(guān)鍵跳轉(zhuǎn)之上的代碼往往就是關(guān)鍵的密碼判斷邏輯,因此我們可以著重分析關(guān)鍵跳轉(zhuǎn)之上的代碼。在關(guān)鍵跳轉(zhuǎn)之上,我們?cè)谙旅娴牡奈恢孟乱粋€(gè)斷點(diǎn)(鼠標(biāo)單擊這行代碼選中,然后按下F2):
00401456. 55 push ebp
下好斷點(diǎn)之后,按下F9運(yùn)行程序,隨便輸入一個(gè)密碼(比如test)后單擊按鈕,程序就自動(dòng)在我們的斷點(diǎn)斷下了,接下來(lái)按F8開(kāi)始進(jìn)行單步跟蹤,當(dāng)跟蹤到00401490的時(shí)候,我們發(fā)現(xiàn)了我們輸入的密碼test,同時(shí)發(fā)現(xiàn)字符串HeeTianLab,如圖所示:
仔細(xì)分析上面的代碼,發(fā)現(xiàn)是在從這兩個(gè)字符串里面取出字符一個(gè)一個(gè)進(jìn)行對(duì)比,只要有一個(gè)字符不一樣,最終都會(huì)跳轉(zhuǎn)到提示失敗的地方去。那么可以猜測(cè)HeeTianLab就是正確的密碼了,我們運(yùn)行另一個(gè)CrackMe1進(jìn)程,輸入HeeTianLab,彈出成功提示:
這就通關(guān)了,接下來(lái)我用另外一個(gè)神器IDA再來(lái)做一遍,有動(dòng)態(tài)的神器,肯定還有一個(gè)靜態(tài)的神器。
除了動(dòng)態(tài)調(diào)試之外,靜態(tài)分析也是一種很重要的技能。靜態(tài)分析可以幫助我們快速了解程序的代碼執(zhí)行邏輯,尤其是使用IDA的Hex-Rays插件將匯編代碼生成偽代碼的功能,可以極大地提高我們的分析效率。
使用IDA打開(kāi)CrackMe1.exe程序,IDA會(huì)提示選擇文件類型、處理器類型等,通常我們不需要修改這些設(shè)置,直接單擊“OK”按鈕即可。之后IDA會(huì)對(duì)程序進(jìn)行分析,等待一段時(shí)間,待分析結(jié)束之后,在下方的“Output Window”中會(huì)提示“The initial autoanalysis has been finished.”,如圖:
在IDA的菜單中選擇“View”——“Open subviews”——“Strings”菜單項(xiàng),就可以彈出字符串列表界面了,如圖所示:
IDA的字符串列表界面沒(méi)有提供Ctrl+F快捷進(jìn)行查找的功能,所以我們需要手工翻頁(yè)來(lái)查找我們感興趣的字符串,拖到某一個(gè)地方的時(shí)候我們看到了提示相關(guān)的字符串:
雙擊“密碼錯(cuò)誤”這個(gè)字符串,來(lái)定定義該字符串的地方,然后鼠標(biāo)點(diǎn)擊字符串的名字,然后按下x鍵,進(jìn)行交叉引用查找,彈出的對(duì)話框如下圖所示:
單擊OK按鈕來(lái)到引用這個(gè)字符串的地方,我們看到了一堆反匯編指令列表,這時(shí)候就可以對(duì)這里的匯編指令進(jìn)行分析了,如果不想看匯編指令也不要緊,按下F5鍵就可以生成函數(shù)的偽代碼了,我們看到偽代碼中將輸入的密碼和HeeTianLab進(jìn)行了比較:
很明顯,HeeTianLab就是我們想要的密碼。
逆向的學(xué)習(xí)是一個(gè)需要對(duì)計(jì)算機(jī)相關(guān)及編程知識(shí)系統(tǒng)有較深了解的過(guò)程,它是一個(gè)不斷漸進(jìn)的階段性技能。想學(xué)好逆向,你必須具備眾多的編程語(yǔ)言儲(chǔ)備、安全相關(guān)知識(shí)、對(duì)計(jì)算機(jī)原理有良好的認(rèn)識(shí)和常識(shí)。而這些只是逆向的基礎(chǔ)!
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。
網(wǎng)站欄目:如何進(jìn)行CTF-REVERSE的逆向練習(xí)
轉(zhuǎn)載來(lái)于:http://jinyejixie.com/article38/pppgsp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷型網(wǎng)站建設(shè)、域名注冊(cè)、定制網(wǎng)站、App設(shè)計(jì)、服務(wù)器托管、定制開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)