IDA Pro - 修改 JMP 指令时出错

逆向工程 艾达 ollydbg
2021-06-12 00:21:21

我是 ASM 的新手。在 64 位可执行文件上使用 IDA Pro 6.8。

我无法修改此指令的 jmp 地址:

    ........   
    .text:0000000141BAFB57 loc_141BAFB57:                          
    .text:0000000141BAFB57                 lea     rcx, [rbp+520h+var_20]
    .text:0000000141BAFB5E                 lea     rdx, abc_data
    .text:0000000141BAFB65                 call    sub_141CCAC80
    .text:0000000141BAFB6A                 jmp     loc_141BAF9D6
    .text:0000000141BAFB6A subroutine endp
    .text:0000000141BAFB6A
    .text:0000000141BAFB6F

我想要么将 jmp 地址从 loc_141BAF9D6 更改为 loc_141BAFA9C 要么只是 nop 指令...

每次我在 IDA Pro 6.8 中尝试此操作时,它都会将 jmp(或 nop)指令移到子例程 endp 关闭之外,因此 IDA 现在给我一个 SP-Analysis failed 错误...例如:

.text:0000000141BAFB57 loc_141BAFB57:                          
.text:0000000141BAFB57                 lea     rcx, [rbp+520h+var_20]
.text:0000000141BAFB5E                 lea     rdx, abc_data
.text:0000000141BAFB65                 call    sub_141CCAC80
.text:0000000141BAFB65 subroutine endp ; sp-analysis failed
.text:0000000141BAFB65
.text:0000000141BAFB6A                 jmp     loc_141BAFA9C
.text:0000000141BAFB6F

我已经尝试通过 Edit > Patch Program Assemble 直接在 HEX 视图中编辑指令,使用 IDAPatcher,并使用 Fetanyl 插件......它总是将指令移到 endp 语句之外,破坏代码......

这在一般情况下是不可能的还是我做错了什么?

我试过 OllyDbg 但它不能打开 64 位文件...

1个回答

有可能的。我认为这是 IDA 中的错误(编辑函数的最后一条指令会将其从函数中删除,我成功地重现了此行为),但是您可以通过在修补后修复该函数来解决该问题。

最简单的方法如下:

  1. 打完补丁后
  2. 将光标置于 IDA-View-A 窗口(常规汇编窗口)中从函数中移除的指令
  3. 然后按 E。这将定义当前指令的函数结束,这意味着它之前所在的地址。

您可以通过在函数属性对话框(编辑->函数->编辑函数或Alt-P. 祝你好运。