IDA插件Ponce(符號執行) 解決網鼎杯Re-signal

這題很簡單,最終的做題人數也體現了這一點。。

不過前段時間剛接觸了Ponce這一IDA插件神器,就試一試比賽裏好不好使。(主要就是懶,不想逆向分析算法了)

main:

打印第8行puts,似乎就是success的意思;

看一下前面的vm_operad:

一個大while(1)循環,但對於Ponce來說,只需關心哪裏輸入,哪裏success,哪裏wrong。

這裏的26行read函數就是要求輸入長度爲15

OK,開始下斷點調試

首先,在scanf函數後一行下個斷點,方便在棧中找到輸入的數據

之後在printf("what a shame...");exit();那裏的判斷語句處下個斷點,方便Ponce的使用

之後打開Ponce,選擇Symbolic engine(符號引擎)

OK後開始調試,輸入15個字符來到第一個斷點

數據跟隨,找到輸入字符串的位置(0x0061FBC3-0x0061FBD1)

ctrl+shift+M將其轉化爲符號

之後F9運行來到另一個斷點

這時程序會走右邊也就是exit(),畢竟輸入的不對嘛。

先用Ponce分析得到這一位正確的答案,再通過修改EIP讓程序往左走,繼續下一次循環。

 

這時Ponce就分析出了第一位的正確答案  7(Output)

之後就修改EIP讓程序往左走繼續循環,重複上面的操作,記錄下每一次的最後一位,組合在一起就能獲得15位的flag了。

例:

757515121f3d478,提交時加上flag{}

 

Ponce插件下載:https://github.com/illera88/Ponce

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章