兩個入門級的脫殼的CTF題目,記錄一下。
一、逆向脫殼入門題目
1.nSpack殼
先用IDA打開看看:
可以看到有殼,而且解析出來的函數很少,對脫殼後的文件如下:
可以看到多出了很多函數。
用ESP定律進行脫殼,OD打開軟件後如圖:
可以看到了pushad,壓入所有寄存器入棧,F8到調用的函數下在右邊的ESP處下硬件斷點如圖:
可以看到 popfd,並且緊接着進行一次遠跳,F8跟進。
基本1336就是OEP了,此處有兩種脫殼方法,第一種用PETOOL進行DUMP,第二種直接用OD進行脫殼,本文使用OD進行脫殼。1336處右鍵分析->從目標出刪除模塊掃描後,如圖:
1336爲程序的入口點,F7跟進:
接下來就到了熟悉的地方,直接使用ODDump脫殼:
脫殼後使用IDA進行算法逆向破解即可。
2.Reversing.kr的esay unpack
有耐心的一點一點F8。
發現一個遠跳,F8跟進,分析->刪除模塊等操作在分析算法,1150即爲OEP。
二、 上述使用的單步跟蹤法
1、用OD載入待脫殼文件,如果出現壓縮提示,選擇“不分析代碼”;
2、向下單步跟蹤,實現向下的跳轉;
3、遇到程序往上跳轉的時候(包括循環),在回跳的下一句代碼上單擊並按鍵盤上的“F4”鍵跳過回跳指令;
4、OD中的綠色線條表示跳轉沒有實理,不必理會,紅色線條表示跳轉已經實現;
5、如果剛載入程序的時候,在附近有一個CALL指令,那麼就要按鍵盤上的“F7”鍵跟進這個CALL內,不然程序很容易運行起來;
6、在跟蹤的時候,如果執行某個CALL指令後就運行,一定要按鍵盤上的“F7”鍵進入這個CALL之內再單步跟蹤;
7、遇到在popad指令下的遠轉移指令時,要格處注意,因爲這個遠轉移指令的目的地很可能就是OEP。