向PE添加字节而不影响执行

时间:2016-09-04 17:15:26

标签: assembly reverse-engineering portable-executable

正如标题所说,这将如何完成?如果我在操作码的开头添加了一个字节,它会用一个字节推送内存中的地址。如果你不明白这个问题:

原:

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 个答案:

答案 0 :(得分:2)

不好意思,因为它会

  • 转移一些相对跳跃(不是全部)
  • 如果代码不是与位置无关的,则移位重定位偏移量

当我以前破解游戏时,我把N​​OPs INSTEAD代码放在那里就没问题了,但有时你需要做更多的事情:

备选方案:

  • 找到一个空闲/未使用的程序区域(例如,像无法访问的健壮性代码)并在那里移动一些原始代码。然后jsr到它并添加您的自定义代码。
  • 反汇编可执行文件,以便可以重新组装并按原样添加代码。此方法要求您识别所有代码和数据部分因此更难,但最后你可以在程序中添加任何内容。