CTF挑戰賽-合天網安實驗室-Reverse逆向200writeup
自己做的時候 那個INT3斷點一直搞不定 後來按照這篇文章的方法成功
東搞西搞都在瞎搞,今天到合天上面看到一個逆向題(RE200),拿下來搞了一下,學到了點東西,分享一下。
首先當然是執行一下摸摸套路,接著查了一下無殼,之後就是丟進OD開始除錯。
可以根據執行看的字串找個大概位置,往上翻找到函式入口:
除錯一下就到這邊了,往下走,password1簡單,就是簡單的對比字元,直接拿到:
接著看關鍵的password2,進入函式,跑一下程式死掉了,發現裡面有INT3中斷
,INT3是怎麼回事呢,正常執行
的時候INT3會交給系統
的SEH(異常處理)
進行處理,而在除錯的時候
,中斷會交給偵錯程式
異常退出
(若想了解更多請移步google,網上資料很多,不贅述)。
這時候我們開啟OD
的Debugging options
,選上INT3 breaks
,因為之前程式碼有載入SEH
,所以會自動交給SEH處理
,處理完再返回函式接著執行。
重新除錯發現程式還是跑到結束,沒辦法除錯,因為我們不知道SEH結束後返回的地址,檢視上面載入SEH的程式碼可以發現返回的地址40157F,
但是過去看了一下一堆亂碼,此時我們開啟IDA
看一下,真正關鍵程式碼是401547
(IDA這邊已經能看到演算法了),我們下個斷點,除錯一下就知道原始字串了,再拿出來與2異或
一下就得到結果了:
1 2 3 4 5 |
|
在《逆向工程核心原理》裡面有一句話:
有時,在某些環境(OS,偵錯程式外掛Bug等)中使用StepInto(F7)或StepOver(F8)命令跟蹤INT3指令會導致偵錯程式非正常終> 止。當遇到這種情況時,請按照以上說明設定好斷點後再按F9執行程式。
我就是這樣的,就是到SEH裡不能再F7或者F8的,必須先找到SEH結束後返回的地址,在那之後下斷點F9。