Patch Binaire

Les patchs binaires sont utilisés pour corriger des fichiers ou des programmes sur un appareil. Ils effectuent une recherche et un remplacement à l'aide de caractères génériques hexadécimaux. La correspondance partielle d'octets est prise en charge : par exemple, ?? représente n'importe quel octet, et B? représente n'importe quel octet commençant par B (comme BA, B1, B9). Ainsi, les caractères génériques 49 BA ?? ?C correspondront à n'importe quel segment du fichier qui correspond au motif 49 BA .. .C. L'appel suivant remplacera toutes les occurrences de la séquence d'octets AA BB CC D[0-9A-F] par AA BB CC DD dans le fichier test.bin. L'interface retournera le nombre de remplacements effectués ainsi que leurs offsets.

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

Remarque

La démonstration ne montre qu'une correspondance et un remplacement de quatre octets, mais l'interface prend en charge des séquences de n'importe quelle longueur, à condition que le motif de recherche contienne au moins deux caractères hexadécimaux valides.

Pour limiter le nombre maximal de remplacements, utilisez le paramètre maxreplace. Par défaut, toutes les correspondances sont remplacées.

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

Il existe également un mode de simulation (dryrun), qui se contente de rechercher les correspondances dans le fichier sans effectuer de remplacement.

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

Astuce

Le chemin du fichier prend en charge les caractères génériques de type glob. Par exemple, `/data/app/*/test.bin` recherchera le fichier `test.bin` dans n'importe quel sous-répertoire direct du répertoire `/data/app`.