在CTF逆向中有部分题目,只需要静态分析就可以得到答案。出题者为了增加难度,会利用IDA F5的bug,致使生成伪代码时出错,从而降低分析效率。
现以上次比赛的cracking_game为例,讲解如何绕过这些坑。
cracking_game下载见:https://mp.weixin.qq.com/s/YEO_-Mm4y0fyor5GV_2V6w
将cracking_game程序拖入IDA,按F5,发现报错。
勾选后所有的反汇编代码将会显示出IDA模拟出来栈地址的值:
在6BA处,我们可以看到sp已经是-4了,看函数开头只有pop,没有push,导致带偏IDA。默认下函数栈地址应该是0,而非-4,我们将6BA处的SP强制设置为0再F5分析。操作方法如下:
鼠标选择6BA的上一行汇编代码;
选择editor的Functions,按Change stack pointer
(也可以直接在代码处右键选择Change stack pointer);
在弹出的框中,输入-4(因为当前sp值为4,所以要-4),确保初始的sp为0。
强制修改后的sp如下:
按F5即可显示出伪代码。
然后对于该题,关键函数在4E0处。我们执行F5时,爆出另外一个错误:
由提示信息可以得知:52D处的call printf_chk函数分析遇到问题了,该问题是由IDA不能正确识别函数参数个数导致。
我们进行如下操作解决该问题:
1.在call函数出选择___printf_chk;
2.选择Edit 的 Functions---》Set type;
3.查询printf_chk函数原型为:
int ___printf_chk (int flag, const char *format, ...)
4.将函数填写进去。
填写具体方法如下图:
点击确认后,IDA将会识别函数参数,这时再F5即可得到伪代码。
本文作者:ReadOnly
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/74715.html