首页
论坛
课程
招聘
[推荐]IDA sp-analysis failed 不能F5的 解决方案之(二)
2012-11-20 11:20 28984

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

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

如图,


代码是红色的,就是说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就可以了 嘿嘿.

看雪招聘平台创建简历并且简历完整度达到90%及以上可获得500看雪币~

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