Easy_Re

本題要點: ExeinfoPE查殼、IDA靜態調試、OD動態調試、jnz指令
下載這個exe文件~


cmd里面運行一下這個程序,隨便輸一下flag,錯誤,然后結束了......


emmm.....老辦法,先去查查有沒有殼吧~

我們可以看到這個程序是
Visual C++ 編寫的,因此沒有殼。
放到
IDA 里看看~
emmm.....沒有main函數........
經筆者查閱資料,發現沒有
main函數 也是正常的,因為:
-------------------------------------------------------------------------
我們平時接觸VC++的時候,第一個接觸到的恐怕是WinMain和main,對應於Win32子系統的Windows窗口系統和控制台兩個部分,最多是一些書籍上談到了對應多字節字符集的幾個變種。
其實,這幾個入口點函數是VC++帶有的C運行庫要求的入口點。
真正的vc程序的入口點函數是在使用VC++的C編譯器編譯程序時指定的。
-------------------------------------------------------------------------
那么這么多指令應該怎么看呢,還記得我們運行之后的提示嗎?


那肯定程序里面存在這些字符串,我們直接搜索這些字符串,就能定位到程序運行的情況啦~

定位到了~
看一下前后的指令和解釋,我們發現有一串比較長的數據字符串,

選中
3074656D30633165577B465443545544h 這個變量,然后在鍵盤上按
a ,就可以顯示字符串~

看到flag啦~

當然我們也可以放進
OD 里面看看~
方法1:
我們在插件里的 中文搜索引擎=》智能搜索


方法2:
中文搜索引擎=》選擇 搜索ASCII

其實這里也能看到flag啦~
但是我們還是學一下怎么判斷flag提交正確的指令吧~
jnz指令 ( 判斷是否是正確的標志)
雙擊定位為
flag get 的地方。

進去我們可以看到
jnz指令 , 在這里下一個斷點(鍵盤上按f2)。如果它跳轉會跳轉到下面,顯示flag不太對,不跳轉就會顯示出flag get。
在調試過程中,注意
寄存器窗口 的變化~


在鍵盤上按
f9 ,開始調試

在窗口隨便輸一些字符串

接着
f8 單步運行一下

直接跳在
flag不太對喲 這一句
看一下右邊的寄存器窗口~

flag:
DUTCTF{We1c0met0DUTCTF}


完成~
參考資料:
https://blog.csdn.net/iteye_3759/article/details/81593120
https://blog.csdn.net/qq_38796701/article/details/80491298