Бинарный патч

Бинарные патчи используются для внесения исправлений в файлы или программы на устройстве. Для поиска и замены используются шестнадцатеричные маски, поддерживающие подстановку для старшего и младшего полубайта. Например, ?? представляет любой байт, B? представляет любой байт, начинающийся с B (например, BA, B1, B9), а маска 49 BA ?? ?C будет соответствовать любому сегменту в файле, совпадающему с 49 BA .. .C. Следующий вызов заменит все байты AA BB CC D[0-9A-F] в файле test.bin на 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 найдет и сопоставит все файлы test.bin в любом подкаталоге первого уровня в директории /data/app.