Bugku-CTF逆向篇之Easy_Re


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
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM