二进制补丁¶
二进制补丁用于对设备上的文件或程序进行修补。使用十六进制通配符进行查找并替换,支持高低位通配,如 ??
代表任意一个字节,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 文件。