二进制补丁

二进制补丁用于对设备上的文件或程序进行修补。使用十六进制通配符进行查找并替换,支持高低位通配,如 ?? 代表任意一个字节,B? 代表任意字节以 B 开始,如 BA B1 B9,如通配符 49 BA ?? ?C 将会匹配文件中任意和 49 BA .. .C 匹配的段落。以下调用将会把 test.bin 中的所有 AA BB CC D[0-9A-F] 字节替换为 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)

还有测试模式,这样仅会为您在文件中查找匹配位置而不进行替换操作。

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

提示

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