{"id":15032241,"url":"https://github.com/windysha/xpatch","last_synced_at":"2025-05-14T01:11:19.361Z","repository":{"id":38863731,"uuid":"173552410","full_name":"WindySha/Xpatch","owner":"WindySha","description":"This is a tool to repackage apk file, then the apk can load any xposed modules installed in the device. It is another way to hook an app without root device.","archived":false,"fork":false,"pushed_at":"2024-11-04T04:05:42.000Z","size":16257,"stargazers_count":2804,"open_issues_count":41,"forks_count":408,"subscribers_count":63,"default_branch":"master","last_synced_at":"2025-04-10T16:59:28.277Z","etag":null,"topics":["hook","unroot","whale","xpatch","xposed"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/WindySha.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-03-03T09:00:43.000Z","updated_at":"2025-04-10T14:56:37.000Z","dependencies_parsed_at":"2022-07-16T16:00:47.693Z","dependency_job_id":"7c74f0a2-a0bb-4085-bc21-a1f0dd79b8aa","html_url":"https://github.com/WindySha/Xpatch","commit_stats":{"total_commits":100,"total_committers":10,"mean_commits":10.0,"dds":0.5800000000000001,"last_synced_commit":"9543693bec1b6efaad414a67583bc2bf2daead78"},"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WindySha%2FXpatch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WindySha%2FXpatch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WindySha%2FXpatch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WindySha%2FXpatch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/WindySha","download_url":"https://codeload.github.com/WindySha/Xpatch/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254049403,"owners_count":22006050,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hook","unroot","whale","xpatch","xposed"],"created_at":"2024-09-24T20:17:48.703Z","updated_at":"2025-05-14T01:11:14.350Z","avatar_url":"https://github.com/WindySha.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"### [**English Version**](https://github.com/WindySha/Xpatch/blob/6ec0f3c16128dda46ab05bdd915d66ebbdaaf9fc/README_en.md)\n\n# Android App破解工具Xpatch的使用方法\n\n## Xpatch概述\nXpatch用来重新签名打包Apk文件，使重打包后的Apk能加载安装在系统里的Xposed插件，从而实现免Root Hook任意App。\n\n## Xpatch基本原理\nXpatch的原理是对Apk文件进行二次打包，重新签名，并生成一个新的apk文件。\n在Apk二次打包过程中，插入加载Xposed插件的逻辑，这样，新的Apk文件就可以加载任意Xposed插件，从而实现免Root Hook任意App的Java代码。\n\n1.0~1.4版本，Hook框架使用的是Lody的[whale](https://github.com/asLody/whale)    \n2.0版本开始，Hook框架底层使用的是ganyao114的[SandHook](https://github.com/ganyao114/SandHook)。  \n3.0版本开始，默认使用SandHook，同时，兼容切换为whale\n\n## Xpatch工具包下载\n[下载最新的Xpatch Jar包][1]    \n或者进入Releases页面下载指定版本：[releases][2]\n\n## Xpatch App版本(Xposed Tool)下载\n[XposedTool][16]  [下载XposedTool Apk][15]\n\n## Xpatch使用方法\nXpatch项目最终生成物是一个Jar包，此Jar使用起来非常简单，只需要一行命令，一个接入xposed hook功能的apk就生成：\n```\n$ java -jar XpatchJar包路径 apk文件路径\n\nFor example:\n$ java -jar ../xpatch.jar ../Test.apk\n```\n\n这条命令之后，在原apk文件(Test.apk)相同的文件夹中，会生成一个名称为`Test-xposed-signed.apk`的新apk，这就是重新签名之后的支持xposed插件的apk。\n\n**Note:** 由于签名与原签名不一致，因此需要先卸载掉系统上已经安装的原apk，才能安装这个Xpatch后的apk\n\n当然，也可以增加`-o`参数，指定新apk生成的路径：\n```\n$ java -jar ../xpatch.jar ../Test.apk -o ../new-Test.apk\n```\n\n更多参数类型可以使用--help查看，或者不输入任何参数运行jar包：\n```\n$ java -jar ../xpatch.jar --h(可省略)\n```\n这行命令之后得到结果(v1.0-v2.0)：\n```\nPlease choose one apk file you want to process. \noptions:\n -f,--force                   force overwrite\n -h,--help                    Print this help message\n -k,--keep                    not delete the jar file that is changed by dex2jar\n                               and the apk zip files\n -l,--log                     show all the debug logs\n -o,--output \u003cout-apk-file\u003e   output .apk file, default is $source_apk_dir/[file\n                              -name]-xposed-signed.apk\n```\n\n## Xposed模块开关控制的两种方法\n### 1. 手动修改sdcard文件控制模块开关\n当新apk安装到系统之后，应用启动时，默认会加载所有已安装的Xposed插件(Xposed Module)。\n\n一般情况下，Xposed插件中都会对包名过滤，有些Xposed插件有界面，并且在界面上可以设置开关，所以默认启用所有的Xposed插件的方式，大多数情形下都可行。\n\n但在少数情况可能会出现问题，比如，同一个应用安装有多个Xposed插件（wechat插件就非常多），并且都没有独立的开关界面，同时启用这些插件可能会产生冲突。\n\n为了解决此问题，当应用启动时，会查找系统中所有已安装的Xposed插件，并在文件目录下生成一个文件\n`mnt/sdcard/xposed_config/modules.list`，记录这些Xposed插件App。\n比如：\n```\ncom.blanke.mdwechat#MDWechat\ncom.example.wx_plug_in3#畅玩微信\nliubaoyua.customtext#文本自定义\n```\n记录的方式是：`插件app包名#插件app名称`\n\n需要禁用某个插件，只需要修改此文件，在该插件包名前面增加一个`#`号即可。\n\n比如，需要禁用`畅玩微信`和`文本自定义`两个插件，只需要修改该文本文件，增加一个`#`号即可：\n```\ncom.blanke.mdwechat#MDWechat\n#com.example.wx_plug_in3#畅玩微信\n#liubaoyua.customtext#文本自定义\n```\n如果需要禁用所有插件，只需在所有的包名前面增加`#`。\n\n**注意:**\n有些App没有获取到sd卡文件读写权限，这会导致无法读取modules.list配置文件，此时会默认启用所有插件。这种情况下，需要手动打开app的文件读写权限。\n### 2. 通过Xposed Tool App控制模块开关\n下载并安装Xpatch App（Xposed Tool）\n[点我下载XposedTool Apk][15]\n通过`Xposed模块管理`页面来控制模块开关。（原理跟方法1一致）  \n![Screenshot.png](https://upload-images.jianshu.io/upload_images/1639238-84d7a1dd814f314a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)\n\n## 可用的Xposed模块示例\n\n - [MDWechat][8]\n - [文本自定义][9]\n - **你自己编写的Xposed模块**\n\n\n## 其他\nassets目录下的classes.dex是来加载设备上已安装的Xposed插件，其源代码也已经开源：  \n[xposed_module_loader](https://github.com/WindySha/xposed_module_loader)  \n欢迎star and fork.\n\n## 局限性\nXpatch是基于apk二次打包实现的，而且使用到了dex2Jar工具，因此，也存在不少的局限性。大概有以下几点：\n \n1. Hook框架默认使用的是SandHook，此框架存在一些不稳定性，在少数机型上hook可能会崩溃。  \n2. 对于校验了文件完整性的app，重打包后可能无法启动；\n3. Xposed Hook框架暂时不支持Dalvik虚拟机。  \n4. 暂时不支持Xposed插件中的资源Hook。\n \n## Technology Discussion\n**QQ Group: 741998508**  \nor  \n**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/)** \n\n## 功能更新\n\n----\n### 1. 2019/4/15 updated  \n增加自动破解签名检验的功能，此功能默认开启，如果需要关闭可以增加`-c`即可，比如：  \n```\n$ java -jar ../xpatch.jar ../Test.apk -c\n```  \n通过help(-h)可以查看到:  \n\u003eoptions:  \n\u003e -c,--crach                   disable craching the apk's signature.\n\n### 2. 2019/4/25 updated\n增加将Xposed modules打包到apk中的功能\n通过help(-h)可以查看到: \n \u003e-xm,--xposed-modules \u003carg\u003e   the xposed mpdule files to be packaged into the ap\n \u003e                            k, multi files should be seperated by :(mac) or ;(\n \u003e                             win) \n\n使用方式为在命令后面增加`-xm path`即可，比如：\n```\n$ java -jar ../xpatch.jar ../source.apk -xm ../module1.apk\n```\n假如需要将多个Xposed插件打包进去，在Mac中使用\":\"，在Windows下使用\";\"，隔开多个文件路径即可，比如：\n```\nmac\n$  java -jar ../xpatch.jar ../source.apk -xm ../module1.apk:../module2.apk  \n\nwindows\n$  java -jar ../xpatch.jar ../source.apk -xm ../module1.apk;../module2.apk\n```\n\n**注意：**\n1. 多个Xposed modules使用`:`(mac)/`;`(win)分割;\n2. 假如此module既被打包到apk中，又安装在设备上，则只会加载打包到apk中的module，不会加载安装的。\n这里是通过包名区分是不是同一个module。\n\n----\n\n### 3. 2020/02/09 updated  (Version 3.0)\n3.0版本增加了不少新功能，同时修复了一些用户反馈的Bug。\n\n新增功能：\n1. 支持android 10;\n2. 支持更改植入的hook框架，默认使用Sandhook(支持android10)，可更改为whale(暂不支持android10)(-w);\n3. 默认使用修改Maniest文件方式，植入初始化代码，同时，支持更改为老版本中的修改dex文件的方式植入代码(-dex)；\n4. 支持修改apk包名（一般不建议使用，很多应用会校验包名，会导致无法使用）\n5. 支持修改apk的version code;\n6. 支持修改apk的version name;\n7. 支持修改apk的debuggable为true或者false;\n\nBug修复：\n1. 修复Manifest文件中未定义ApplicationName类，导致无法实现Hook的问题;\n2. 修复破解无so文件的apk时，出现无法找到so的问题;\n3. 修复签名可能会失败的问题；\n4. 修复dex文件数超过65536的问题；\n\n#### 新功能用法\n在命令行中输入-h，可以看到3.0版本完整的帮助文档：\n`$ java -jar ../xpatch-3.0.jar -h`\n```\noptions:\n -c,--crach                   disable craching the apk's signature.\n -d,--debuggable \u003c0 or 1\u003e     set 1 to make the app debuggable = true, set 0 to \n                              make the app debuggable = false\n -dex,--dex                   insert code into the dex file, not modify manifest\n                               application name attribute\n -f,--force                   force overwrite\n -h,--help                    Print this help message\n -k,--keep                    not delete the jar file that is changed by dex2jar\n                               and the apk zip files\n -l,--log                     show all the debug logs\n -o,--output \u003cout-apk-file\u003e   output .apk file, default is $source_apk_dir/[file\n                              -name]-xposed-signed.apk\n -pkg,--packageName \u003cnew package name\u003emodify the apk package name\n -vc,--versionCode \u003cnew-version-code\u003eset the app version code\n -vn,--versionName \u003cnew-version-name\u003eset the app version name\n -w,--whale                   Change hook framework to Lody's whale\n -xm,--xposed-modules \u003cxposed module file path\u003e\n                              the xposed module files to be packaged into the ap\n                              k, multi files should be seperated by :(mac) or ;(\n                              win) \nversion: 3.0\n```\n具体用法：\n1. 修改Apk的debuggable = true：  \n `$ java -jar ../xpatch-3.0.jar ../Test.apk -d 1` （false改为0）\n2. 使用老版本的破解dex方法破解apk：  \n`$ java -jar ../xpatch-3.0.jar ../Test.apk  -dex`\n3. 修改包名，版本号：  \n`$ java -jar ../xpatch-3.0.jar ../Test.apk  -pkg com.test.test -vc 1000 -vn 1.1.1`\n2. 更改Hook框架为whale：  \n`$ java -jar ../xpatch-3.0.jar ../Test.apk  -w`\n\n### 4. 2021/01/13 updated  (Version 4.0)\nUpdate SandHook to the newest version and SandHook support the Android 11.\n\n## Thanks\n\n - [Xposed][10]\n - [whale][11]\n - [dex2jar][12]\n - [AXMLPrinter2][13]\n - [SandHook](https://github.com/ganyao114/SandHook)\n - [xposed_module_loader](https://github.com/WindySha/xposed_module_loader) \n - [axml](https://github.com/Sable/axml)\n\n  [1]: https://github.com/WindySha/Xpatch/releases/download/v3.0/xpatch-3.0.jar\n  [2]: https://github.com/WindySha/Xpatch/releases\n  [3]: https://ibotpeaches.github.io/Apktool/install/\n  [5]: https://github.com/asLody/whale\n  [6]: https://repo.xposed.info/module/com.example.wx_plug_in3\n  [7]: https://github.com/Gh0u1L5/WechatMagician/releases\n  [8]: https://github.com/Blankeer/MDWechat\n  [9]: https://repo.xposed.info/module/liubaoyua.customtext\n  [10]: https://github.com/rovo89/Xposed\n  [11]: https://github.com/asLody/whale\n  [12]: https://github.com/pxb1988/dex2jar\n  [13]: https://code.google.com/archive/p/android4me/downloads\n  [14]: http://www.apache.org/licenses/LICENSE-2.0.html\n  [15]: https://xposed-tool-app.oss-cn-beijing.aliyuncs.com/data/Xposed_Tool_2.0.3.apk\n  [16]: https://github.com/WindySha/xposed-tool-app\n  \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwindysha%2Fxpatch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwindysha%2Fxpatch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwindysha%2Fxpatch/lists"}