【推荐】IDA sp-analysis failed 不能F5的 解决方案之(二)

转:http://bbs.pediy.com/showthread.php?t=158896


高手飘过~,本文章只想让搜索引擎收录,以便那些新手查找的。

如图,
名称:  ida.jpg查看次数: 4文件大小:  48.5 KB


代码是红色的,就是说IDA没有分析出来,为了方便分析,我们会用快捷键P(Create Function) 来创建函数.只是我们在函数头部 按P的时候 总会提示

The function has undefined instruction/data at the specified address.
Your request has been put in the autoanalysis queue.


大家注意 retn  后面两行多余的代码,这是罪魁祸首.如果我们不能创建函数,就不能使用F5来分析代码了,想让这些代码变绿色的方法(创建函数)很简单.
用鼠标从函数头部开始到 retn 结尾 拖一下,变成灰色.

名称:  ida2.jpg查看次数: 1文件大小:  40.5 KB

然后用快捷键 P 或者右键菜单,CreateFunction 来创建函数就可以了。

用拖的方法,去创建一个函数的好处是,我们可以选择任意的一部分IDA分析不出来的代码(就是红色代码),成为一个绿色的代码(IDA可识别的代码).

当然了,到这里也不算完.下图是代码变绿色的,我用上面的方法创建函数了,可还是不能F5,

名称:  ida4.jpg查看次数: 1文件大小:  47.9 KB

我们通过Stack Pointer 发现这个函数的堆栈是不平衡的.此时我们需要找接近retn 的 最后一个Call 然后去修正堆栈.


名称:  ida5.jpg查看次数: 1文件大小:  57.9 KB

我们看到 retn 左边绿色的数字是 28,我们通过ALT + k 修正堆栈,把 28 retn 改成 0 就可以了。
修正堆栈的时候一定要选择 Call 然后修正堆栈,下图是修正后的 代码

名称:  ida7.jpg查看次数: 1文件大小:  57.5 KB

很简单的一个东西,篇幅有点大了,可能存在一些问题,不过我的目的是F5就可以了 嘿嘿.  


引用:
最初由 曾半仙发布  查看帖子
从上往下逐渐的对每个call, 通过编辑功能的堆栈弹出数和保护寄存器数量这样修, 这样可以扩散到以后每个调用的地方. 修好重新点Anaylist, 自动调整某些单独没有接受的地方.
只在最后强行改的话, hexrays为了配平堆栈, 会给一些函数增删错误的参数数量, 导致其他函数分析也会受阻.
 多谢兄台,不过F5本身在参数个数的分析上会有问题,不是很精确,F5之后 点函数用快捷键Y 修正一下函数原型就行了。 


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值