Die Datei, die die Schritte zum Patchen (siehe unten / kurz: Patch-Datei) enthält, muss den gleichen Namen (Wichtig: Paketnamen) wie die App haben (beachte Groß-und Kleinschreibung).
Falls schon ein benutzerdefinierten Patch für die App existiert, kannst du die Schritte (siehe unten) einfach in eine .txt-Datei einfügen.
Wenn du einen benutzerdefinierten Patch für eine ganze Reihe von Apps (vom gleichen Entwickler) erstellen möchtest, musst du den Namen verändern. Beispiel: Du kannst z.B. "_%25ALL%25" benutzen. (Name des Patches für z.B. alle SVOX-Apps würden folgendermaßen aussehen: com.svox.classic.langpack_%25ALL%25.txt.) "_%25ALL%25" meint ein Teil des Pakets, dass von der App variiert und diesen ersetzt. Verwenden Sie keine Sonderzeichen / Formatierungen in der Patch-Datei. (nur einzelne Leerzeichen)
Um nach den Bytes zu suchen, verwenden sie bitte IDA Pro 6.1. Es kann die Dalvik-Cache, die ODEX, die Bibliotheken und die Classes.dex öffnen.
Falls du die Dalvik-Cache oder ODEX patchen möchtest, vergiss nicht, dass Datenbytes in unterschiedlichen Firmware-Versionen variieren können. Und vergiss auch nicht, dass die Bytes nicht alle nur mit Classes.dex übereinstimmen, sondern auch mit der Dalvik-Cache und der ODEX. Dies kannst du sehen, wenn du die Classes.dex und die ODEX-Datei in IDA Pro öffnest.

[BEGIN]
<Kommentare, die vor dem Patchen zu sehen sind>
Patch für XYZ Pro 5.0

[PACKAGE]
<Entpackt Classes.dex und fügt alle Patches von [CLASSES] ein und erstellt, basierend auf der modifizierten Classes.dex, eine ODEX-Datei.>

[CLASSES]
<Schemasuche / Ersatz für Classes.dex (siehe unten)>
{"search":"63 R00 R01 R02 38 00 04 00 12 10 0F 00"}
{"original":"63 ?? ?? ?? 38 00 04 00 12 10 0F 00"}
{"replaced":"12 00 6A W00 W01 W02 00 00 12 00 0F 00"}

[LIB]
<Schemasuche / Ersatz für genannte systemeigene Bibliothek (siehe unten)>
{"name":"libtitanium.so"}
{"original":"00 ** 50 e2"}
{"replaced":"00 00 50 e1"}

[OTHER FILES]
<Schemasuche / Ersatz für genannte Dateien in /data/data/Ziel_APK/ (siehe unten)>
{"name":"/files/shell.dex"}
{"original":"0F 00 00 00 1A 00 00 00 0F 00 00 00 59 00 00 00 2F"}
{"replaced":"0F 00 00 00 0F 00 00 00 0F 00 00 00 59 00 00 00 2F"}

[ADD-BOOT]
<Automatisches Hinzufügen des Patches in die Boot-Liste. Sollte in den gepatchten Bibliothek genutzt werden (oder im gepatchten [CLASSES] ohne [ODEX] oder ohne [PACKAGE])>

[END]
<Kommentare, die nach dem Patchen zu sehen sind>
Glückwunsch! App wurde gepatcht!

“search” – erlaubt dir nach einem Schema zu suchen und speichert Bytes an bestimmten Stellen.
{"search":"63 R00 R01 R02 38 00 04 00 12 10 0F 00"}
In diesem Beispiel sind die einen Bytes in grün gekennzeichnet, um die "Schemamaske" zu verdeutlichen. Während die anderen Bytes R00 -> R02 in gelb gekennzeichnet / gespeichert sind.
Gespeicherte Bytes müssen in einer bestimmten Reinfolge sein: R00, R01, R02, R03…
Gespeicherte Bytes können nicht wiederholt werden.

“original” – Das ist die "Schemamaske", in dem der Patch angewendet wird.
{"original":"63 ?? ?? ?? 38 00 04 00 12 10 0F 00"}
In diesem Beispiel sind die einen Bytes in grün gekennzeichnet, um die "Schemamaske" zu verdeutlichen. Während die gelb gekennzeichneteten Bytes Zeichen sind (??, **)
“replaced” – das wird einer Anweisung folgen, die überschreibt.
{"replaced":"12 00 6A W00 W01 W02 00 00 12 00 0F 00"}
In diesem Beispiel sind die einen Bytes in grün gekennzeichnet, die den Zielort überschreiben werden. Die Bytes in gelb kommen aus dem zuvor ausgeführten “search”.
“name” – Diese wird verwendet, um eine bestimmte Bibliothek dem Namen nach zu suchen (siehe oben in [LIB])

[ODEX-PATCH] - Verwendung für den Patch wurde bereits als ODEX erstellt. Zum Beispiel: Bei einer App wurde schon die Lizenz durch Lucky Patcher entfernt, aber man muss durch einen Benutzerdefinierten Patch zusätzlich etwas ändern. Wenn wir einfach [PACKAGE]-[CLASSES], [ODEX] oder [CLASSES]-[ODEX] benutzen, wird die ODEX-Datei ohne Änderung erstellt und dann erst gepatcht.
Beispiel:

[BEGIN]
[ODEX-PATCH]
{"original":"63 ?? ?? ?? 38 00 04 00 12 10 0F 00"}
{"replaced":"12 00 6A ?? ?? ?? 00 00 12 00 0F 00"}
[END]
Glückwunsch! ODEX wurde modifiziert!

[CLASSES] ohne [PACKAGE] - patcht die Dalvik-Cache. Vergiss nicht, dass das System regelmäßig Dalvik-Cache-Apps aktualisiert und somit werden alle Änderungen entfernt. Deswegen muss man [ADD-BOOT] hinzufügen. Die veränderte Dalvik-Cache veraltet dann nur, statt ungewollt entfernt zu werden.
Beispiel:

[BEGIN]
[CLASSES]
{"original":"63 ?? ?? ?? 38 00 04 00 12 10 0F 00"}
{"replaced":"12 00 6A ?? ?? ?? 00 00 12 00 0F 00"}
[ADD-BOOT]
[END]
Glückwunsch!

[ODEX] - Kopiert Dalvik-Cache in /data/app/ und benennt es zu einer ODEX-Datei um. Dann werden alle Patches zu dieser ODEX-Datei hinzugefügt. Es kann nicht passieren, dass die Prüfsummen der ODEX falsch sind, im Gegensatz zur Erstellung einer ODEX-Datei mit [PACKAGE] - [CLASSES].
Beispiel:

[BEGIN]
[ODEX]
{"original":"63 ?? ?? ?? 38 00 04 00 12 10 0F 00"}
{"replaced":"12 00 6A ?? ?? ?? 00 00 12 00 0F 00"}
[END]
Glückwunsch!

[CLASSES]-[ODEX] - Patcht Dalvik-Cache und kopiert dann die Dalvik-Cache in /data/app/ und benennt es zu einer Odex-Datei um. Es kann nicht passieren, dass die Prüfsummen der ODEX falsch sind, im Gegensatz zur Erstellung einer ODEX-Datei mit [PACKAGE] - [CLASSES].
Beispiel:

[BEGIN]
[CLASSES]
{"original":"63 ?? ?? ?? 38 00 04 00 12 10 0F 00"}
{"replaced":"12 00 6A ?? ?? ?? 00 00 12 00 0F 00"}
[ODEX]
[END]
Glückwunsch!

[SQLITE] - Manchmal muss man aber auch die Datenbank einer App verändern und genau dann gäbe es folgende Möglichkeit:
Beispiel:

[BEGIN]
Probezeit zurücksetzen
[SQLITE]
{"database":"/data/data/com.package.megaapp/databases/settings.db"}
{"execute":"DELETE FROM table_settings WHERE name = 'SETTING__LIC'"}
{"execute":"UPDATE table_settings SET UsedDays=0 WHERE name='Trial_set'"}
[END]
Glückwunsch! Du hast eine neue Probezeit!

database - Pfad zur Datenbank auf dem Gerät.
execute - SQLite Abfrage.