OllyDBG,设法修补文件,现在我可以自动化吗?

逆向工程 ollydbg
2021-07-03 07:25:30

在 Olly 中,我设法修补文件以不再比较特定标志。有可能自动化吗?

基本上我把 JNZ 改成了 JZ。

有没有办法用十六进制编辑器做同样的事情?

最终目标是创建一个程序来自动化这个补丁。

谢谢。

3个回答

好的,我想你只是想创建一个程序来修补现有的文件,所以我会这样做。


首先,您需要文件中的偏移量。这意味着偏移量 0 是第一个字节,1 是第二个字节,等等,与您在内存中看到的偏移量 + 基数相反。

要获得该偏移量,请右键单击该指令,然后转到View > Executable file

可执行文件(获取偏移量)

你采取抵消:

相对偏移

这就是0x16A7我的情况。


获得偏移量后,您必须编写一个程序来修补程序。这里有几种方法:(我只测试了 Python 一个,但其余的应该可以工作)

C++

#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;
}

C

#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;
}

Python

如果您想编写脚本并且不想打扰 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,用您定义的值修补您定义的偏移。

对于 OllyDBG2,有一个选项: Edit > Copy to Executable

显示上述上下文菜单项