1. 程式人生 > >CTF挑戰賽-合天網安實驗室-Reverse逆向200writeup

CTF挑戰賽-合天網安實驗室-Reverse逆向200writeup

自己做的時候  那個INT3斷點一直搞不定 後來按照這篇文章的方法成功

東搞西搞都在瞎搞,今天到合天上面看到一個逆向題(RE200),拿下來搞了一下,學到了點東西,分享一下。

首先當然是執行一下摸摸套路,接著查了一下無殼,之後就是丟進OD開始除錯。

可以根據執行看的字串找個大概位置,往上翻找到函式入口:

functionEP.png

除錯一下就到這邊了,往下走,password1簡單,就是簡單的對比字元,直接拿到:

pw1.png

接著看關鍵的password2,進入函式,跑一下程式死掉了,發現裡面有INT3中斷,INT3是怎麼回事呢,正常執行的時候INT3會交給系統SEH(異常處理)進行處理,而在除錯的時候,中斷會交給偵錯程式

,之後就會異常退出(若想了解更多請移步google,網上資料很多,不贅述)。

intofuntion2.png

INT3.png

這時候我們開啟ODDebugging options,選上INT3 breaks,因為之前程式碼有載入SEH,所以會自動交給SEH處理,處理完再返回函式接著執行。

Debugging options.png

重新除錯發現程式還是跑到結束,沒辦法除錯,因為我們不知道SEH結束後返回的地址,檢視上面載入SEH的程式碼可以發現返回的地址40157F,

SEH.png

但是過去看了一下一堆亂碼,此時我們開啟IDA看一下,真正關鍵程式碼是401547(IDA這邊已經能看到演算法了),我們下個斷點,除錯一下就知道原始字串了,再拿出來與2異或一下就得到結果了:

f2.png

password2.png

1

2

3

4

5

s='75316E6E66326C67'

result=''

for i in range(0,len(s),2):

result+=chr(int(s[i:i+2],16)^2)

print(result)

在《逆向工程核心原理》裡面有一句話:

有時,在某些環境(OS,偵錯程式外掛Bug等)中使用StepInto(F7)或StepOver(F8)命令跟蹤INT3指令會導致偵錯程式非正常終> 止。當遇到這種情況時,請按照以上說明設定好斷點後再按F9執行程式。

我就是這樣的,就是到SEH裡不能再F7或者F8的,必須先找到SEH結束後返回的地址,在那之後下斷點F9。