警告!不要删除跳转或使用无条件跳转! 优化器将崩溃,并且您的补丁程序无法在ART上运行! 为了避免这种情况,使用条件跳转。 例如,如果需要跳转,请用if-eq v0,v0 (bytes: 32 00 ?? ??)如果不需要跳转到某个特定位置,可以插入跳转,如if-ne v0,v0 (bytes: 33 00 ?? ??);也可以使用你自己的条件。

补丁文件必须与目标 APK 具有相同的名称(这是区分大小写的)。
如果用于该应用程序的自定义补丁文件已存在,则可以在文件名的开始处添加任意文本,并将其保存在现有补丁的附近。
如果您想为一个公司的一系列程序编写补丁文件,则可以在自定义补丁文件名称末尾使用 _%25ALL%25例如:补丁用于所有 SVOX 可以这样命名:com.svox.classic.langpack_%25ALL%25.txt。对于 _%25ALL%25 要取代包名称的部分,取决于公司的应用程序。 不要在补丁文件中使用特殊字符/格式(仅限单个空格)。 如果您需要为一家公司的多个程序打补丁并在开头添加前缀,您可以使用%25ALL%25_ _%25ALL%25. (示例名称:chelpus.%25ALL%25_com.android._%25ALL%25.txt)。您可以使用自定义修补程序内容 %25PACKAGE_NAME%25 为文件路径,此%25PACKAGE_NAME%25 将替换目标应用程序的包名称。
可使用 IDA Pro 6.1 进行字节模式搜索。 它可以打开 dalvik-cache,odex,库和 classes.dex。
如果您想修补 dalvik-cache 或 odex,请记住,不同固件版本中的数据字节可能会有所不同。 请记住,并非所有的 classes.dex 都与 dalvik-cache 和 odex 在字节上一致。 在这个例子中,你可以看到,在 IDA Pro 中打开的 classes.dex 和 odex-file。

在 Lucky Patcher 版本.6.5.4+ 添加了创建 lpzip 文件的功能。 这是一个 zip 压缩文件,可以包含 apk 文件和自定义补丁。 Apk 用于安装。 自定义补丁将自动导入到 Lucky Patcher。 (例如:installSomeAppsWithPatch.lpzip)

[BEGIN]
<打补丁前用户可见的补丁提示>
Patch for XYZ Pro 5.0.5

[PACKAGE]
<解包 classes.dex 并应用 [CLASSES] 中所有修补。 并基于修改后的 classes.dex,生成 odex-file。>

[CLASSES]
<classes.dex 的 搜索/替换 模式(见下文)>
{"search":"63 R00 R01 R02 38 00 04 00 12 10 0F 00"}
{"group":"1"}
{"original":"63 ?? ?? ?? 38 00 04 00 12 10 0F 00"}
{"replaced":"12 00 6A W00 W01 W02 00 00 12 S0 0F 00"}


[LIB]
<指定名称的本地库的 搜索/替换 模式(见下文)>
{"name":"libtitanium.so"}
{"apk_build":604+}
{"original":"00 ** 50 e2"}
{"replaced":"00 00 50 e1"}

[LIB]
<所有本地库的 搜索/替换 模式>
{"name":"*"}
{"original":"00 ** 50 e2"}
{"replaced":"00 00 50 e1"}

[OTHER FILES]
</data/data/Package_Target_APK/ 中指定名称的其他文件的 搜索/替换 模式(见下文)>
{"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"}

[OTHER FILES]
</mnt/sdcard/ 中指定名称的其他文件 搜索/插入 模式(如果/mnt/sdcard/路径没有找到,Lucky Patcher 搜索其他名称的SD卡)>
{"name":"/mnt/sdcard/Android/package-name/files/lives.xml"}
{"original":"63 68 65 6C 70 61"}
{"insert":"63 68 65 6c 70 61 61 61"}

[FILE_IN_APK]
<apk 文件中的文件的 搜索/替换 模式(它只用于使用此自定义补丁重建 apk 文件)>
{"name":"assets/bin/Data/Managed/O7SharpCompress.dll"}
{"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]
<自动将当前用户补丁添加到启动列表。 应该在修补库时使用(或在 [CLASSES] 没有 [ODEX] 或没有 [PACKAGE] 时修补时使用)>

[END]
<修补完成后用户可见的补丁提示>
Congratulations, the application has been cracked!

"search" - 允许您按模式搜索并存储指定位置的字节
{"search":"63 R00 R01 R02 38 00 04 00 12 10 0F 00"}
在这个例子中,绿色的字节组成了你的模式掩码,而黄色标签的 R00 -> R02 中的字节将被存储。
存储的字节必须按照 R00,R01,R02,R03 的顺序...
存储的字节不能重复。

"group" - 组的标记模式(组编号可以是1或更高)。 你可能会问'这是什么意思?'。 那么,它的含义是,如果组中至少有一个模式成功,则会显示成功修补的消息。 当您尝试为特定应用程序的多个版本创建通用修补程序时(例如,修补所有版本的Google Play 以禁用自动更新),这非常有用。
"apk_build" - apply this pattern only for apk with build=apk_build. You can apply pattern for build>=apk_build (Example: {"apk_build":"206+"}) or can apply for build03,54->04...) or 1 (convert hex number to: 43->13,04->14...) respectively or set, SQ convert hex 34->44, 51->11 ...
例如,有一个变量:const/4 v?,0x00 . 问号表示,此var\的数字是未知的(例如,它在新版本中已被更改),但您确定此 var 等于 0,并且您希望将其设置为 1。 在这种情况下,模式将如下所示:
{"original":"12 ?? ?? ?? ?? ??"}
{"replaced":"12 S1 ?? ?? ?? ??"}
反之亦然,将变量设置为0:
{"original":"12 ?? ?? ?? ?? ??"}
{"replaced":"12 S0 ?? ?? ?? ??"}
"replace_from_file" - 紧跟着一个 "original" 语句,搜索到的偏移位置将被来自文件的字节覆盖(文件必须保存在自定义补丁附近)。
{"replace_from_file":"array.bin"}
这样做是为了避免编写很长的模板来进行替换。
"insert" - 大于或小于 original 中模式的长度时需要使用插入数据。
(示例)文件 修补前包含:"chelpa end"
{"original":"63 68 65 6C 70 61"}
{"insert":"63 68 65 6c 70 61 61"}
文件修补后包含:"chelpaa end"

[LIB-ARMEABI],[LIB-ARMEABI-V7A],[LIB-ARM64-V8A],[LIB-MIPS] 或 [LIB-X86] - 库来自 /lib/armeabi/, /lib/armeabi-v7a/, /lib/arm64-v8a/, /lib/mips/, /lib/x86/

[ODEX-PATCH] - 用于补丁已经被创建过 odex。 例如,应用程序已通过自动模式进行了修补移除许可证验证,但您需要使用自定义补丁进行其他更改。 例如我们使用一个简单的 [PACKAGE] - [CLASSES],[ODEX] 或 [CLASSES] - [ODEX],创建未修改的 odex-file,然后再打补丁。
例如:

[BEGIN]
[ODEX-PATCH]
{"original":"63 ?? ?? ?? 38 00 04 00 12 10 0F 00"}
{"replaced":"12 00 6A ?? ?? ?? 00 00 12 00 0F 00"}
[END]
Congratulations! ODEX modified!

[CLASSES] 无 [PACKAGE] - 修补 dalvik-cache 应用程序。 不要忘记,系统会定期更新 dalvik-cache 应用程序,所有更改都将消失。 因此,我们必须添加 [ADD-BOOT]。 dalvik-cache 补丁过时了,因为它不可靠。 但是 ROM 工具箱需要它,因为它不适用于 odex 文件。
例如:

[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]
Congratulations!

[ODEX] - 将 /data/app/ 中的 dalvik-cache 复制并重命名为 odex-file,然后将所有修补应用于此 odex-file。 odex 的校验和是错误的,不能通过检查,不同于 [PACKAGE] - [CLASSES] 创建的 odex-file。
例如:

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

[CLASSES]-[ODEX] - 修补 dalvik-cache,然后将 dalvik-cache 复制到 /data/app/ 并重命名为 odex-file。 odex 和 dalvik-cache 的校验和将是错误的,并且不能通过检查,不同于 [PACKAGE] - [CLASSES] 创建的 odex-file。
例如:

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

[COMPONENT] - 启用或禁用应用程序的组件。
例如:

[BEGIN]
[COMPONENT]
{"disable":"com.superApp.adsActivity"}
{"enable":"com.superApp.fullVersion.Provider"}
{"disable":"com.android.vending.CHECK_LICENSE"}
[END]
Congratulations!

[SQLITE] - 有时目标应用程序必须改变数据库中的某些内容,此部分提供了这种可能性:
例如:

[BEGIN]
Trial Reset
[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]
Congratulations! Your Trial Period has been reset!

database - 设备上数据库的路径,或者您只使用 Lucky Patcher 自搜索文件的数据库名称。
execute - SQLite 操作。

[SET_PERMISSIONS] - 模拟 linux 命令“chmod permissions file_name”用于应用程序数据目录中的文件:
例如:

[BEGIN]
Trial Reset
[SET_PERMISSIONS]
{"file_name":"/files/stats"}
{"permissions":"777"}

[OTHER FILES]
{"name":"/files/stats"}

{"original":"4D 4D 46 31"}
{"replaced":"00 4D 46 30"}

[SET_PERMISSIONS]
{"file_name":"/files/stats"}
{"permissions":"444"}
[END]
Congratulations! Your Trial Period has been reset!

[COPY_FILE] - 从 Lucky Patcher 目录复制文件到指定路径并重新命名:
例如:

[BEGIN]
Copy file with money
[COPY_FILE]
{"file_name":"money_for_game.bin"}
{"to":"/data/data/game_package/files/settings.xml"}
[END]
Congratulations! Your File is copied and money is modified now!


[SHARED-PREFERENCES] - 共享的 xml 配置文件编辑(插入或删除变量):
例如:

[BEGIN]
Set more money
[SHARED-PREFERENCES]

{"file_name":"hillclimbprefs.xml"}
{"insert":"int"}
{"pref_name":"coins"}
{"value":"550000"}

{"insert":"string"}
{"pref_name":"license_status"}
{"value":"licensed"}

{"insert":"long"}
{"pref_name":"time_for_license_verify"}
{"value":"365000"}

{"delete":"boolean"}
{"pref_name":"unlicensed"}

{"file_name":"hillclimbprefs_config.xml"}
{"insert":"float"}
{"pref_name":"result_table"}
{"value":"123.4"}
[END]
Congratulations! Your File is copied and money is modified now!
<br/