Crack Me逆向練習

2021-07-07 10:36:00 字數 3636 閱讀 6230

乙份關於逆向學習的實習報告,主要是關於《逆向工程核心原理》第六章第一節中的abexcm1-voiees.exex程式逆向練習。修改字尾為.exe,雙擊執行如下圖:

ollydbg開啟,一路f8到如下截圖的地方:

程式在呼叫了一次messageboxa函式後,又呼叫了一次getdrivetypea,而傳入的引數是"c:\",顯然是不會有「think your hd is a cd-rom.」結果的。通過下拉看到je short abexcm1-.0040103d處也是呼叫了乙個彈框顯示訊息文字是"ok, i really think that your hd is a cd-rom! :p",如果任務只是讓其執行到彈框提示文字"ok, i really think that your hd is a cd-rom! :p"的地方,只需要將getdrivetypea傳入引數改為光碟機所在碟符即可,不過我電腦沒有光碟機(-__-)b。看來只有修改getdrivetypea的執行結果了。

通過查詢資料(php程式設計師哇,只能查資料了)發現getdrivetype的執行結果:

返回值指定驅動器的型別,它可以是以下值之一:

drive_unknown:未知磁碟型別;

drive_no_root_dir:根路徑無效;

drive_removable:可移動磁碟;

drive_fixed:固定磁碟;

drive_remote:遠端驅動器;

drive_cdrom:光碟機;

drive_ramdisk:虛擬記憶體盤。

易語言中,上述常量的10進製數值為:

#drive_unknown=0;

#drive_no_root_dir=1;

#drive_removable=2;

#drive_fixed=3;

#drive_remote=4;

#drive_cdrom=5;

#drive_ramdisk=6。

執行完getdrivetypea,發現此時eax果然是3,如上為,固定磁碟,如下截圖:

直接修改eax為5,一路f8,如下截圖:

那麼執行完getdrivetypea之後都幹了個啥呢?怎麼弄個每次雙擊二次彈框提示"ok, i really think that your hd is a cd-rom! :p"的破解程式呢?

inc esi  ;inc只有乙個運算元,它將指定的運算元內容加1,再講結果送回到該運算元。

dec eax ;dec是組合語言中的算術運算指令,起到減1的功能。

jmp short abexcm1-.00401021 ;無條件跳** jmp;實際就是下一條指令

inc esi ;加1

inc esi ;加1

dec eax ;減1

cmp eax,esi ;比較eax esi

je short abexcm1-.0040103d ;(zf)=1,則控制轉移

以上,分析esi 三次加1等於3,eax由3兩次減一為1,通過cmp指令zf為0,此時不會跳轉到abexcm1-.0040103d,此處破解可以修改je為jmp,ctrl+f2 一路f8修改「je short abexcm1-.0040103d」為「jmp short abexcm1-.0040103d」,copy to executable,儲存為abexcm1-voiees-jmp.exe,雙擊執行成功。發散思路,直接修改呼叫getdrivetypea指令為mov eax 5(5為drive_cdrom,即光碟機的正常返回值)同樣操作儲存為abexcm1-voiees-mov.exe,雙擊執行成功。前邊不是分析cmp 比較的是eax(1)和esi(3)嗎,能不能修改esi為直接數1呢?試一試,如下截圖:

cmp後邊的語句也錯掉了,把esi改為3這條路走不通了,偶然記起來之前有看到某條命令不想讓其執行改為nop,把esi兩次加1改掉,讓其等於1,操作,如下截圖,依前法儲存為abexcm1-voiees-nop.exe,雙擊執行成功

參考:1 易語言如何用api列舉磁碟

2 學 win32 彙編[28] - 跳轉指令: jmp、jecxz、ja、jb、jg、jl、je、jz、js、jc、jo、jp 等

3 彙編cmp比較指令詳解

逆向 攻防世界 crackme

查殼,nspack殼,直接用軟體脫殼,ida引導程式。很明顯,就是將402130的資料和輸入的資料進行異或,判斷是否等於402150處的資料。dwrd佔4位元組。這道題主要記錄一下剛學到的,直接在ida使用python指令碼。from ida bytes import get bytes s dat...

逆向 攻防世界 crackme

查殼,nspack殼,直接用軟體脫殼,ida引導程式。很明顯,就是將402130的資料和輸入的資料進行異或,判斷是否等於402150處的資料。dwrd佔4位元組。這道題主要記錄一下剛學到的,直接在ida使用python指令碼。from ida bytes import get bytes s dat...

逆向破解之160個CrackMe 029

160 crackme 是比較適合新手學習逆向破解的crackme的乙個集合一共160個待逆向破解的程式 crackme 它們都是一些公開給別人嘗試破解的小程式,製作 crackme 的人可能是程式設計師,想測試一下自己的軟體保護技術,也可能是一位 cracker,想挑戰一下其它 cracker 的...