-
-
[原创]CTF赛题-PC逆向之异常处理
-
发表于:
2020-7-26 10:24
8023
-
本篇文章通过一到看雪签到CTF试题来进行pc逆向,通过练习规范化自己的解题步骤提炼出自己的解题流程。
涉及到知识点:
并且解题过程中需要对md5算法了解一哈,要不然只能用猜的了。
解题
分析赛题,找到赛题中隐藏的flag
运行程序找到输出的中文字符,也可以用通用的字符sucess等
接着搜索字符串,利用交叉引用找到关键函数
由于堆栈不平衡引起F5大法失败,网上有很多解决方法,参考【1】,先开启栈指针、然后将报错位置的上一条指令的栈指针设置为对应的值,依次往下直到让返回地址的栈指针值为000
根据命令行的输出内容可以判断sub_401410是输出函数,sub_401410应该是获取用户输入的函数。
但是从伪代码中并未看见sucess这样的返回字符。
查看当前函数的汇编代码,可以看见sucess字符出现在除0异常处理函数中,F5大法并未生成对应的伪代码。那么现在需要找到函数中哪里有除法运算(DIV)
继续在汇编代码中找DIV指令,伪代码中并未显示除法运算。
如果要满足除0异常也就是要esi寄存器的值为0,往上看可以看见只要eax的值等于esi的值就可以让esi的值为0
上面第一个红框内关于esi赋值的伪代码。输入的每一个字节经过运算后相加。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课