Xpatch
English Version
Android App 破解工具 Xpatch 的使用方法
Xpatch 概述
Xpatch 用来重新签名打包 Apk 文件,使重打包后的 Apk 能加载安装在系统里的 Xposed 插件,从而实现免 Root Hook 任意 App。
Xpatch 基本原理
Xpatch 的原理是对 Apk 文件进行二次打包,重新签名,并生成一个新的 apk 文件。 在 Apk 二次打包过程中,插入加载 Xposed 插件的逻辑,这样,新的 Apk 文件就可以加载任意 Xposed 插件,从而实现免 Root Hook 任意 App 的 Java 代码。
1.0~1.4 版本,Hook 框架使用的是 Lody 的whale
2.0 版本开始,Hook 框架底层使用的是 ganyao114 的SandHook。
3.0 版本开始,默认使用 SandHook,同时,兼容切换为 whale
Xpatch 工具包下载
下载最新的 Xpatch Jar 包
或者进入 Releases 页面下载指定版本:releases
Xpatch App 版本(Xposed Tool)下载
Xpatch 使用方法
Xpatch 项目最终生成物是一个 Jar 包,此 Jar 使用起来非常简单,只需要一行命令,一个接入 xposed hook 功能的 apk 就生成:
$ java -jar XpatchJar 包路径 apk 文件路径
For example:
$ java -jar ../xpatch.jar ../Test.apk
这条命令之后,在原 apk 文件(Test.apk)相同的文件夹中,会生成一个名称为Test-xposed-signed.apk
的新 apk,这就是重新签名之后的支持 xposed 插件的 apk。
Note: 由于签名与原签名不一致,因此需要先卸载掉系统上已经安装的原 apk,才能安装这个 Xpatch 后的 apk
当然,也可以增加-o
参数,指定新 apk 生成的路径:
$ java -jar ../xpatch.jar ../Test.apk -o ../new-Test.apk
更多参数类型可以使用--help 查看,或者不输入任何参数运行 jar 包:
$ java -jar ../xpatch.jar --h(可省略)
这行命令之后得到结果(v1.0-v2.0):
Please choose one apk file you want to process.
options:
-f,--force force overwrite
-h,--help Print this help message
-k,--keep not delete the jar file that is changed by dex2jar
and the apk zip files
-l,--log show all the debug logs
-o,--output <out-apk-file> output .apk file, default is $source_apk_dir/[file
-name]-xposed-signed.apk
Xposed 模块开关控制的两种方法
1. 手动修改 sdcard 文件控制模块开关
当新 apk 安装到系统之后,应用启动时,默认会加载所有已安装的 Xposed 插件(Xposed Module)。
一般情况下,Xposed 插件中都会对包名过滤,有些 Xposed 插件有界面,并且在界面上可以设置开关,所以默认启用所有的 Xposed 插件的方式,大多数情形下都可行。
但在少数情况可能会出现问题,比如,同一个应用安装有多个 Xposed 插件(wechat 插件就非常多),并且都没有独立的开关界面,同时启用这些插件可能会产生冲突。
为了解决此问题,当应用启动时,会查找系统中所有已安装的 Xposed 插件,并在文件目录下生成一个文件
mnt/sdcard/xposed_config/modules.list
,记录这些 Xposed 插件 App。
比如:
com.blanke.mdwechat#MDWechat
com.example.wx_plug_in3#畅玩微信
liubaoyua.customtext#文本自定义
记录的方式是:插件 app 包名#插件 app 名称
需要禁用某个插件,只需要修改此文件,在该插件包名前面增加一个#
号即可。
比如,需要禁用畅玩微信
和文本自定义
两个插件,只需要修改该文本文件,增加一个#
号即可:
com.blanke.mdwechat#MDWechat
#com.example.wx_plug_in3#畅玩微信
#liubaoyua.customtext#文本自定义
如果需要禁用所有插件,只需在所有的包名前面增加#
。
注意: 有些 App 没有获取到 sd 卡文件读写权限,这会导致无法读取 modules.list 配置文件,此时会默认启用所有插件。这种情况下,需要手动打开 app 的文件读写权限。
2. 通过 Xposed Tool App 控制模块开关
下载并安装 Xpatch App(Xposed Tool)
点我下载 XposedTool Apk
通过Xposed 模块管理
页面来控制模块开关。(原理跟方法 1 一致)
可用的 Xposed 模块示例
其他
assets 目录下的 classes.dex 是来加载设备上已安装的 Xposed 插件,其源代码也已经开源:
xposed_module_loader
欢迎 star and fork.
局限性
Xpatch 是基于 apk 二次打包实现的,而且使用到了 dex2Jar 工具,因此,也存在不少的局限性。大概有以下几点:
- Hook 框架默认使用的是 SandHook,此框架存在一些不稳定性,在少数机型上 hook 可能会崩溃。
- 对于校验了文件完整性的 app,重打包后可能无法启动;
- Xposed Hook 框架暂时不支持 Dalvik 虚拟机。
- 暂时不支持 Xposed 插件中的资源 Hook。
Technology Discussion
QQ Group: 741998508
or
Post comments under this article: Xpatch: 免 Root 实现 App 加载 Xposed 插件的一种方案
功能更新
1. 2019/4/15 updated
增加自动破解签名检验的功能,此功能默认开启,如果需要关闭可以增加-c
即可,比如:
$ java -jar ../xpatch.jar ../Test.apk -c
通过 help(-h)可以查看到:
options:
-c,--crach disable craching the apk's signature.
2. 2019/4/25 updated
增加将 Xposed modules 打包到 apk 中的功能 通过 help(-h)可以查看到:
-xm,--xposed-modules
the xposed mpdule files to be packaged into the ap k, multi files should be seperated by :(mac) or ;( win)
使用方式为在命令后面增加-xm path
即可,比如:
$ java -jar ../xpatch.jar ../source.apk -xm ../module1.apk
假如需要将多个 Xposed 插件打包进去,在 Mac 中使用":",在 Windows 下使用";",隔开多个文件路径即可,比如:
mac
$ java -jar ../xpatch.jar ../source.apk -xm ../module1.apk:../module2.apk
windows
$ java -jar ../xpatch.jar ../source.apk -xm ../module1.apk;../module2.apk
注意:
- 多个 Xposed modules 使用
:
(mac)/;
(win)分割; - 假如此 module 既被打包到 apk 中,又安装在设备上,则只会加载打包到 apk 中的 module,不会加载安装的。 这里是通过包名区分是不是同一个 module。
3. 2020/02/09 updated (Version 3.0)
3.0 版本增加了不少新功能,同时修复了一些用户反馈的 Bug。
新增功能:
- 支持 android 10;
- 支持更改植入的 hook 框架,默认使用 Sandhook(支持 android10),可更改为 whale(暂不支持 android10)(-w);
- 默认使用修改 Maniest 文件方式,植入初始化代码,同时,支持更改为老版本中的修改 dex 文件的方式植入代码(-dex);
- 支持修改 apk 包名(一般不建议使用,很多应用会校验包名,会导致无法使用)
- 支持修改 apk 的 version code;
- 支持修改 apk 的 version name;
- 支持修改 apk 的 debuggable 为 true 或者 false;
Bug 修复:
- 修复 Manifest 文件中未定义 ApplicationName 类,导致无法实现 Hook 的问题;
- 修复破解无 so 文件的 apk 时,出现无法找到 so 的问题;
- 修复签名可能会失败的问题;
- 修复 dex 文件数超过 65536 的问题;
新功能用法
在命令行中输入-h,可以看到 3.0 版本完整的帮助文档:
$ java -jar ../xpatch-3.0.jar -h
options:
-c,--crach disable craching the apk's signature.
-d,--debuggable <0 or 1> set 1 to make the app debuggable = true, set 0 to
make the app debuggable = false
-dex,--dex insert code into the dex file, not modify manifest
application name attribute
-f,--force force overwrite
-h,--help Print this help message
-k,--keep not delete the jar file that is changed by dex2jar
and the apk zip files
-l,--log show all the debug logs
-o,--output <out-apk-file> output .apk file, default is $source_apk_dir/[file
-name]-xposed-signed.apk
-pkg,--packageName <new package name>modify the apk package name
-vc,--versionCode <new-version-code>set the app version code
-vn,--versionName <new-version-name>set the app version name
-w,--whale Change hook framework to Lody's whale
-xm,--xposed-modules <xposed module file path>
the xposed module files to be packaged into the ap
k, multi files should be seperated by :(mac) or ;(
win)
version: 3.0
具体用法:
- 修改 Apk 的 debuggable = true:
$ java -jar ../xpatch-3.0.jar ../Test.apk -d 1
(false 改为 0) - 使用老版本的破解 dex 方法破解 apk:
$ java -jar ../xpatch-3.0.jar ../Test.apk -dex
- 修改包名,版本号:
$ java -jar ../xpatch-3.0.jar ../Test.apk -pkg com.test.test -vc 1000 -vn 1.1.1
- 更改 Hook 框架为 whale:
$ java -jar ../xpatch-3.0.jar ../Test.apk -w
4. 2021/01/13 updated (Version 4.0)
Update SandHook to the newest version and SandHook support the Android 11.