【发布时间】:2026-01-19 15:00:01
【问题描述】:
我正在尝试编写一个 exe 打包程序/保护程序,以此来了解更多关于汇编程序、c++ 以及 PE 文件如何工作的信息。我目前已经让它工作了,所以包含 EP 的部分与一个密钥进行异或,并创建了一个包含我的解密代码的新部分。一切都很好,除非我在解密后尝试 JMP 到原始 EP。
基本上我是这样做的:
DWORD originalEntryPoint = optionalHeader->AddressOfEntryPoint;
// -- snip -- //
crypted.put(0xE9);
crypted.write((char*)&orginalEntryPoint, sizeof(DWORD));
但 ollydbg 并没有跳转到入口点,而是显示这段代码反汇编为:
00404030 .-E9 00100000 JMP 00405035 ; should be 00401000 =[
当我尝试在 olly 中手动更改它时,新的操作码显示为
00404030 -E9 CBCFFFFF JMP crypted.00401000
0xCBCFFFFF 是从哪里来的?我将如何从 C++ 端生成它?
【问题讨论】:
-
对于任何可能偶然发现这一点的人,在 RE.SE 上有一个类似的问题,我提供了非常详细的解释:reverseengineering.stackexchange.com/questions/19459/…
标签: assembly x86 executable masm opcode