直接运行,给一个任意输入,如图1: 拖入IDA分析,如果输入正确结果,程序输出“success!”。如图2: 接着发现使用了gets函数来接收输入,可能存在栈溢出的漏洞,给一个超长输入,发现main函数返回时崩溃,说明应该是覆盖到返回地址了,程序存在漏洞,如图3: 分析栈空间可知,main函数返回地址为0x0040292f,我们只需输入内容覆盖该地址即可改变程序流程。如图4: 分析可知,成功模块的地址为0x004027e6,所以我们只需要将栈上0x0040292f覆盖为0x004027e6即可。如图5: 当将我们精心构造的输入结果输入时,程序成功走到“success!”分支,其中的字符‘a’可替换为其他任意可输出字符,所以程序应该存在多解的情况。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)