1. 程式人生 > >【reversing.kr逆向之旅】Replace的writeup

【reversing.kr逆向之旅】Replace的writeup

無殼  vc++程式

載入Olydbg動態除錯分析就好

可以通過下API斷點GetWindowTextW來找到關鍵程式碼

因為它就是用來捕獲我們的輸入的    隨意輸入(這裡可以發現只可以輸入數字 長度什麼的倒是沒有限制)

就像下面一樣  可以看到地址很大 在系統領空 user32.dll   所以這裡不用管

上面迴圈過去之後

就來到了這裡

可以看到成功的標誌Correct!

但是CPU視窗有兩個jmp指令   也就是說無條件跳轉  肯定無法成功   向上向下跟蹤    可以看到只有地址00401071處有一個跳轉進來    可以使我們走向成功

接著向下單步  來到下圖所示

可以發現  程式不管輸入什麼  總是走到0x004046A9這裡就停止運行了

可以看到這個call跳轉向的地址  是將eax所對應的地址進行nop

連續兩個這樣的call 中間inc eax    就是eax加1    也就是說連續nop兩個地址

再來看下邊那個向上跳轉的jmp    跳轉的地址0x00401071  對應其中一個jmp   挨著的下一條指令正好是個空指令

那麼我們就可以利用這兩個call   將這兩條指令進行nop   即可走向Correct!

 

這時候重點就在eax是如何與我們的輸入進行運算的

輸入123時  eax=0x60160646     把123轉成十六進位制是0x7b     0x60160646-0x7b=0x601605cb

重新輸入1234時    eax=0x60160A9D   把1234轉成十六進位制是0x4d2    0x60160A9D-0x4d2=0x601605cb

多次輸入 可以發現最終結果都是0x601605cb    

那麼我們正確的輸入應該要滿足0x00401071-?=0x601605cb 

可以發現需要eax溢位才可能成立

所以?= 0x100401071-0x601605cb = 0xa02a0aa6

驗證2687109798   成功

參考連結:

http://www.mottoin.com/article/reverse/88447.html

https://www.cnblogs.com/xiao-zhang/articles/5602504.html