在 IDA 上修补 MIPS 二进制文件在构建时失败

逆向工程 艾达 固件 米普 修补
2021-07-01 00:27:54

我正在研究从基于 MIPS 的路由器反向二进制文件。为了做到这一点,我正在用 qemu 模拟二进制文件,但二进制文件在声明之前会执行一些例程,如果它没有加载到路由器上,则跳过执行的逻辑。

我确认如果我通过编辑一些字节跳过这些例程的执行,我可以在本地运行二进制文件并动态调试它。现在我正在手动进行,但我想修补它以便我可以更快地运行它。

一旦我更改了一些字节并尝试在 IDA 中导出它,我的问题就来了更改未应用于二进制文件,我无法生成新的二进制文件。

我想用十六进制编辑器编辑二进制文件,但我想知道我是否可以用 IDA 来做。

1个回答

您可以随时尝试取消 IDAPython:

import idaapi
import idc

PATH_TO_COPY_OF_ORIGINAL_FILE = 'some-path'

def apply_patches_to_file(target_file):
    def patch_visitor(ea, fpos, org_val, patch_val):
        target_file.seek(fpos)
        target_file.write(chr(patch_val))

    idaapi.visit_patched_bytes(idc.MinEA(), idc.MaxEA(), patch_visitor)

with open(PATH_TO_COPY_OF_ORIGINAL_FILE, 'r+') as f:
    apply_patches_to_file(f)

只需创建原始文件的副本,设置PATH_TO_COPY_OF_ORIGINAL_FILE,然后试一试脚本。它迭代对 IDB 制作的所有补丁,并尝试将它们应用到文件中。

也就是说,不知道问题的原因 - 此脚本也可能会失败。