[系統(tǒng)安全] 四.OllyDbg動(dòng)態(tài)分析工具基礎(chǔ)用法及Crakeme逆向破解

      網(wǎng)友投稿 960 2025-04-01

      文章目錄

      一.OllyDbg工具簡(jiǎn)介

      二.OllyDbg分析Crakeme示例1

      三.OllyDbg分析Crakeme示例2

      四.總結(jié)

      系統(tǒng)安全:https://github.com/eastmountyxz/SystemSecurity-ReverseAnalysis

      網(wǎng)絡(luò)安全:https://github.com/eastmountyxz/NetworkSecuritySelf-study

      前文分析:

      [系統(tǒng)安全] 一.什么是逆向分析、逆向分析基礎(chǔ)及經(jīng)典掃雷游戲逆向

      [系統(tǒng)安全] 二.如何學(xué)好逆向分析及呂布傳游戲逆向案例

      [系統(tǒng)安全] 三.IDA Pro反匯編工具初識(shí)及逆向工程解密實(shí)戰(zhàn)

      [系統(tǒng)安全] 四.OllyDbg動(dòng)態(tài)分析工具基礎(chǔ)用法及Crakeme逆向破解

      聲明:本人堅(jiān)決反對(duì)利用教學(xué)方法進(jìn)行犯罪的行為,一切犯罪行為必將受到嚴(yán)懲,綠色網(wǎng)絡(luò)需要我們共同維護(hù),更推薦大家了解它們背后的原理,更好地進(jìn)行防護(hù)。

      一.OllyDbg工具簡(jiǎn)介

      OllyDbg是一個(gè)新的動(dòng)態(tài)追蹤工具,將IDA與SoftICE結(jié)合起來的思想,Ring 3級(jí)調(diào)試器,非常容易上手,是當(dāng)今最為流行的調(diào)試解密工具之一。它還支持插件擴(kuò)展功能,是目前最強(qiáng)大的調(diào)試工具之一。

      OllyDbg打開如下圖所示,包括反匯編窗口、寄存器窗口、信息窗口、數(shù)據(jù)窗口、堆棧窗口。

      反匯編窗口:顯示被調(diào)試程序的反匯編代碼,包括地址、HEX數(shù)據(jù)、反匯編、注釋

      [系統(tǒng)安全] 四.OllyDbg動(dòng)態(tài)分析工具基礎(chǔ)用法及Crakeme逆向破解

      寄存器窗口:顯示當(dāng)前所選線程的CPU寄存器內(nèi)容,點(diǎn)擊標(biāo)簽可切換顯示寄存器的方式

      信息窗口:顯示反匯編窗口中選中的第一個(gè)命令的參數(shù)及跳轉(zhuǎn)目標(biāo)地址、字符等

      數(shù)據(jù)窗口:顯示內(nèi)存或文件的內(nèi)容,右鍵菜單可切換顯示方式

      堆棧窗口:顯示當(dāng)前線程的堆棧

      下圖是打開EXE后顯示的界面。

      下面簡(jiǎn)單講解常用的快捷鍵調(diào)試方式。

      F2

      設(shè)置斷點(diǎn),如下圖所示的紅色位置,程序運(yùn)行到此處會(huì)暫停,再按一次F2鍵會(huì)刪除斷點(diǎn)。

      F9

      按下這個(gè)鍵運(yùn)行程序,如果沒有設(shè)置相應(yīng)的點(diǎn),被調(diào)試的程序直接開始運(yùn)行。

      F8

      單步步過,每按一次這個(gè)按鍵,將執(zhí)行反匯編窗口中的一條指令,遇到CALL等子程序不進(jìn)入其代碼。

      F7

      單步步入,功能通單步步過(F8)類似,區(qū)別是遇到CALL等子程序時(shí)會(huì)進(jìn)入其中,進(jìn)入后首先停留在子程序的第一條指令上。如下圖進(jìn)入CALL子程序。

      F4

      運(yùn)行到選定位置,即運(yùn)行到光標(biāo)所在位置處暫停。

      CTRL+F9

      執(zhí)行到返回,按下此鍵會(huì)執(zhí)行到一個(gè)返回指令時(shí)暫停,常用于從系統(tǒng)領(lǐng)空返回到我們調(diào)試的程序領(lǐng)空。

      ALT+F9

      執(zhí)行到用戶代碼,從系統(tǒng)領(lǐng)空快速返回我們調(diào)試的程序領(lǐng)空。

      二.OllyDbg分析Crakeme示例1

      第一個(gè)案例是 《加密與解密》書中Crakeme v3.0的文件,需要解密用戶名和序列號(hào)。

      點(diǎn)擊“Register now”按鈕,會(huì)有輸入錯(cuò)誤相關(guān)的提示,如下圖所示。

      OllyDbg動(dòng)態(tài)分析的基本流程如下:

      通常拿到一個(gè)軟件先試著運(yùn)行軟件,如果有幫助文檔查閱幫助文檔,熟悉軟件的基本用法,接著嘗試輸入錯(cuò)誤的注冊(cè)碼,觀察錯(cuò)誤提示。

      如果沒有輸入注冊(cè)碼的地方,要考慮是否是讀取注冊(cè)表或Key文件(程序讀取一個(gè)文件中的內(nèi)容判斷是否注冊(cè)),這些可以用其他工具來輔助分析。

      如果都不是,原程序只是一個(gè)功能不全的試用版,那要注冊(cè)為正式版需要手動(dòng)寫代碼完善。

      如果需要輸入注冊(cè)碼,如上圖所示,則調(diào)用查殼軟件檢查程序是否加殼(如PeiD、FI),有殼的需要脫殼之后再調(diào)用OllyDbg分析調(diào)試,無殼的直接調(diào)用工具調(diào)試。

      下面開始正式的分析。

      第一步:調(diào)用PEiD檢測(cè)程序是否加殼。

      反饋結(jié)果為“Borland Delphi 4.0 - 5.0”,無殼Delphi編寫的文件。

      第二步:運(yùn)行CrakeMe V3.0文件,并點(diǎn)擊“Register now”,提示錯(cuò)誤信息。

      對(duì)話框提示錯(cuò)誤信息“Wrong Serial, try again!”。

      第三步:?jiǎn)?dòng)OllyDbg軟件,選擇菜單“文件”,打開CrackMe3文件。

      此時(shí)文件會(huì)停留在如下位置,雙擊注釋位置能添加自定義注釋。

      第四步:在反匯編窗口右鍵鼠標(biāo),選擇“查找”->“所有參考文本字串”。

      彈出如下圖所示的對(duì)話框。

      第五步:右鍵選擇“查找文本”,輸入“Wrong”定位“Wrong Serial, try again!”位置。

      如下圖所示,定位到“Wrong Serial”位置。

      第六步:接著右鍵鼠標(biāo),點(diǎn)擊“反匯編窗口中跟隨”。

      接著定位到如下圖所示位置。

      第七步:選中該語句右鍵“查找參考”-:“選定地址”(快捷鍵Ctrl+R)。

      彈出如下圖所示的“參考頁面”。

      第八步:雙機(jī)上面的兩個(gè)地址(00440F79、00440F93),去到對(duì)應(yīng)的位置。

      在反匯編窗口中向上滾動(dòng)窗口,可以看到核心代碼:

      第九步:通過查看跳轉(zhuǎn)到“Wrong serial, try again”字符串的指令,可以查詢相應(yīng)的程序。

      在“調(diào)試選項(xiàng)”->“CPU”->勾選“顯示跳轉(zhuǎn)路徑”及“如跳轉(zhuǎn)未實(shí)現(xiàn)則顯示灰色路徑”和“顯示跳轉(zhuǎn)到選定命令的路徑”。

      如下圖所示:

      第十步:詳細(xì)分析反匯編代碼。

      在下圖中,地址0040F2C處按下F2鍵設(shè)置斷點(diǎn),接著按F9運(yùn)行程序。

      輸入“Test”和“754-GFX-IER-954”,點(diǎn)擊“Register now!”,顯示結(jié)果如下圖所示。

      程序會(huì)在斷點(diǎn)處停止,同時(shí)提示剛才輸入的內(nèi)容。

      輸出內(nèi)容如下所示,其中內(nèi)存地址02091CE0中輸入了剛才的“Test”。

      第十一步:左擊“ss:[0019F8FC]=02091CE0,(ASCII “Test”)”,右鍵選擇“數(shù)據(jù)窗口中跟隨數(shù)值”,會(huì)在數(shù)據(jù)窗口中看到輸入的內(nèi)容。EAX=00000004 表示輸入內(nèi)容的長(zhǎng)度為4個(gè)字符。

      第十二步:調(diào)用F8按鍵和F7按鍵一步步分析代碼。

      回到下面00440F2C這部分代碼,按下F8一步步運(yùn)行,注意下面的核心代碼。

      00440F2C |. 8B45 FC mov eax,[local.1] ; 輸入的內(nèi)容送到EAX,即"Test" 00440F2F |. BA 14104400 mov edx,crackme3.00441014 ; ASCII "Registered User" 00440F34 |. E8 F32BFCFF call crackme3.00403B2C ; 關(guān)鍵點(diǎn):用按F7進(jìn)入子程序 00440F39 |. /75 51 jnz Xcrackme3.00440F8C ; 調(diào)走到這里就錯(cuò)誤:Wrong serial ...

      第十三步:當(dāng)F8運(yùn)行到“00440F34 |. E8 F32BFCFF call crackme3.00403B2C”時(shí),按下F7進(jìn)入CALL子程序,此時(shí)光標(biāo)停留在如下所示位置(00403B2C)。

      這里的PUSH ebx、PUSH esi等都是調(diào)用子程序保存堆棧時(shí)使用的命令,按F8一步步運(yùn)行代碼。其核心解釋如下,是基礎(chǔ)的匯編語言:(參考看雪CCDebuger大神的《OllyDBG入門教程》)

      重點(diǎn):程序運(yùn)行到如下圖所示界面時(shí),可以看到“Test”和“Registered User”的比較。通過上面圖片的分析,我們知道用戶名必須為“Registered User”。

      第十四步:接著按F9鍵運(yùn)行程序,出現(xiàn)錯(cuò)誤對(duì)話框,點(diǎn)擊確定,重新在編輯框中輸入“Registered User”,再次點(diǎn)擊“Register now!”按鈕,分析調(diào)試程序。

      注意,F(xiàn)12鍵為暫停。

      核心代碼如下,其中地址00440F34的CALL已經(jīng)分析清楚,繼續(xù)F8執(zhí)行下一步,知道第二個(gè)關(guān)鍵地方,即00440F51,按下F7進(jìn)入子程序。注意:注釋內(nèi)容的提示不一定存在,需要?jiǎng)討B(tài)調(diào)試程序到寄存器查看對(duì)應(yīng)的注冊(cè)碼,才是正確的做法。

      00440F34 |. E8 F32BFCFF call crackme3.00403B2C 00440F51 |. E8 D62BFCFF call crackme3.00403B2C

      上面兩句代碼可以看到用戶名和注冊(cè)碼都是調(diào)用同一子程序,這個(gè)CALL分析方法和上面一樣。

      第十五步:按F8調(diào)試該子程序,發(fā)現(xiàn)cmp比較兩個(gè)值是否相等,其中0044102C為注冊(cè)碼內(nèi)容。

      第十六步:按F12暫停,再按F9重新運(yùn)行,輸入正確的用戶名和密碼,解密成功。

      Registered User

      GFX-754-IER-954

      難點(diǎn):調(diào)試程序時(shí)如何核心代碼,比如這里的CMP比較,同時(shí)匯編代碼也比較晦澀。

      三.OllyDbg分析Crakeme示例2

      這個(gè)案例是破解Crakeme中的Afkayas.1.EXE,這是典型的字符串序列破解程序,根據(jù)name的值推出serial。

      第一步:通過PEiD檢查它無殼,VB編寫的。

      第二步:OllyDbg工具打開Afkayas.1.EXE文件如下圖所示。

      第三步:反匯編區(qū)域右鍵鼠標(biāo),選擇“查找”->“所有參考文本字串”。

      第四步:在彈出的對(duì)話框中找到失敗的提示字符“You Get Wrong”,右鍵“反匯編窗口中跟隨”。

      此時(shí)會(huì)回到代碼區(qū),可以看到失敗和成果的字符串。

      第五步:通常成功和失敗的反饋?zhàn)址喔舨贿h(yuǎn),需要在之前判斷,如果輸入的serial正確則成功,否則失?。唤又蛏险业秸{(diào)用字符串比較函數(shù)的入口點(diǎn)。

      注意,這一步比較關(guān)鍵,但個(gè)人覺得需要長(zhǎng)時(shí)間的經(jīng)驗(yàn)和實(shí)踐,才能準(zhǔn)確定位。

      匯編調(diào)用函數(shù)之前會(huì)先把參數(shù)入棧,然后用CALL指令調(diào)用函數(shù)。在字符串比較函數(shù)之前有一句 PUSH EAX 指令,可以推測(cè)這里的EAX就是字符串的首地址。

      第六步:在比較函數(shù)00402533處按下F2鍵設(shè)置斷點(diǎn),接著按F9鍵執(zhí)行,此時(shí)會(huì)彈出運(yùn)行界面,我們輸入“Eastmount”和“12345678”,然后點(diǎn)擊OK按鈕。

      此時(shí)程序停留在斷點(diǎn)處,右下角堆棧區(qū)顯示了提示的正確Serial。

      第七步:輸入正確的用戶名和Serial,成果注冊(cè)。

      Eastmount

      AKA-877848

      下面結(jié)合鬼手大神和海天一色大神的博文,簡(jiǎn)單分析加密的基本邏輯,同時(shí)強(qiáng)烈推薦大家閱讀他們的文章,參見前面的參考文獻(xiàn)。這些逆向的經(jīng)驗(yàn)真不是一朝一夕就能獲取的,深知自己要學(xué)習(xí)和經(jīng)歷的東西太多,你我一起加油。

      基本流程如下:

      serial = ‘AKA-’ + 逆序itoa(strlen(name) * 0x17CFB + name[0])

      求出了用戶名的長(zhǎng)度

      將用戶名長(zhǎng)度乘以0x17CFB得到結(jié)果 如果溢出則跳轉(zhuǎn)

      將結(jié)果再加上用戶名的第一個(gè)字符的ASCII

      將結(jié)果轉(zhuǎn)為十進(jìn)制

      將結(jié)果和AKA進(jìn)行拼接,得到最后的序列號(hào)

      下面分享一段Python的解密代碼。

      # encoding: utf-8 key = "AKA" name = "Eastmount" #獲取用戶名長(zhǎng)度 nameLen = len(name) print(u'獲取用戶名長(zhǎng)度:') print(nameLen) #用戶名長(zhǎng)度乘以0x17CFB得到結(jié)果 res = nameLen * 0x17CFB print(u'用戶名長(zhǎng)度乘以0x17CFB:') print(res) #將結(jié)果加上用戶名的第一個(gè)字符的ASCII print(name[0], ord(name[0])) res = res + ord(name[0]) print(u'結(jié)果加上用戶名第一個(gè)字符的ASCII:') print(res) #轉(zhuǎn)換為十進(jìn)制 省略 #拼接序列號(hào) key = key + str(res) print(u'最終結(jié)果:') print(key)

      定義不同的用戶名可以得到對(duì)應(yīng)的Serial。

      四.總結(jié)

      寫到這里,這篇基礎(chǔ)性文章就敘述完畢,網(wǎng)絡(luò)安全要學(xué)習(xí)的知識(shí)真的很多,涉及面很廣,包括匯編、網(wǎng)絡(luò)、操作系統(tǒng)、加密解密、C/C++、Python等。希望自己能慢慢進(jìn)步,科研與實(shí)踐并重,也希望讀者喜歡這系列總結(jié)筆記。不喜勿噴,與你同行~

      感恩能與大家在華為云遇見!

      希望能與大家一起在華為云社區(qū)共同成長(zhǎng),原文地址:https://blog.csdn.net/Eastmount/article/details/108956863

      (By:娜璋之家 Eastmount 2021-08-31 夜于貴陽)

      Windows 匯編語言 網(wǎng)絡(luò)

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:智能家居系統(tǒng)任務(wù)管理: 持續(xù)提升生活品質(zhì)的關(guān)鍵
      下一篇:Excel中快速隱藏所有非活動(dòng)(所有未選擇的)工作表
      相關(guān)文章
      国产AV无码专区亚洲AVJULIA | 亚洲综合激情五月色一区| 亚洲精品夜夜夜妓女网| 亚洲国产精品成人久久蜜臀 | 亚洲成av人无码亚洲成av人| 中文字幕亚洲综合小综合在线| 亚洲福利电影在线观看| 亚洲日韩中文字幕| 亚洲AV色吊丝无码| 亚洲天堂2017无码中文| 亚洲一区二区三区精品视频| 亚洲另类古典武侠| 国产亚洲精品成人AA片| 亚洲日韩AV一区二区三区四区| 亚洲熟伦熟女专区hd高清| 亚洲www77777| 亚洲AV无码精品国产成人| 苍井空亚洲精品AA片在线播放 | 亚洲AV日韩AV天堂久久| 亚洲国产第一页www| 亚洲AV无码久久精品蜜桃| 亚洲男人都懂得羞羞网站| 亚洲精品美女久久久久9999| 亚洲免费在线视频观看| 亚洲AV成人影视在线观看| 亚洲人成色4444在线观看| 久久亚洲AV成人无码国产电影| 相泽南亚洲一区二区在线播放| 亚洲AV中文无码乱人伦在线视色| 亚洲国产精品激情在线观看 | 亚洲综合在线另类色区奇米| 亚洲成人午夜电影| 亚洲va久久久久| 国产亚洲精品91| 久久久久亚洲AV综合波多野结衣| 亚洲乱码中文字幕久久孕妇黑人| 亚洲va无码手机在线电影| 亚洲精品视频在线播放| 四虎必出精品亚洲高清| 国产亚洲综合精品一区二区三区| 亚洲午夜激情视频|