A fork of NPatch allowing to patch API 101 plugins (gkms-localify only)
Go to file
Windy fdd6c50f93
Update README.md
modify
2019-03-30 22:14:06 +08:00
axmlprinter add .gitignore files 2019-03-24 23:42:06 +08:00
gradle/wrapper Add files via upload 2019-03-24 23:28:45 +08:00
xpatch add .gitignore files 2019-03-24 23:42:06 +08:00
.gitignore add .gitignore files 2019-03-24 23:42:06 +08:00
LICENSE.txt Add files via upload 2019-03-24 23:28:45 +08:00
NOTICE.txt Add files via upload 2019-03-24 23:28:45 +08:00
README.md Update README.md 2019-03-30 22:14:06 +08:00
build.gradle Add files via upload 2019-03-24 23:28:45 +08:00
gradle.properties Add files via upload 2019-03-24 23:28:45 +08:00
gradlew Add files via upload 2019-03-24 23:28:45 +08:00
gradlew.bat Add files via upload 2019-03-24 23:28:45 +08:00
settings.gradle Add files via upload 2019-03-24 23:28:45 +08:00

README.md

Android App破解工具Xpatch的使用方法

Xpatch概述

Xpatch用来重新签名打包Apk文件使重打包后的Apk能加载安装在系统里的Xposed插件从而实现免Root Hook任意App。

Xpatch基本原理

Xpatch的原理是对Apk文件进行二次打包重新签名并生成一个新的apk文件。 在Apk二次打包过程中插入加载Xposed插件的逻辑这样新的Apk文件就可以加载任意Xposed插件从而实现免Root Hook任意App的Java代码。

Hook框架底层使用的是Lody的whale支持的平台架构有ARM/THUMB、ARM64支持的andrid版本大致有其他未测试

  • Android 5.0.0
  • Android 5.1.1
  • Android 6.0
  • Android 6.0.1
  • Android 7.1.2
  • Android 8.1.0
  • Android 9.0.0

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

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的文件读写权限避免这种情况发生。

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。

可用的Xposed模块示例

Note一般来说只要app可以被Xpatch破解并且运行时没有做签名校验与其相关的Xposed模块都是可用的。

Todo

  1. 自动破解app签名
  2. 支持xposed插件直接打包到apk中
  3. 支持xposed插件中so文件的加载
    ...

敬请期待....

源码解析

Xpatch源码解析博文已发布到个人技术公众号Android葵花宝典上。
扫一扫即可查看:

Technology Discussion Group

QQ Group: 977513757

支持我

周末本来用来陪老婆小孩的时间却用来撸码你的鼓励将是Make it better最大的动力。
欢迎Star, Fork or Donate。

站在巨人的肩膀上