【发布时间】:2017-01-12 04:05:19
【问题描述】:
正如标题所说,这将如何完成?如果我在操作码的开头添加一个字节,它将用一个字节将地址推送到内存中。如果你不明白这个问题:
原文:
0x1 mov ecx, 10
0x2 mov eax, 1
0x3 inc eac
0x4 cmp eax
0x5 jl 0x3
添加字节:
0x1 NOP
0x2 mov ecx, 10
0x3 mov eax, 1
0x4 inc eac
0x5 cmp eax
0x6 jl 0x3
我是否必须手动设置每个 jmp、调用等,还是有其他方法可以做到这一点?
【问题讨论】:
-
您必须手动检查程序中使用的每个内存地址,看看是否需要调整。在一个重要的程序中,这是不切实际的,因为您需要修复的地址可能在任何地方。另请注意,您列出的大多数指令长度都超过 1 个字节。
-
嗯,这可能不是完全相同的副本。我选择的 dup-target 是关于添加新代码的一种特定方法(将其放在新部分中,并用 jmp 替换一些现有的 insn),但 Jean-François 的回答指出了其他技术。
标签: assembly reverse-engineering portable-executable