IDA F5 在 CTF逆向中的坑

2018-08-24 15,767

CTF逆向中有部分题目,只需要静态分析就可以得到答案。出题者为了增加难度,会利用IDA F5bug,致使生成伪代码时出错,从而降低分析效率。


现以上次比赛的cracking_game为例,讲解如何绕过这些坑。

cracking_game下载见:https://mp.weixin.qq.com/s/YEO_-Mm4y0fyor5GV_2V6w


 将cracking_game程序拖入IDA,按F5,发现报错。


image.png


勾选后所有的反汇编代码将会显示出IDA模拟出来栈地址的值:

image.png


    在6BA处,我们可以看到sp已经是-4了,看函数开头只有pop,没有push,导致带偏IDA。默认下函数栈地址应该是0,而非-4,我们将6BA处的SP强制设置为0再F5分析。操作方法如下:

  1. 鼠标选择6BA的上一行汇编代码;

  2. 选择editor的Functions,按Change stack pointer

    (也可以直接在代码处右键选择Change stack pointer);

  3. 在弹出的框中,输入-4(因为当前sp值为4,所以要-4),确保初始的sp为0。


image.png


强制修改后的sp如下:

image.png

按F5即可显示出伪代码。

image.png


    然后对于该题,关键函数在4E0处。我们执行F5时,爆出另外一个错误:


image.png


由提示信息可以得知: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.将函数填写进去。

image.png


填写具体方法如下图:

image.png


点击确认后,IDA将会识别函数参数,这时再F5即可得到伪代码。


image.png


本文作者:ReadOnly

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/74715.html

Tags:
评论  (0)
快来写下你的想法吧!

ReadOnly

文章数:3 积分: 20

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号