首页
社区
课程
招聘
[推荐]IDA sp-analysis failed 不能F5的 解决方案之(二)
发表于: 2012-11-20 11:20 35852

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

2012-11-20 11:20
35852

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

如图,


代码是红色的,就是说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 结尾 拖一下,变成灰色.



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

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

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



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



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



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


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 11
支持
分享
最新回复 (8)
雪    币: 6962
活跃值: (4172)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
好文, 学习了! 谢谢分享
2012-11-20 13:57
0
雪    币: 3758
活跃值: (3337)
能力值: ( LV15,RANK:500 )
在线值:
发帖
回帖
粉丝
3
从上往下逐渐的对每个call, 通过编辑功能的堆栈弹出数和保护寄存器数量这样修, 这样可以扩散到以后每个调用的地方. 修好重新点Anaylist, 自动调整某些单独没有接受的地方.
只在最后强行改的话, hexrays为了配平堆栈, 会给一些函数增删错误的参数数量, 导致其他函数分析也会受阻.
2012-11-21 06:32
0
雪    币: 142
活跃值: (310)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
4
多谢兄台,不过F5本身在参数个数的分析上会有问题,不是很精确,F5之后 点函数用快捷键Y 修正一下函数原型就行了。
2012-11-23 04:06
0
雪    币: 189
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
经典!简明扼要!很受用!谢谢了。
2013-3-19 08:50
0
雪    币: 29
活跃值: (184)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
受教了,感谢。
2017-8-5 12:36
0
雪    币: 62
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
包含了两个内容,如何创建函数和如何修复sp。很实用。
2017-11-21 17:29
0
雪    币: 45
活跃值: (1679)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
这种强上的修改方法我觉得不太稳妥。我是直接修改了函数体内的几处花指令IDA就可以识别了。
2020-4-3 11:28
0
雪    币: 66
活跃值: (2712)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
太棒了 
2021-6-2 17:51
0
游客
登录 | 注册 方可回帖
返回
//