Xpatch

Project Url: WindySha/Xpatch
Introduction: 免 Root 实现 app 加载 Xposed 插件工具。This is a tool to repack apk file, then xposed modules installed can be loaded in when the app launched.It is another way to hook one app without rooting phone and double opening app.
More: Author   ReportBugs   
Tags:

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

Xpatch 工具包下载

点击我下载最新的 Xpatch Jar 包
或者进入 Releases 页面下载:releases

Xpatch 使用方法

Xpatch 项目最终生成物是一个 Jar 包,此 Jar 使用起来非常简单,只需要一行命令,一个接入 xposed hook 功能的 apk 就生成:

$ java -jar XpatchJar 包路径 apk 文件路径

For example:
$ java -jar ../../xpatch.jar ../../wechat.apk

这条命令之后,在原 apk 文件(wechat.apk)相同的文件夹中,会生成一个名称为wechat-xposed-signed.apk的新 apk,这就是重新签名之后的支持 xposed 插件的 apk。

Note: 由于签名与原签名不一致,因此需要先卸载掉系统上已经安装的原 apk,才能安装这个 Xpatch 后的 apk

当然,也可以增加-o参数,指定新 apk 生成的路径:

$ java -jar ../../xpatch.jar ../../wechat.apk -o ../../new-wechat.apk

更多参数类型可以使用--help 查看,或者不输入任何参数运行 jar 包:

$ java -jar ../../xpatch.jar --help(可省略)

这行命令之后得到结果:

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

如果觉得每次命令都要输入java -jar xpatch.jar太麻烦,也可以将 xpatch.jar 的文件目录加入到系统环境变量里,这样,每次只需输入 xpatch 即可,关于加入环境变量的方法,可以参考 apktool 文件中的做法: Apktool install instructions


2019/4/15 updated

增加自动破解签名的功能,此功能默认开启,如果需要关闭可以增加-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 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)。

一般情况下,Xposed 插件中都会对包名过滤,有些 Xposed 插件有界面,并且在界面上可以设置开关,所以默认启用所有的 Xposed 插件的方式,大多数情形下都可行。

但在少数情况可能会出现问题,比如,同一个应用安装有多个 Xposed 插件(wechat 插件就非常多),并且都没有独立的开关界面,同时启用这些插件可能会产生冲突。

为了解决此问题,当应用启动时,会查找系统中所有已安装的 Xposed 插件,并在文件目录下生成一个文件 mnt/sdcard/xposed_config/modules.list,记录这些 Xposed 插件 App。 比如:

com.blanke.mdwechat#MDWechat

com.gh0u1l5.wechatmagician#微信巫师

com.example.wx_plug_in3#畅玩微信

liubaoyua.customtext#文本自定义

记录的方式是:插件 app 包名#插件 app 名称

需要禁用某个插件,只需要修改此文件,在该插件包名前面增加一个#号即可。

比如,需要禁用畅玩微信文本自定义两个插件,只需要修改该文本文件,增加一个#号即可:

com.blanke.mdwechat#MDWechat

com.gh0u1l5.wechatmagician#微信巫师

#com.example.wx_plug_in3#畅玩微信

#liubaoyua.customtext#文本自定义

如果需要禁用所有插件,只需在所有的包名前面增加#。 It's so easy !!!

Note: 有些 App 没有获取到 sd 卡文件读写权限,这会导致 modules.list 配置文件读写失败,此时会默认启用所有插件。可手动开启 app 的文件读写权限,避免这种情况发生。

可用的 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 葵花宝典上。
扫一扫即可查看:

Issues

Xpatch 是基于 apk 二次打包实现的,而且使用到了 dex2Jar 工具,因此,也存在不少的局限性。大概有以下几点:

  1. 对于使用了签名校验的应用,使用 Xpatch 得到的 apk 可能无法启动,或者无法获取到网络数据,比如优酷,趣头条等。不过,这种问题并不是致命性问题,既然 app 启动时可以加载 xposed 插件,那我们可以编写一个 hook 获取签名的方法的 xposed 插件,从而使校验签名能够顺利通过。具体实施细节稍后会在个人微信技术号上公开,欢迎关注:Android 葵花宝典
  2. 有些 app 可能做了 app 加固,导致 dex2Jar 工具无法将 dex 文件解析为 jar 包,从而无法生成新的 apk。这种问题暂时还无法解决。
  3. hook 框架使用的是 lody 的Whale 框架,此框架存在一些不稳定性,对少数方法的 hook 会导致崩溃,并且在某些机型上 hook 也会崩溃。
  4. Xposed Hook 框架暂时不支持 Dalvik 虚拟机。
  5. 暂时不支持 Xposed 插件中的资源 Hook。

Technology Discussion

QQ Group: 977513757
or
Post comments under this article: Xpatch: 免 Root 实现 App 加载 Xposed 插件的一种方案

Thanks

Support Me
Apps
About Me
Google+: Trinea trinea
GitHub: Trinea