二进制补丁

二进制补丁用于对设备上的文件或程序进行修补。使用十六进制通配符进行查找并替换,支持高/低位通配。例如,?? 代表任意一个字节,B? 代表以 B 为高位(即 B0-BF)的任意字节,如 BAB1B9。模式 49 BA ?? ?C 会匹配文件中任意符合该模式的字节序列。以下调用将把 test.bin 中所有与 AA BB CC D? 匹配的字节序列替换为 AA BB CC DD,接口会返回替换的数量以及每次替换的偏移。

d.hex_patch("AA BB CC D?", "AA BB CC DD", "/data/test.bin")
>>> result = d.hex_patch("AA BB CC D?", "AA BB CC DD", "/data/test.bin")
>>> print(result.count)
1
>>> print(result.replaces[0].offset)
8123

备注

演示中仅展示了四字节的匹配与替换,接口实际支持任意长度的多字节匹配和替换,但匹配模式至少需要两个有效的十六进制字符(即至少一个非通配的字节)。

如需限制最大替换数量,可通过 maxreplace 参数进行设置,默认会替换全部匹配项。

d.hex_patch("AA BB CC D?", "AA BB CC DD", "/data/test.bin", maxreplace=2)

还可以通过 dryrun 参数启用测试模式,此时仅会为您在文件中查找匹配位置,而不进行实际的替换操作。

d.hex_patch("AA BB ?? ??", "AA BB 00 00", "/data/test.bin", dryrun=True)

提示

文件路径支持使用通配符匹配(glob)。例如 /data/app/*/test.bin 将匹配 /data/app 目录下任意一级子目录中的 test.bin 文件。