OSX 上的补丁应用程序(内存保护)

逆向工程 操作系统 修补
2021-06-28 00:20:20

我正在修补 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 testFuncmov eax, 1TestFunc 很简单,它看起来像:

bool testFunc()
{
    return 0;
}

现在如果我通过 IDA-Pro/Hex-Rays 应用这个补丁,它不会运行!我通过 IDA-Pro 应用了补丁并运行了可执行文件,但该功能似乎从未被执行过。

但是,如果我使用相同的修补可执行文件并运行:

memory read 0x0006cc9f

它打印:0xB8, 0x01, 0x00, 0x00, 0x00这是我的补丁!所以补丁被应用了。

现在,如果我memory write在已打补丁的可执行文件上在 lldb 中运行相同的代码,则process continue该可执行文件的行为正确。

我怀疑这是因为它是某种内存保护。修补后如何重新保护我的可执行文件?

1个回答

默认情况下,IDA Pro 不允许修补图像。当 IDA Pro 分析一个二进制文件时,它被读入它的格式;从那时起的原始可执行文件不需要存在。

但是,您可以启用IDA Pro 修补功能,但您必须确保拥有原始二进制文件。随着打补丁在IDA Pro的配置启用,您可以选择从下拉菜单如下:Edit > Patch Program > Apply Patch保证提交了更改。

值得注意的是,IDA Pro 警告用户要谨慎使用此功能。不确定它是否经过正式测试,这可能意味着您将收到未定义的行为。如果您有疑问,我建议您使用其他一些实用程序(十六进制编辑器、调试器/反汇编器)进行修补。