二进制修补 - 修改现有指令并保持机器代码对齐

时间:2013-07-18 13:32:38

标签: assembly reverse-engineering ida

我想编辑第一条指令并将其更改为jmp 100h(给出或取几个字节) mov edi,edi占用2个字节而jmp 100h需要5个字节(如果我错了,请纠正我)

我将机器代码编辑为jmp 100h并添加nop以将其舍入为6个字节。

.text:08048DD5                 mov     edi, edi
.text:08048DD7                 mov     edi, edi
.text:08048DD9                 mov     edi, edi
.text:08048DDB                 mov     edi, edi
.text:08048DDD                 mov     edi, edi
.text:08048DDF                 mov     edi, edi
.text:08048DE1                 mov     edi, edi
.text:08048DE3                 mov     edi, edi
.text:08048DE5                 add     [ebp+var_C], 1  ; Add
.text:08048DE9                 mov     eax, offset format ; "Message %d: %s"
.text:08048DEE                 lea     edx, [ebp+s]    ; Load Effective Address
.text:08048DF4                 mov     [esp+8], edx

结果如下:

.text:08048DD5                 jmp     loc_8048D41
.text:08048DD5 ; ---------------------------------------------------------------------------
.text:08048DDA                 db 90h
.text:08048DDB                 db 89h, 0FFh
.text:08048DDD                 db 89h, 0FFh
.text:08048DDF                 db 89h, 0FFh
.text:08048DE1                 db 89h, 0FFh
.text:08048DE3                 db 89h, 0FFh
.text:08048DE5 ; ---------------------------------------------------------------------------
.text:08048DE5                 add     [ebp+var_C], 1
.text:08048DE9                 mov     eax, offset aMessageDS ; "Message %d: %s"
.text:08048DEE                 lea     edx, [ebp+s]
.text:08048DF4                 mov     [esp+8], edx
.text:08048DF8                 mov     edx, [ebp+var_C]

这里到底出了什么问题?如何保持其余代码完好无损?

1 个答案:

答案 0 :(得分:4)

看起来很有效,但反汇编程序并没有将数据解释为指令。这可能是因为前面的jmp指令 - 反汇编程序看到它后面的代码永远不会到达,所以它假定它实际上不是代码(因此将其解释为直接数据)。