Reversing.Kr Replace Writeup

打開程序看到了wrong,打開OD字符串搜索

發現Correct!雙擊進入

GetDlgItemInt獲取輸入,

同時猜測0040466F是進行一些處理,先在這裏下斷點,

順着程序往下看,下面有兩個jmp,第一個jmp最後會跳轉至第二個jmp處,但是第二個jmp會直接跳過correct!       

(這裏的時候百思不得其解,以爲要nop掉第二個jmp)但其實不是讓自己nop掉,是要根據輸入來讓程序自己nop掉。

開始調試程序:

輸入個123(7B)

來到第一個jmp的地方

這裏發現0040469F處,將一些奇怪的指令傳遞(修改)至0040466F,然後又調用了兩次0040466F,之間還讓eax自加1

看一下修改後的是什麼指令:

0040466F   $  C600 90       mov byte ptr ds:[eax],0x90

00404672   ?  C3            retn

0x90就是nop,mov byte ptr ds:[eax],0x90就是將nop放在當前eax的值對應的地址處

再聯繫一下

00401071   > /EB 11         jmp short Replace.00401084

中的 EB 11 和兩次調用0040466F中間的eax自加1

可以判斷這裏就是需要將EB 11都改爲轉換爲nop(就把第二個jmp給nop掉了)

所以任務就是在調用0040466F時,令eax = 0x401071,這個就與輸入有關

而我這裏輸入的123(7B),此時的eax是60160646

我重新調試,再輸入另一個值111(6F),調試到004046A9,此時6016063A

0x6016063A – 0x6F = 6016 05CB

0x60160646 – 0x7B = 6016 05CB

即 將輸入的10進制數轉爲16進制與6016 05CB相加作爲eax,於是:

0x6016 05CB - 0x401071 = 0x A02A 0AA6(前面的FFFFFFFFF略去,因爲eax只保存後8位)

0xA02A0AA6 = 2687109798 即是flag

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章