Binärer Patch

Binäre Patches werden verwendet, um Dateien oder Programme auf einem Gerät zu patchen. Es verwendet hexadezimale Wildcards zum Suchen und Ersetzen und unterstützt Wildcards für High- und Low-Nibbles. So steht ?? für ein beliebiges Byte, B? für ein beliebiges Byte, das mit B beginnt, wie z.B. BA, B1, B9. Der Wildcard 49 BA ?? ?C wird beispielsweise jede Sequenz in der Datei finden, die mit 49 BA .. .C übereinstimmt. Der folgende Aufruf ersetzt alle Byte-Sequenzen AA BB CC D[0-9A-F] in test.bin durch AA BB CC DD. Die Funktion gibt die Anzahl der Ersetzungen und deren Offsets zurück.

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

Notiz

Das Beispiel zeigt nur eine Übereinstimmung und Ersetzung von vier Bytes. Die Funktion unterstützt jedoch Übereinstimmungen und Ersetzungen beliebiger Byte-Länge, erfordert aber mindestens zwei gültige Hex-Zeichen für die Suche.

Um die maximale Anzahl der Ersetzungen zu begrenzen, verwenden Sie den Parameter maxreplace. Standardmäßig werden alle Vorkommen ersetzt.

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

Es gibt auch einen Testmodus. In diesem Modus werden nur die übereinstimmenden Positionen in der Datei gefunden, ohne eine Ersetzung durchzuführen.

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

Hinweis

Der Dateipfad unterstützt Wildcard-Matching (Glob). Zum Beispiel wird `/data/app/*/test.bin` die Datei `test.bin` in jedem direkten Unterverzeichnis von `/data/app` finden und patchen.