在 Olly 中,我设法修补文件以不再比较特定标志。有可能自动化吗?
基本上我把 JNZ 改成了 JZ。
有没有办法用十六进制编辑器做同样的事情?
最终目标是创建一个程序来自动化这个补丁。
谢谢。
在 Olly 中,我设法修补文件以不再比较特定标志。有可能自动化吗?
基本上我把 JNZ 改成了 JZ。
有没有办法用十六进制编辑器做同样的事情?
最终目标是创建一个程序来自动化这个补丁。
谢谢。
好的,我想你只是想创建一个程序来修补现有的文件,所以我会这样做。
首先,您需要文件中的偏移量。这意味着偏移量 0 是第一个字节,1 是第二个字节,等等,与您在内存中看到的偏移量 + 基数相反。
要获得该偏移量,请右键单击该指令,然后转到View > Executable file
:
你采取抵消:
这就是0x16A7
我的情况。
获得偏移量后,您必须编写一个程序来修补程序。这里有几种方法:(我只测试了 Python 一个,但其余的应该可以工作)
#include <iostream>
#include <fstream>
int main() {
std::ofstream f("file_to_patch.exe", std::ios::binary);
// seek to the desired offset
f.seekp(0x16A7);
// \x74 to \xEB, for example (conditional short to unconditional short)
const char bytes[] = "\xEB";
f.write(bytes, sizeof(bytes));
f.close();
return 0;
}
#include <stdio.h>
int main(void) {
FILE* f = fopen("to_patch.exe", "r+b"); // open
fseek(f, 0, 0x16A7); // seek to the offset to patch
fwrite((void*) "\xEB", 1, 1, f);
fclose(f);
return 0;
}
如果您想编写脚本并且不想打扰 C/C++,这里是您使用 Python 的方法:
f = open("to_patch", "r+b") # open in read/write binary
f.seek(0x16A7) # seek to the previously found offset
f.write(bytearray([0xEB])) # patch the jump
f.close()
如果你想要一个补丁工具,你不需要编码。使用 dUP (diablo2oo2 Universal Patcher) 或 R!SC Process Patcher 轻松创建一个 .exe,用您定义的值修补您定义的偏移。