我正在修补 OSX 上的可执行文件。到目前为止,我知道补丁已成功应用。
采取的步骤(通过 LLDB):
lldb /users/Brandon/Desktop/Test.app/Contents/MacOS/Test
b start
run
br del 1
memory write 0x0006cc9f 0xB8
memory write 0x0006cc9f 0x01
memory write 0x0006cc9f 0x00
memory write 0x0006cc9f 0x00
memory write 0x0006cc9f 0x00
process continue
一切正常。以上改动:
call testFunc
到mov eax, 1
。TestFunc 很简单,它看起来像:
bool testFunc()
{
return 0;
}
现在如果我通过 IDA-Pro/Hex-Rays 应用这个补丁,它不会运行!我通过 IDA-Pro 应用了补丁并运行了可执行文件,但该功能似乎从未被执行过。
但是,如果我使用相同的修补可执行文件并运行:
memory read 0x0006cc9f
它打印:0xB8, 0x01, 0x00, 0x00, 0x00
这是我的补丁!所以补丁被应用了。
现在,如果我memory write
在已打补丁的可执行文件上在 lldb 中运行相同的代码,则process continue
该可执行文件的行为正确。
我怀疑这是因为它是某种内存保护。修补后如何重新保护我的可执行文件?