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

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