白影33 发表于 2021-4-26 16:18

用DUMP的方式解决IDA F5失败

本帖最后由 白影33 于 2021-4-27 16:38 编辑

# 用DUMP的方式解决IDA F5失败

## 0x0 问题表述



在定位关键算法后我们一般使用F5,查看算法,在按下后提示

Decompilation failure:

401E37: positive sp value has been found

Please refer to the manual to find appropriate actions

中文意思是sp的值有问题

## 0x1 常规方法尝试

找到的解决办法说修改sp,让sp为0



我们在设置打开option》GENERAL》stack pointer把这个选项勾上,就可以看见sp是多少了





红圈里那个绿色的值就是sp,现在为-0x18,我们按atl+k,打开修改sp窗口,修改宁一个红圈的值为-0x18,





点击ok,就修复完成了,可以看到sp为0了



```
int sub_401810()
{
int result; // eax
CPPEH_RECORD ms_exc; //

ms_exc.registration.TryLevel = 0;
MEMORY = 6530;
JUMPOUT(__CS__, 0);
return result;
}
```

我们按F5看一下,结果明显是错的。这个方法不行。



另一个办法

```
废话我就不多说了,造成不能F5的原因在于:
.text:00401642               mov   eax, offset loc_40164A
.text:00401647               jmp   eax
用OD打开之后 改掉代码在保存,然后重新用IDA打开 F5就可以了,sp-analysis failed 也就消失了.

在OD里直接改成 JMP40164A   

分析之后不难发现不能F5的原因,就在于跳转.
一个函数里面的一个跳转在未知的情况下会出现不能F5.

```

这个办法来自于《IDA sp-analysis failed 不能F5的 解决方案之(一)》

```
.text:00401859               mov   , 0
.text:00401860               mov   eax,
.text:00401866               mov   dword ptr , 1982h

.text:0040186C               jmp   


```

函数内所有的jmp都看了一下,只有40186c这个不是跳转的一个确定的地址。

本来想在OD里看一下值是多少,然后把这个jmp改成跳转到固定地方,

结果发现开头的这一小段的任何一句汇编都没有执行,也就是说这里是什么都不影响程序执行。

```
.text:00401860               mov   eax,
.text:00401866               mov   dword ptr , 1982h
.text:00401866 sub_401810      endp
.text:00401866
.text:00401866 ; ---------------------------------------------------------------------------
.text:0040186C               db 0FFh
.text:0040186D               db 0A5h
.text:0040186E               db58h ; X
.text:0040186F               db 0F7h
.text:00401870               db 0FFh
.text:00401871               db 0FFh
```

干脆直接按d改成数据,再次F5依旧是错的。

## 0x2我的办法

既然在od里是可以运行的,说明函数有办法识别

我就在函数各处下断,断在0x401980 jmp short 00401991,在函数内这条指令之前的汇编代码都没有执行



选择函数内所有会执行的代码->备份->保存数据到文件.



ida打开文件,Edit->Segments->Rebase Program修改基地址,od里查看基地址为0x401000,


然后找到0x401980 jmp short 00401991的位置,在这条汇编那进行图中的选择创建函数,我已经创建过了所以是灰的。



简单看了一下,算法没问题,F5成功。

redapple2015 发表于 2021-4-26 17:18

楼主的方法不错,学习了。我照着操作了一下,还是有学习的地方

傅粉何郎 发表于 2021-4-26 20:23


楼主的方法不错

Hmily 发表于 2021-4-27 16:03

“宁一个办法”有错别字。

白影33 发表于 2021-4-27 16:39

Hmily 发表于 2021-4-27 16:03
“宁一个办法”有错别字。

谢谢老大的指出,已改正

我总是用菊花 发表于 2021-4-27 22:24

请问下有源文件嘛想试试

白影33 发表于 2021-4-27 23:14

我总是用菊花 发表于 2021-4-27 22:24
请问下有源文件嘛想试试

面试题程序,不方便给

htpidk 发表于 2021-4-28 13:19

下次遇到试试看
页: [1]
查看完整版本: 用DUMP的方式解决IDA F5失败