ida pro 使用F5碰到的陷阱与总结

本文讲述了在破解Flare-7的Crackme过程中,作者发现F5插件未能正确逆向loc_804c3c4处的内存循环技巧,导致错误的算法实现。通过手动分析汇编代码,揭示了F5对特定代码段的翻译缺陷,并强调了在面对复杂代码时人工检查的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

姑且称之为“陷阱”吧,如下,直接上代码:

最近在做Flare-7 的break这道题,算是对linux下没有采用vm保护技术的crackme的一种挑战,遇到了下述的代码:

上图红色部分,明显执行时会报错;这是break这个crackme采取的一种机制,sub_0804C369这个进程是有另一个进程attach它的,并接收它的信号,进行相应的处理。上图红色部分会报SIGSEGV信号,查看调试它的进程的代码,如下:

 可以看到,V34是栈保存的下一条指令,v33就是第一张图中的&loc_804c3c4,v32保存的是第一张图中的&v5,初始是0。那么调试进程的第二张图的代码的意思就是跳转回loc_804c3c4进行执行,直到第16次碰到MEMORY[0](&loc_804C3C4, &v5),则结束循环。

这就是这个crackme与常规程序不一样的地方之一,

我们要说的F5出的问题在哪呢? 这也是我还太缺乏调试经验,我们可以看到loc_804c3c4这里的汇编代码是这样子的:

 

而我们之前在第一张图里看到的F5自动逆向过来的伪代码是chmod(a4,back)。

所以说,这里F5插件有一些指令没有做逆向,或者他可能认为无用忽略了吧:)害的我这逆向新入门的新手,对着F5代码写了个计算这个crackme的password中间部分的算法,结果不是希望得到的。

--------------------------------------------------------------------------------------------------------------------------

接着上面的,经过测试,应该是因为这段代码中一开始[ebp+v5]=0,所以后面那些指令计算的结果都是0,F5翻译过来也没有必要。因为F5不会帮我们去自动翻译那个MEMORY[0](&loc_804C3C4, &v5)循环,所以它确实没必要翻译这一段。这也告诉我们,以后如果遇到这种技巧,还是要人工看一下汇编代码,才能做到对机器语言翻译的正确。如下图,

把[ebp+v5]手动改为1,

 再按F5看一下,结果就发生变化了

因为F5识别不了这种循环,所以只能翻译成这个样子了。总之,F5是没有问题的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值