update readme to support 3.0

This commit is contained in:
Windy 2020-02-12 21:54:51 +08:00 committed by GitHub
parent 505c97de11
commit 6881d636b6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 123 additions and 92 deletions

215
README.md
View File

@ -9,14 +9,16 @@ Xpatch用来重新签名打包Apk文件使重打包后的Apk能加载安装
Xpatch的原理是对Apk文件进行二次打包重新签名并生成一个新的apk文件。 Xpatch的原理是对Apk文件进行二次打包重新签名并生成一个新的apk文件。
在Apk二次打包过程中插入加载Xposed插件的逻辑这样新的Apk文件就可以加载任意Xposed插件从而实现免Root Hook任意App的Java代码。 在Apk二次打包过程中插入加载Xposed插件的逻辑这样新的Apk文件就可以加载任意Xposed插件从而实现免Root Hook任意App的Java代码。
1.0~1.4版本Hook框架使用的是Lody的whale2.0版本开始Hook框架底层使用的是ganyao114的[SandHook](https://github.com/ganyao114/SandHook)。 1.0~1.4版本Hook框架使用的是Lody的[whale](https://github.com/asLody/whale)
2.0版本开始Hook框架底层使用的是ganyao114的[SandHook](https://github.com/ganyao114/SandHook)。
3.0版本开始默认使用SandHook同时兼容切换为whale
## Xpatch工具包下载 ## Xpatch工具包下载
[点击我下载最新的Xpatch Jar包][1] [点击我下载最新的Xpatch Jar包][1]
或者进入Releases页面下载[releases][2] 或者进入Releases页面下载指定版本[releases][2]
## Xposed Tool(Xpatch App版本)下载 ## Xpatch App版本(Xposed Tool)下载
[点我下载XposedTool App](https://xposed-tool-app.oss-cn-beijing.aliyuncs.com/data/xposed_tool_v1.0.2.apk) [点我下载XposedTool Apk](https://xposed-tool-app.oss-cn-beijing.aliyuncs.com/data/xposed_tool_v1.0.2.apk)
## Xpatch使用方法 ## Xpatch使用方法
Xpatch项目最终生成物是一个Jar包此Jar使用起来非常简单只需要一行命令一个接入xposed hook功能的apk就生成 Xpatch项目最终生成物是一个Jar包此Jar使用起来非常简单只需要一行命令一个接入xposed hook功能的apk就生成
@ -24,23 +26,23 @@ Xpatch项目最终生成物是一个Jar包此Jar使用起来非常简单
$ java -jar XpatchJar包路径 apk文件路径 $ java -jar XpatchJar包路径 apk文件路径
For example: For example:
$ java -jar ../../xpatch.jar ../../wechat.apk $ java -jar ../xpatch.jar ../Test.apk
``` ```
这条命令之后在原apk文件(wechat.apk)相同的文件夹中,会生成一个名称为`wechat-xposed-signed.apk`的新apk这就是重新签名之后的支持xposed插件的apk。 这条命令之后在原apk文件(Test.apk)相同的文件夹中,会生成一个名称为`Test-xposed-signed.apk`的新apk这就是重新签名之后的支持xposed插件的apk。
**Note:** 由于签名与原签名不一致因此需要先卸载掉系统上已经安装的原apk才能安装这个Xpatch后的apk **Note:** 由于签名与原签名不一致因此需要先卸载掉系统上已经安装的原apk才能安装这个Xpatch后的apk
当然,也可以增加`-o`参数指定新apk生成的路径 当然,也可以增加`-o`参数指定新apk生成的路径
``` ```
$ java -jar ../../xpatch.jar ../../wechat.apk -o ../../new-wechat.apk $ java -jar ../xpatch.jar ../Test.apk -o ../new-Test.apk
``` ```
更多参数类型可以使用--help查看或者不输入任何参数运行jar包 更多参数类型可以使用--help查看或者不输入任何参数运行jar包
``` ```
$ java -jar ../../xpatch.jar --help(可省略) $ java -jar ../xpatch.jar --h(可省略)
``` ```
这行命令之后得到结果: 这行命令之后得到结果(v1.0-v2.0)
``` ```
Please choose one apk file you want to process. Please choose one apk file you want to process.
options: options:
@ -52,49 +54,9 @@ options:
-o,--output <out-apk-file> output .apk file, default is $source_apk_dir/[file -o,--output <out-apk-file> output .apk file, default is $source_apk_dir/[file
-name]-xposed-signed.apk -name]-xposed-signed.apk
``` ```
如果觉得每次命令都要输入`java -jar xpatch.jar`太麻烦也可以将xpatch.jar的文件目录加入到系统环境变量里这样每次只需输入xpatch即可关于加入环境变量的方法可以参考apktool文件中的做法
[Apktool install instructions][3]
---- ## Xposed模块开关控制的两种方法
### 2019/4/15 updated ### 1. 手动修改sdcard文件控制模块开关
增加自动破解签名的功能,此功能默认开启,如果需要关闭可以增加`-c`即可,比如:
```
$ java -jar ../../xpatch.jar ../../wechat.apk -c
```
通过help可以查看到:
>options:
> -c,--crach disable craching the apk's signature.
----
----
### 2019/4/25 updated
增加将Xposed modules打包到apk中的功能
通过help可以查看到:
>-xm,--xposed-modules <arg> 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
```
**注意:**
1. 多个Xposed modules使用`:`(mac)/`;`(win)分割;
2. 假如此module既被打包到apk中又安装在设备上则只会加载打包到apk中的module不会加载安装的。
这里是通过包名区分是不是同一个module。
----
## Xposed模块加载方法
当新apk安装到系统之后应用启动时默认会加载所有已安装的Xposed插件(Xposed Module)。 当新apk安装到系统之后应用启动时默认会加载所有已安装的Xposed插件(Xposed Module)。
一般情况下Xposed插件中都会对包名过滤有些Xposed插件有界面并且在界面上可以设置开关所以默认启用所有的Xposed插件的方式大多数情形下都可行。 一般情况下Xposed插件中都会对包名过滤有些Xposed插件有界面并且在界面上可以设置开关所以默认启用所有的Xposed插件的方式大多数情形下都可行。
@ -106,11 +68,7 @@ $ java -jar ../../xpatch.jar ../../source.apk -xm ../../module1.apk;../../modul
比如: 比如:
``` ```
com.blanke.mdwechat#MDWechat com.blanke.mdwechat#MDWechat
com.gh0u1l5.wechatmagician#微信巫师
com.example.wx_plug_in3#畅玩微信 com.example.wx_plug_in3#畅玩微信
liubaoyua.customtext#文本自定义 liubaoyua.customtext#文本自定义
``` ```
记录的方式是:`插件app包名#插件app名称` 记录的方式是:`插件app包名#插件app名称`
@ -118,23 +76,20 @@ liubaoyua.customtext#文本自定义
需要禁用某个插件,只需要修改此文件,在该插件包名前面增加一个`#`号即可。 需要禁用某个插件,只需要修改此文件,在该插件包名前面增加一个`#`号即可。
比如,需要禁用`畅玩微信`和`文本自定义`两个插件,只需要修改该文本文件,增加一个`#`号即可: 比如,需要禁用`畅玩微信`和`文本自定义`两个插件,只需要修改该文本文件,增加一个`#`号即可:
``` ```
com.blanke.mdwechat#MDWechat com.blanke.mdwechat#MDWechat
com.gh0u1l5.wechatmagician#微信巫师
#com.example.wx_plug_in3#畅玩微信 #com.example.wx_plug_in3#畅玩微信
#liubaoyua.customtext#文本自定义 #liubaoyua.customtext#文本自定义
``` ```
如果需要禁用所有插件,只需在所有的包名前面增加`#`。 如果需要禁用所有插件,只需在所有的包名前面增加`#`。
It's so easy !!!
**Note:**
有些App没有获取到sd卡文件读写权限这会导致modules.list配置文件读写失败此时会默认启用所有插件。可手动开启app的文件读写权限避免这种情况发生。
**注意:**
有些App没有获取到sd卡文件读写权限这会导致无法读取modules.list配置文件此时会默认启用所有插件。这种情况下需要手动打开app的文件读写权限。
### 2. 通过Xposed Tool App控制模块开关
下载并安装Xpatch AppXposed Tool
[点我下载XposedTool Apk](https://xposed-tool-app.oss-cn-beijing.aliyuncs.com/data/xposed_tool_v1.0.2.apk)
通过`Xposed模块管理`页面来控制模块开关。原理跟方法1一致
![Screenshot.png](https://upload-images.jianshu.io/upload_images/1639238-84d7a1dd814f314a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)
## 可用的Xposed模块示例 ## 可用的Xposed模块示例
@ -147,49 +102,123 @@ It's so easy !!!
**Note一般来说只要app可以被Xpatch破解与其相关的Xposed模块都是可用的。** **Note一般来说只要app可以被Xpatch破解与其相关的Xposed模块都是可用的。**
## 可破解的App示例
- 微信
- 今日头条
- 腾讯视频
- 天天快报
- 爱奇艺
- Subway Surf
- ...
- **其他App**
## Todo
1. 自动破解app签名 Finished on 2019.4.15
2. 支持xposed插件直接打包到apk中 Finished on 2019.4.25
3. 支持xposed插件中so文件的加载
...
敬请期待....
## 源码解析 ## 源码解析
Xpatch源码解析博文已发布到个人技术公众号**Android葵花宝典**上。 Xpatch源码解析博文已发布到个人技术公众号**Android葵花宝典**上。
扫一扫即可查看: 扫一扫关注公众号,即可查看:
![](https://upload-images.jianshu.io/upload_images/1639238-ab6e0fceabfffdda.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/180) ![](https://upload-images.jianshu.io/upload_images/1639238-ab6e0fceabfffdda.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/180)
## 其他 ## 其他
assets目录下的classes.dex是来加载设备上已安装的Xposed插件其源代码也已经开源 assets目录下的classes.dex是来加载设备上已安装的Xposed插件其源代码也已经开源
[xposed_module_loader](https://github.com/WindySha/xposed_module_loader) [xposed_module_loader](https://github.com/WindySha/xposed_module_loader)
欢迎star or fork. 欢迎star and fork.
## Issues ## 局限性
Xpatch是基于apk二次打包实现的而且使用到了dex2Jar工具因此也存在不少的局限性。大概有以下几点 Xpatch是基于apk二次打包实现的而且使用到了dex2Jar工具因此也存在不少的局限性。大概有以下几点
1. 对于使用了签名校验的应用使用Xpatch得到的apk可能无法启动或者无法获取到网络数据比如优酷趣头条等。不过这种问题并不是致命性问题既然app启动时可以加载xposed插件那我们可以编写一个hook获取签名的方法的xposed插件从而使校验签名能够顺利通过。具体实施细节稍后会在个人微信技术号上公开欢迎关注**Android葵花宝典**。 1. Hook框架默认使用的是SandHook此框架存在一些不稳定性在少数机型上hook可能会崩溃。
2. 有些app可能做了app加固导致dex2Jar工具无法将dex文件解析为jar包从而无法生成新的apk。这种问题暂时还无法解决。 2. 对于校验了文件完整性的app重打包后可能无法启动
3. hook框架使用的是lody的[Whale框架][5]此框架存在一些不稳定性对少数方法的hook会导致崩溃并且在某些机型上hook也会崩溃。 3. Xposed Hook框架暂时不支持Dalvik虚拟机。
4. Xposed Hook框架暂时不支持Dalvik虚拟机。 4. 暂时不支持Xposed插件中的资源Hook。
5. 暂时不支持Xposed插件中的资源Hook。
## Technology Discussion ## Technology Discussion
**QQ Group: 977513757** **QQ Group: 977513757**
or or
**Post comments under this article: [Xpatch: 免Root实现App加载Xposed插件的一种方案](https://windysha.github.io/2019/04/18/Xpatch-%E5%85%8DRoot%E5%AE%9E%E7%8E%B0App%E5%8A%A0%E8%BD%BDXposed%E6%8F%92%E4%BB%B6%E7%9A%84%E4%B8%80%E7%A7%8D%E6%96%B9%E6%A1%88/)** **Post comments under this article: [Xpatch: 免Root实现App加载Xposed插件的一种方案](https://windysha.github.io/2019/04/18/Xpatch-%E5%85%8DRoot%E5%AE%9E%E7%8E%B0App%E5%8A%A0%E8%BD%BDXposed%E6%8F%92%E4%BB%B6%E7%9A%84%E4%B8%80%E7%A7%8D%E6%96%B9%E6%A1%88/)**
## 功能更新
----
### 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 <arg> 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
```
**注意:**
1. 多个Xposed modules使用`:`(mac)/`;`(win)分割;
2. 假如此module既被打包到apk中又安装在设备上则只会加载打包到apk中的module不会加载安装的。
这里是通过包名区分是不是同一个module。
----
### 3. 2020/02/09 updated (Version 3.0)
3.0版本增加了不少新功能同时修复了一些用户反馈的Bug。
新增功能:
1. 支持android 10;
2. 支持更改植入的hook框架默认使用Sandhook(支持android10)可更改为whale(暂不支持android10)(-w);
3. 默认使用修改Maniest文件方式植入初始化代码同时支持更改为老版本中的修改dex文件的方式植入代码(-dex)
4. 支持修改apk包名一般不建议使用很多应用会校验包名会导致无法使用
5. 支持修改apk的version code;
6. 支持修改apk的version name;
7. 支持修改apk的debuggable为true或者false;
Bug修复
1. 修复Manifest文件中未定义ApplicationName类导致无法实现Hook的问题;
2. 修复破解无so文件的apk时出现无法找到so的问题;
3. 修复签名可能会失败的问题;
4. 修复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
```
具体用法:
1. 修改Apk的debuggable = true
`$ java -jar ../xpatch-3.0.jar ../Test.apk -d 1` false改为0
2. 使用老版本的破解dex方法破解apk
`$ java -jar ../xpatch-3.0.jar ../Test.apk -dex`
3. 修改包名,版本号:
`$ java -jar ../xpatch-3.0.jar ../Test.apk -pkg com.test.test -vc 1000 -vn 1.1.1`
2. 更改Hook框架为whale
`$ java -jar ../xpatch-3.0.jar ../Test.apk -w`
## Thanks ## Thanks
- [Xposed][10] - [Xposed][10]
@ -197,6 +226,8 @@ or
- [dex2jar][12] - [dex2jar][12]
- [AXMLPrinter2][13] - [AXMLPrinter2][13]
- [SandHook](https://github.com/ganyao114/SandHook) - [SandHook](https://github.com/ganyao114/SandHook)
- [xposed_module_loader](https://github.com/WindySha/xposed_module_loader)
- [axml](https://github.com/Sable/axml)
[1]: https://github.com/WindySha/Xpatch/releases/download/v2.0/xpatch-2.0.jar.zip [1]: https://github.com/WindySha/Xpatch/releases/download/v2.0/xpatch-2.0.jar.zip
[2]: https://github.com/WindySha/Xpatch/releases [2]: https://github.com/WindySha/Xpatch/releases