日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

新手学逆向,调试abexcm1过程

發(fā)布時間:2025/3/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 新手学逆向,调试abexcm1过程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

寫在前面的話:在下完全就是一個新手,現(xiàn)在目前在學16位匯編,偶爾用OD調試看看程序,主要就是為了學習,今天寫這個帖子,完全就是筆記用,然后拿出來和大家一起討論交流。

因為剛開始接觸,文章可能一些地方有錯誤,如果有錯誤的地方還請指出來,畢竟剛學,確實差的十萬八千里。而且這個程序也很簡單,主要還是為了做記錄。

?

網(wǎng)上找了個abexcm1,然后進行調試。

我個人的習慣,當首先拿到 程序的時候,我都會按F8直接把程序走一遍,看看大概的流程。

?

?

這個程序的功能很簡單,匹配C:\驅動器的屬性,如果成功,就彈出開OK,如果失敗,就彈出來失敗。兩者均退出程序。

?

?

00401000 >/$ 6A 00 push 0 ; /Style = MB_OK|MB_APPLMODAL ;將數(shù)據(jù)入棧 00401002 |. 68 00204000 push 00402000 ; |Title = "abex' 1st crackme" 將數(shù)據(jù)入棧 00401007 |. 68 12204000 push 00402012 ; |Text = "Make me think your HD is a CD-Rom." 將數(shù)據(jù)入棧 0040100C |. 6A 00 push 0 ; |hOwner = NULL 將數(shù)據(jù)入棧 0040100E |. E8 4E000000 call <jmp.&USER32.MessageBoxA> ; \MessageBoxA 調用WIN API 00401013 |. 68 94204000 push 00402094 ; /RootPathName = "c:\" ;將00402094 數(shù)據(jù)入棧 00401018 |. E8 38000000 call <jmp.&KERNEL32.GetDriveTypeA> ; \GetDriveTypeA ; ; 調用WIN API 0040101D |. 46 inc esi ;esi +1 =1 eax = 03 0040101E |. 48 dec eax exc-1 = 02 0040101F |. EB 00 jmp short 00401021 ;垃圾指令 00401021 |> 46 inc esi esi = 2 00401022 |. 46 inc esi esi = 3 00401023 |. 48 dec eax eax-1 = 01 00401024 |. 3BC6 cmp eax, esi ; 比較值,如果值相等,JE條件跳轉,如果不相等,繼續(xù)走下去 00401026 |. 74 15 je short 0040103D ;值不相等,無法段內(nèi)段轉移,繼續(xù)走下去 00401028 |. 6A 00 push 0 ; /Style = MB_OK|MB_APPLMODAL 0040102A |. 68 35204000 push 00402035 ; |Title = "Error" 0040102F |. 68 3B204000 push 0040203B ; |Text = "Nah... This is not a CD-ROM Drive!" 00401034 |. 6A 00 push 0 ; |hOwner = NULL 00401036 |. E8 26000000 call <jmp.&USER32.MessageBoxA> ; \MessageBoxA ;調用MESSAGEBOX彈出錯誤 0040103B |. EB 13 jmp short 00401050 ;t跳轉 0040103D |> 6A 00 push 0 ; |/Style = MB_OK|MB_APPLMODAL ;調用成功的函數(shù), 0040103F |. 68 5E204000 push 0040205E ; ||Title = "YEAH!" 00401044 |. 68 64204000 push 00402064 ; ||Text = "Ok, I really think that your HD is a CD-ROM! :p" 00401049 |. 6A 00 push 0 ; ||hOwner = NULL 0040104B |. E8 11000000 call <jmp.&USER32.MessageBoxA> ; |\MessageBoxA 00401050 \> E8 06000000 call <jmp.&KERNEL32.ExitProcess> ; \ExitProcess ;程序退出。

 從以上我們可以看出,程序2次彈出來了MESSAGEBOX,那如何來破解呢?、

?

?

我們知道,破解中最注意的應該就是跳轉之前的比較指令,

?

0040101D |. 46 inc esi 0040101E |. 48 dec eax 0040101F |. EB 00 jmp short 00401021 00401021 |> 46 inc esi 00401022 |. 46 inc esi 00401023 |. 48 dec eax 00401024 |. 3BC6 cmp eax, esi 00401026 |. 74 15 je short 0040103D

以上可以看出,如果比較的值相等,就繼續(xù)執(zhí)行,如果不相等,就轉到另外一個MESSAGEBOX函數(shù)出,直接調用API。

那我們可以直接讓他相等就好了,或者直接JMP 無條件跳轉到0040103D地址處調用成功的MESSAGEBOX API,就達到了破解的功能。

?

?

?

?

下面我們來跟蹤每一次執(zhí)行完以后的寄存器的變化。

寄存器相關的值:

?

EAX= 75E23358 ;一般用來存放臨時數(shù)據(jù) ECX= 00000000 ;ECX一般用來進行LOOP循環(huán)才會用到 EDX= 00401000 ;數(shù)據(jù)寄存器, EBX= 7EFDE000 ;基址寄存器,常用來存放訪問內(nèi)在時的基地址 ESP= 0018FF8C ;棧頂指針,指向棧頂?shù)刂?#xff0c;在32為寄存器中,碰到PUSH的時候,SP = SP-4,pop的時候,POP = POP + 4 EBP= 0018FF94 ;是基址指針,段地址默認在SS中.可以定位物理地址 ESI= 00000000 ;源變址寄存器,默認段地址和DI一樣,在DS中.和DS聯(lián)用 EDI= 00000000 ;變址寄存器.可以和bx.bp聯(lián)用 EIP= 00401000 ;EIP指向當前要執(zhí)行的指令,每次EIP= EIP+執(zhí)行指令的長度

?

//標志位沒寫00401000 >/$ 6A 00 push 0 ; /Style = MB_OK|MB_APPLMODAL 00401002 |. 68 00204000 push 00402000 ; |Title = "abex' 1st crackme" 00401007 |. 68 12204000 push 00402012 ; |Text = "Make me think your HD is a CD-Rom." 0040100C |. 6A 00 push 0 ; |hOwner = NULL 0040100E |. E8 4E000000 call <jmp.&USER32.MessageBoxA> ; \MessageBoxA 00401013 |. 68 94204000 push 00402094 ; /RootPathName = "c:\" 00401018 |. E8 38000000 call <jmp.&KERNEL32.GetDriveTypeA> ; \GetDriveTypeA

  

當執(zhí)行push? ? 00402000,其實就是將 00402000 這個內(nèi)存地址的數(shù)據(jù)壓入桟。

我們來看00402000的數(shù)據(jù)

00402000 61 62 65 78 27 20 31 73 74 20 63 72 61 63 6B 6D abex' 1st crackmpush 00402012 將 00402012 內(nèi)存地址數(shù)據(jù)壓入桟00402012 4D 61 6B 65 20 6D 65 20 74 68 69 6E 6B 20 79 6F Make me think yo 00402022 75 72 20 48 44 20 69 73 20 61 20 43 44 2D 52 6F ur HD is a CD-Ro 00402032 6D 2E

  

push? ? 0

為空

?

call <jmp.&USER32.MessageBoxA> 調用MESSAGEBOX API

  

在執(zhí)行CALL <jmp.&USER32.MessageBoxA>,MessageBoxA 的內(nèi)存地址在 00401061,直接 調用了API,彈出MESSAGEBOX

CALL API(也可以說是標號)。將執(zhí)行2步操作:

?

1:PUSH IP 1:JMP NEAR PTR 標號

  

0040101D |. 46 inc esi 0040101E |. 48 dec eax 0040101F |. EB 00 jmp short 00401021 ;垃圾指令 00401021 |> 46 inc esi 00401022 |. 46 inc esi 00401023 |. 48 dec eax 00401024 |. 3BC6 cmp eax

  以上均是數(shù)據(jù)比較。

然后在進行條件跳轉。

這次的分析就到這兒了,因為初學,難免錯誤,還請多多指點。各位勿噴。謝謝

轉載于:https://www.cnblogs.com/killbit/p/4851398.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的新手学逆向,调试abexcm1过程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。