目录

前言 1.1

Xposed简介 1.2

Xposed发展历史 1.2.1

背景知识 1.2.1.1

Riru 1.2.1.1.1

Zygisk 1.2.1.1.2

类Xposed框架 1.2.2

VirtualXposed 1.2.2.1

太极 Tai Chi 1.2.2.2

LSPatch 1.2.2.3

安装Xposed 1.3

安装XPosed 1.3.1

安装EdXposed 1.3.2

EdXposed常见问题 1.3.2.1

安装LSPosed 1.3.3

LSPosed相关日志 1.3.3.1

打开LSPosed的app 1.3.3.2

LSPosed界面和功能 1.3.3.3

Shamiko模块 1.3.3.4

使用Xposed 1.4

Xposed插件 1.4.1

JustTrustMe 1.4.1.1

砸壳导出dex 1.4.1.2

app可调试 1.4.1.3

GravityBox 1.4.1.4

Xposed插件开发 1.5

新建安卓app项目 1.5.1

新增Xposed配置 1.5.2

编译安装Xposed插件apk 1.5.3

确认插件已安装和能生效 1.5.4

Xposed插件demo项目 1.5.5

Xposed心得 1.6

附录 1.7

参考资料 1.7.1

前言

安卓逆向调试：XPosed框架

最新版本：v3.0.0

更新时间：20230914

简介

介绍用于安卓破解的辅助工具：Xposed框架；先是Xposed框架简介，Xposed发展历史，从Xposed到EdXposed，再到LSPosed；然后介绍背景知识，包括Riru、Zygisk等；再介绍类XPosed框架的VirtualXposed、太极、LSPatch；接着介绍具体如何安装Xposed、EdXposed、LSPosed；其中包括EdXposed常见问题；LSPosed的相关日志、打开LSPosed的app、LSPosed的界面和功能、Shamiko模块；如何具体使用XPosed；以及常见的XPosed的插件模块，包括JustTrustMe，砸壳导出dex的FDex2和dumpdex，app可调试的Xdebuggable和XAppDebug，以及GravityBox；然后介绍如何开发XPosed插件，包括先是用AS新建一个安卓普通app项目，再去改动增加Xposed的配置，写Xposed插件的hook代码，编译和安装Xposed插件即普通安卓apk到安卓手机，然后确认Xposed插件是否安装成功和被正常识别，然后测试Xposed插件是否生效是否能输出log日志；以及贴出Xposed插件的demo项目源代码。最后整理Xposed相关心得；

源码+浏览+下载

本书的各种源码、在线浏览地址、多种格式文件下载如下：

HonKit源码

crifan/android_re_xposed_framework: 安卓逆向调试：XPosed框架

如何使用此HonKit源码去生成发布为电子书

详见：crifan/honkit_template: demo how to use crifan honkit template and demo

在线浏览

安卓逆向调试：XPosed框架 book.crifan.org

安卓逆向调试：XPosed框架 crifan.github.io

离线下载阅读

安卓逆向调试：XPosed框架 PDF

安卓逆向调试：XPosed框架 ePub

安卓逆向调试：XPosed框架 Mobi

版权和用途说明

此电子书教程的全部内容，如无特别说明，均为本人原创。其中部分内容参考自网络，均已备注了出处。如发现有侵权，请通过邮箱联系我 admin 艾特 crifan.com，我会尽快删除。谢谢合作。

各种技术类教程，仅作为学习和研究使用。请勿用于任何非法用途。如有非法用途，均与本人无关。

鸣谢

感谢我的老婆陈雪的包容理解和悉心照料，才使得我crifan有更多精力去专注技术专研和整理归纳出这些电子书和技术教程，特此鸣谢。

其他

作者的其他电子书

本人crifan还写了其他150+本电子书教程，感兴趣可移步至：

crifan/crifan_ebook_readme: Crifan的电子书的使用说明

关于作者

关于作者更多介绍，详见：

关于CrifanLi李茂 – 在路上

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:23:46

Xposed简介

Xposed简介

XPosed

是什么：本身是一个框架

所以也称：XPosed框架

=Xposed Framework

适用对象：（已root的）安卓手机

作用：可以在XPosed中安装各种插件，实现各种高级功能

引申：常被用来配合破解安卓应用

比如

用FDex2砸壳导出app的dex文件

自己编写XPosedhook插件，实现特定功能

前提：需要安卓手机有root权限

特点

开源

支持插件

安装插件后，可以实现各种原本很难实现的效果

Github

https://github.com/rovo89/XposedBridge

rovo89/XposedBridge: The Java part of the Xposed framework.

Wiki

https://github.com/rovo89/XposedBridge/wiki

Using the Xposed Framework API · rovo89/XposedBridge Wiki

https://github.com/rovo89/XposedBridge/wiki/Using-the-Xposed-Framework-API

最新的变体

EdXposed

LSPosed

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48

Xposed发展历史

Xposed发展历史=各种版本

概述

早期Android 2.3 ~ 8.1的：Xposed

后来Android 8.0 ~ 11的：EdXposed

最新Android 8.1 ~ 13的：LSPosed

详解

最早：Xposed = 旧版Xposed = OG Xposed

支持Android版本：Android 2.3 ~ Android 8.1

后来：EdXposed

支持Android版本：Android 8.0 ~ Android 11

已停止维护，不再支持安卓11+的版本

主页

https://edxp.meowcat.org

Github

EdXposed

https://github.com/ElderDrivers/EdXposed

A Riru module trying to provide an ART hooking framework (initially for Android Pie) which delivers consistent APIs with the OG Xposed, leveraging YAHFA (or SandHook) hooking framework, supports Android 8.0 ~ 11

EdXposedManager

https://github.com/ElderDrivers/EdXposedManager

最新：LSPosed

支持Android版本：Android 8.1 ~ Android 13

支持最新的Android 13

Github

https://github.com/LSPosed/LSPosed

A Riru / Zygisk module trying to provide an ART hooking framework which delivers consistent APIs with the OG Xposed, leveraging LSPlant hooking framework

官网

https://lsposed.org

除了LSPosed的下载地址：

https://github.com/LSPosed/LSPosed/releases

之外，啥都没有

或者说：只有一个额外的：（Magisk的MagiskHide替代品的）Shamiko插件 的下载地址

https://github.com/LSPosed/LSPosed.github.io/releases

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48

背景知识

背景知识

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48

Riru

Riru

Riru

概述

Riru module providing ART interception framework (natively for Android Pie) that provides consistent API -interfaces with OG Xposed, using YAHFA (or SandHook) interception environment, supports Android 8.0 ~ 11.

Github

GitHub - RikkaApps/Riru: Inject into zygote process

https://github.com/RikkaApps/Riru/

下载

Releases · RikkaApps/Riru · GitHub

https://github.com/RikkaApps/Riru/releases

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48

Zygisk

Zygisk

什么是Zygisk

Zygisk is a new feature in Magisk that provides a different way of running root apps and modules

Instead of running them as root, Zygisk creates a separate environment for these apps to run in. This environment is called the Zygote process, which is a system process in Android that is responsible for launching and managing app processes.

The Zygote process is the very first Android OS process that starts when you boot your phone. This is equivalent to the PID 1 process when you start a Linux based computer or server. Magisk allowing Zygisk to run at the boot level means it can have root access without sending that data to your apps.

Zygisk是Zygote的Magisk

这将在Zygote进程中运行Magisk的一部分，使Magisk模块更强大。

日常使用中，Zygisk运行在Android核心进程Zygote中。

当一个进程在上述拒绝列表中时，Magisk 将清理该进程的内存空间以确保不应用任何修改，而 root 进程仍然可以在没有 Magisk 监督的情况下通过各种技巧将代码注入其他进程

或者我们更加简单的理解，Zygisk就类似1个新的运行环境，此环境相对于之前的Riru存在天壤之别，这也是为什么zygisk和riru不能同时使用的原因。

Zygisk用途和好处？

By running root apps and modules in the Zygote process, Zygisk provides several benefits, including improved compatibility, security, and performance. Most importantly, your privacy focused apps like banking apps, Netflix, Google Play Movies etc. will not detect your rooted device and will continue to work like normal.

improves compatibility

enhances security

improve performance

引入Zygisk后，传统MagiskHide已经被取消，但是我们可以在面具设置里，打开Zygisk按钮再Zygisk环境下，多出来1个排除列表。

在排除列表进入后，界面非常类似之前的Magisk Hide功能，通过对排除列表里部分软件打钩，成功对软件实现了ROOT隐藏。

除以上这些打开Zygisk后，我们刷入相关模块后，只需要直接刷入功能模块即可实现。

如LSPosed分riru版和Zygisk版本：

Riru版本激活LSP需要刷入riru+lsp两个zip才能实现

而Zygisk版本直接刷1个ZyLSP即可快速激活

操作起来更加简单

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48

类Xposed框架

类Xposed框架

除了Xposed框架本身，后来出现很多类Xposed框架，主要是无需root即可体验Xposed插件的效果。

相关类Xposed框架整理如下：

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48

VirtualXposed

VirtualXposed

TODO

【未解决】小米9中安装VirtualXposed

【未解决】小米9中无法运行VirtualXposed会崩溃一闪而过

【已解决】VirtualXposed是否真的免Root和支持哪些插件

【已解决】网易MuMu中安装VirtualXposed

【未解决】网易MuMu中VirtualXposed中安装和使用JustTrustMe

VirtualXposed

一句话简介：Use Xposed with a simple APP, without needing to root, unlock the bootloader, or flash a system image

介绍：一个类似于Xposed框架

但

优点

无需Root

缺点

有些其他的限制？

主页

Download | VirtualXposed

https://vxposed.com

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48

太极 Tai Chi

太极=Tai Chi

太极·虚拟框架

一句话简介：免解锁,免Root,就能使用Xposed框架

一个可以免Root运行的类Xposed框架

资料

官网

https://taichi.cool/zh/

文档

介绍 | 太极

https://taichi.cool/zh/doc/

下载

https://taichi.cool/zh/download.html

模块下载

太极官网-太极app，开启全新的XPOSED模块使用体验

https://www.taichi-app.com/#/download/alipay

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48

LSPatch

LSPatch

LSPatch

Github

https://github.com/LSPosed/LSPatch

概述

A non-root Xposed framework extending from LSPosed

基于LSPosed的免Root的Xposed框架软件

特定

（安卓手机）无需root（无需解锁BL）

用途=作用

给选定的安卓应用，植入Xposed模块，实现各种插件的功能

图

LSPatch

给QQ安装插件

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48

安装Xposed

安装Xposed

下面分别介绍，如何安装：

Xposed的Xposed Installer

EdXposed的EdXposed Manager

LSPosed（自带Manager的app）

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48

安装XPosed

安装XPosed Installer

TODO：

【已解决】Mac中夜神安卓模拟器中安装Xposed框架

【记录】给二手已root小米4设置Charles代理和安装Charles证书和启用Xposed

【已解决】用WrBug的DumpDex从app中hook导出dex文件

【未解决】小米4中尝试安装最新3.1.5的Xposed Installer去解决2.6版本提示的不兼容的问题

【已解决】mac中试用FDex2去hook导出安卓app的dex等文件

【已解决】Android 4.4.4的小米4Xposed Installer出错：Xposed目前不兼容Android SDK版本19或您的处理器架构armeabi-v7a

【已解决】Mac中夜神模拟器中安装Xposed框架

【已解决】价格便宜但支持root的Android手机

【已解决】如何确定此二手小米4是否的确已经root

【记录】二手已root的小米4安卓手机照片和信息

【已解决】小米4的MIUI系统自动升级导致清楚已有root权限后如何恢复root权限

【已解决】小米4中重新安装Xposed Installer和激活Xposed框架

说明

旧版本的Xposed == Xposed Installer

如何安装Xposed Installer

一般是通过Xposed Installer=Xposed安装器来安装Xposed框架，安装到安卓系统中

Xposed Installer

可以理解为是一个特殊的安卓的应用

专门用来安装Xposed框架

被安装的安卓系统

可以用安卓模拟器

安卓模拟器有很多，不是所有的都能成功安装

尝试过

网易MuMu

运行速度不错，但不支持设置Wifi代理

详见

【未解决】Mac中用Charles抓包网易Mumu安卓模拟器中Android的app

Andy

安装后无法正常运行

详见

【未解决】Mac中尝试用Andy安卓模拟器去供Charles抓包Android中app的数据

最终跑通的路是

Mac版夜神安卓模拟器

基于Android 4.4.2

-》找到了匹配的2.7（或更低的2.6等）版本的Xposed Installer，即可安装

注：更高的3.x版本，比如3.5.1，不支持Android 4.4，只支持Android 5

详见

【已解决】Mac中夜神安卓模拟器中安装Xposed框架

安装XPosed框架 · 好用的安卓模拟器：夜神Nox (crifan.org)

【已解决】Mac中夜神模拟器中安装Xposed模块：JustTrustMe

也可以用安卓真机

但前提是：安卓手机要有root权限

但（2019年及之后）很难买到支持root权限的手机

之前跑通的路是

淘宝上买的二手的已root的小米4，型号：MI 4LTE-CU，系统：Android 4.4.4

注意：

在无端被MIUI自动升级（从5.8.5升级为7.5.12.17）而丢失了卖家预装好的Xposed Installer之后，再去费了番功夫想办法重新安装可用的Xposed，最终思路是：

网上找到了某大神SolarWarez修改后的2.6的版本的Xposed：

XposedInstaller_v2.6.1_by_SolarWarez_20151129.apk

才得以成功安装

激活Xposed后，即可正常安装JustTrustMe等模块

最终实现SSL pinning的绕开/禁止的效果

就可以全部看到https解密后的明文了

详见

【已解决】小米4中重新安装Xposed Installer和激活Xposed框架

【记录】给二手已root小米4设置Charles代理和安装Charles证书和启用Xposed

注意手机有变砖可能

刷xposed框架会修改系统文件，所以可能会导致手机变砖，系统崩溃。以及刷成功后系统变卡变慢。并且不保证每台机器都可以刷成功，请自行评估在决定是否安装

-》不建议在自己的（常用）手机中装XPosed，因为很容易导致变砖

-》建议在安卓模拟器上，或者其他开发专用的安卓机上装XPosed

-》或者也可以在自己手机或开发专用安卓机中免root安装VirtualXposed或太极

因为免root不会导致系统崩溃或手机变砖

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48

安装EdXposed

安装EdXposed

此处介绍Android 11的Google Pixel 3中如何安装EdXposed：

要安装EdXposed框架的话，要：

先安装好：Magisk

再安装2部分

Magisk的插件

先：Riru = Riru Core

再：EdXposed

依赖于：Riru插件

是：EdXposed的Core端

EdXposed Manager=EdXposed的app端

或者换种说法：

EdXposed分2部分

EdXposed的core内核

Magisk中的：EdXposed插件 = Riru-EdXposed

其依赖于：Magisk插件：Riru

EdXposed的app端

EdXposed Manager的apk

所以分别去下载和安装：

EdXposed Manager

Releases · ElderDrivers/EdXposedManager (github.com)

https://github.com/ElderDrivers/EdXposedManager/releases/download/v4.6.2.0.0/EdXposedManager-4.6.2-46200-org.meowcat.edxposed.manager-release.apk

Magisk插件

Riru (Core)

Releases · RikkaApps/Riru (github.com)

https://github.com/RikkaApps/Riru/releases/download/v25.4.4/riru-v25.4.4-debug.zip

EdXposed

Releases · ElderDrivers/EdXposed (github.com)

https://github.com/ElderDrivers/EdXposed/releases/download/v0.5.2.2/EdXposed-v0.5.2.2_4683-master-z-debug.zip

安装过程：

Magisk的插件

Riru插件 = Riru = Riru Core

EdXposed Manager

adb install EdXposedManager-4.6.2-46200-org.meowcat.edxposed.manager-release.apk

安装后效果：

Magisk：新增Riru和Riru - EdXposed插件

EdXposed Manager：用于管理EdXposed框架

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48

EdXposed常见问题

EdXposed常见问题

请先从 Magisk Manager中安装Riru，Installation failed

现象：Android 11的Google Pixel 3中，最新版Magisk中去安装最新版Riru插件：riru-v26.1.7.r530.ab3086ec9f-release.zip，结果报错：

！请先从 Magisk Manager中安装Riru
! Installation failed

原因

表面原因：已安装的Riru版本，和此处EdXposed不兼容

深层次原因：

[BUG] Error detect riru · Issue #873 · ElderDrivers/EdXposed (github.com)

The author of Riru is very self-righteous, it discards API compatibility again. For the time being, we don't have the energy to follow an API that is extremely unfriendly to development and compatibility

解决办法：换装别的版本的Riru v25.4.4

附录

Riru v25.4.4下载地址

https://t.me/EdXposed/136

Releases · RikkaApps/Riru (github.com)

https://github.com/RikkaApps/Riru/releases/download/v25.4.4/riru-v25.4.4-release.zip

https://github.com/RikkaApps/Riru/releases/download/v25.4.4/riru-v25.4.4-debug.zip

EdXposed中安装插件卡死显示等待下载中

现象：EdXposed中下载插件出现卡死，始终显示：等待下载中，无进度

原因：需要翻墙

解决办法：去给安卓手机的WiFi加上翻墙代理

此处先拷贝出Mac中的相关代理：

export HTTP_PROXY=http://127.0.0.1:58591; export HTTPS_PROXY=http://127.0.0.1:58591; export ALL_PROXY=socks5://127.0.0.1:51837

只需要用其中的http的代理即可，端口号是：58591

而当前Mac的IP是：192.168.31.12

 ifconfig | grep 192
    inet 192.168.31.12 netmask 0xffffff00 broadcast 192.168.31.255

所以去给Pixel3的WiFi的代理配置

参数

代理IP：192.168.31.12

代理端口：58591

效果

如此，即可顺利下载插件了

下载完毕后，触发了自动安装

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48

安装LSPosed

安装LSPosed

此处去给Android 13的Google Pixel 5安卓手机，去安装LSPosed：

安装LSPosed

有2种模式

基于Riru的

安装方式

很多教程都提到，分2步

先安装Riru-Core

再安装Riru-LSPosed

基于Zygisk的

安装方式

直接安装：只需一步

Magisk中安装插件：LSPosed-Zygisk

Magisk中勾选：

Zygisk：在Zygote中运行Magisk

此处详细介绍第二种方式：

Magisk中安装插件：LSPosed-Zygisk

先确保Magisk中：

已勾选：Zygisk

然后再去：Magisk中安装LSPosed-Zygisk插件

概述

从LSPosed官网下载到最新版LSPosed-v1.8.6-6712-zygisk-release.zip，下载到手机中，再去Magisk中安装该插件，即可

详解

（1）下载LSPosed-Zygisk模块

从LSPosed的官网：Releases · LSPosed/LSPosed (github.com)

找到并下载最新版

https://github.com/LSPosed/LSPosed/releases/download/v1.8.6/LSPosed-v1.8.6-6712-zygisk-release.zip

得到：LSPosed-v1.8.6-6712-zygisk-release.zip

（2）用adb下载到安卓手机中

adb push LSPosed-v1.8.6-6712-zygisk-release.zip /sdcard/Download/

输出举例

➜  LSPosed adb push LSPosed-v1.8.6-6712-zygisk-release.zip /sdcard/Download/
LSPosed-v1.8.6-6712-zygisk-release.zip: 1 file pushed, 0 skipped. 53.5 MB/s (2362560 bytes in 0.042s)

（3）Magisk中本地安装LSPosed-Zygisk插件

Magisk->模块->从本地安装->从下载目录找到并点击LSPosed-v1.8.6-6712-zygisk-release.zip->安装确认：确定->重启

Magisk->模块->从本地安装

从下载目录找到并点击LSPosed-v1.8.6-6712-zygisk-release.zip

安装确认：确定

安装完成后，点击重启

即可在Magisk的模块中看到：

已安装：Zygisk-LSPosed模块

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48

LSPosed相关日志

LSPosed相关日志

LSPosed安装过程日志

期间可以点击保存按钮，保存出log日志文件：

再去把log日志导出上传到电脑端：

➜  LSPosed adb pull /sdcard/Download/magisk_install_log_2023-08-11T09.39.04.log .
/sdcard/Download/magisk_install_log_2023-08-11T09.39.04.log: 1 file pulled, 0 skipped. 0.7 MB/s (4527 bytes in 0.006s)

查看到内容是：

magisk_install_log_2023-08-11T09.39.04.log

- Copying zip to temp directory
- Installing LSPosed-v1.8.6-6712-zygisk-release.zip
- Current boot slot: _a
- Device is system-as-root
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: module.prop
***********************
 Zygisk - LSPosed
 by LSPosed Developers
***********************
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: customize.sh
*******************
 Powered by Magisk
*******************
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: verify.sh
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
   creating: META-INF/com/google/android/
  inflating: META-INF/com/google/android/update-binary.sha256
  inflating: META-INF/com/google/android/updater-script.sha256
  inflating: META-INF/com/google/android/update-binary
  inflating: META-INF/com/google/android/updater-script
- LSPosed version v1.8.6 (6712)
- Extracting verify.sh
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: customize.sh
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: customize.sh.sha256
- Verified META-INF/com/google/android/update-binary
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: verify.sh
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: verify.sh.sha256
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: util_functions.sh
- Verified customize.sh
- Verified verify.sh
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: util_functions.sh.sha256
- Verified util_functions.sh
- Android SDK version: 33
- Magisk version: 26100
- Installing from Magisk app
- Device platform: arm64
- Extracting module files
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: module.prop
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: module.prop.sha256
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: post-fs-data.sh
- Verified module.prop
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: post-fs-data.sh.sha256
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: service.sh
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: service.sh.sha256
- Verified post-fs-data.sh
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: uninstall.sh
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: uninstall.sh.sha256
- Verified service.sh
- Verified uninstall.sh
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: framework/lspd.dex
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: framework/lspd.dex.sha256
- Verified framework/lspd.dex
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: daemon.apk
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: daemon.apk.sha256
- Verified daemon.apk
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: daemon
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: daemon.sha256
- Verified daemon
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: manager.apk
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: manager.apk.sha256
- Verified manager.apk
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: liblspd.so
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: liblspd.so.sha256
- Verified lib/armeabi-v7a/liblspd.so
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: liblspd.so
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: liblspd.so.sha256
- Verified lib/arm64-v8a/liblspd.so
- Extracting dex2oat binaries
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: dex2oat
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: dex2oat.sha256
- Verified bin/armeabi-v7a/dex2oat
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: dex2oat
Archive:  /data/user/0/com.topjohnwu.magisk/cache/flash/install.zip
  inflating: dex2oat.sha256
- Verified bin/arm64-v8a/dex2oat
- Patching binaries
- Welcome to LSPosed!
- Done

供参考。

Magisk启动日志带LSPosed

Magisk重启后，相关日志中，能看到LSPosed字样：

zygisk_lsposed: exec [service.sh]

也去点击保存按钮，保存出日志文件：

导出日志文件：

➜  LSPosed adb pull /sdcard/Download/magisk_log_2023-08-11T09.40.15.log .
/sdcard/Download/magisk_log_2023-08-11T09.40.15.log: 1 file pulled, 0 skipped. 11.3 MB/s (96550 bytes in 0.008s)

可以看到：log日志内容很多。

此处只摘录相关的核心日志：

---Magisk Logs---
26.1 (26100)

03-18 05:03:44.576   964   964 I : Magisk 26.1(26100) daemon started
03-18 05:03:44.578   964   964 I : * Device API level: 33
03-18 05:03:44.587   964   966 I : ** post-fs-data mode running
03-18 05:03:44.587   964   966 I : * Mounting mirrors
03-18 05:03:44.625   964   966 I : * Initializing Magisk environment
03-18 05:03:44.638   964   966 I : * Running post-fs-data.d scripts
03-18 05:03:44.641   964   966 I : Upgrade / New module: zygisk_lsposed
03-18 05:03:44.641   964   966 I : * Running module post-fs-data scripts
03-18 05:03:44.642   974   974 I : zygisk_lsposed: exec [post-fs-data.sh]
03-18 05:03:44.658   964   966 I : * Loading modules
08-11 09:39:34.139   964   966 I : ** late_start service mode running
08-11 09:39:34.139   964   966 I : * Running service.d scripts
08-11 09:39:34.141   964   966 I : * Running module service scripts
08-11 09:39:34.143   964   966 I : zygisk_lsposed: exec [service.sh]
08-11 09:39:34.255  1015  1015 I : zygisk64: replaced com/android/internal/os/Zygote#nativeForkAndSpecialize
08-11 09:39:34.255  1015  1015 I : zygisk64: replaced com/android/internal/os/Zygote#nativeForkSystemServer
08-11 09:39:34.255  1015  1015 I : zygisk64: replaced com/android/internal/os/Zygote#nativeSpecializeAppProcess
08-11 09:39:34.554  1016  1016 I : zygisk32: replaced com/android/internal/os/Zygote#nativeForkAndSpecialize
08-11 09:39:34.554  1016  1016 I : zygisk32: replaced com/android/internal/os/Zygote#nativeForkSystemServer
08-11 09:39:34.554  1016  1016 I : zygisk32: replaced com/android/internal/os/Zygote#nativeSpecializeAppProcess
08-11 09:39:36.110   964   966 I : denylist: initializing internal data structures
08-11 09:39:47.041   964   966 I : ** boot-complete triggered

供参考。

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48

打开LSPosed的app

打开LSPosed的app

LSPosed的app=LSPosed Manager=LSPosed管理器

之前是有独立的app的：LSPosed Manager

现在：好像无需安装独立的LSPosed Manager的app，而是：

从系统通知中打开LSPosed的app

从系统通知中打开LSPosed的app

概述

安装好LSPosed后，从系统通知中，点击打开LSPosed的app，后续根据提示，点击创建快捷方式（微件），放到系统桌面，作为普通安卓app使用：点击即可打开LSPosed的app

详细步骤

Android系统通知 -> LSPosed已加载

->点按通知以打开管理器

-> 打开了 LSPosed的app

-> 首次打开会出现提示：

欢迎使用LSPosed，你正在使用寄生管理器，可创建快捷方式或继续从通知中打开。 创建快捷方式 不再显示 确定

-> 点击 创建快捷方式

-> 出现 Shell弹框，点击：添加到主屏幕

-> 系统桌面即可出现新图标：LSPosed

注：app的logo图标右下角带个安卓小logo，估计就表示是 微件的意思

-> 以后即可点击系统桌面图标LSPosed，即可打开启动LSPosed的app

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48

LSPosed界面和功能

LSPosed界面和功能

LSPosed桌面logo

LSPosed主界面=主页

点击桌面logo，进入，打开主页=主界面：

下拉可看到更多内容：

复制内容

可以点击复制：

复制出文本内容：

API 版本：93

Xposed API 调用保护：未启用

Dex 优化器包装：支持

框架版本：1.8.6 (6712)

管理器版本：1.8.6 (6712)

系统版本：13 (API 33)

设备：Google Google Pixel 5

系统架构：arm64-v8a

设置

主页中，右上角 三个点，点击后可以看到：

反馈或建议

关于

关于

日志

日志 -> 默认显示：模块日志：

点击 切换到 详细日志：

日志选项

继续日志页面，右上角三个点，点击后可以看到各种设置：

滚动到顶部

滚动到底部

立即清空日志

自动换行

-》 勾选：自动换行 后的效果：

仓库

模块

设置

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48

Shamiko模块

MagiskHide替代方案：Shamiko模块

背景：

之前Magisk有个MagiskHide的模块

功能：实现隐藏root -> 避免别的app检测到安卓已root

功能很好用

但是由于Magisk 24.0+移除了MagiskHide，因此提供一个替代的隐藏root的方案：Shamiko模块

下载和安装Shamiko模块

下载到电脑

LSPosed Official Website | LSPosed.github.io

Releases · LSPosed/LSPosed.github.io

找到最新版

https://github.com/LSPosed/LSPosed.github.io/releases/download/shamiko-174/Shamiko-v0.7.3-174-release.zip

下载得到：Shamiko-v0.7.3-174-release.zip

传输下载到安卓手机

➜  LSPosed adb push Shamiko-v0.7.3-174-release.zip /sdcard/Download/
Shamiko-v0.7.3-174-release.zip: 1 file pushed, 0 skipped. 327.6 MB/s (247141 bytes in 0.001s)

去Magisk中安装Shamiko模块

打开Magisk->模块->从本地安装

点选Shamiko-v0.7.3-174-release.zip

安全确认：确定

开始安装，直到安装完成，点击重启

重启Magisk后，即可看到：已安装的模块Shamiko

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48

使用Xposed

使用Xposed

安装了Xposed后，对于Xposed的使用，主要是：

安装各种插件

使用各种插件

实现特定的目的和效果

注：Xposed的插件=plugin=模块=module

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48

Xposed插件

Xposed插件

下面介绍一些常用的Xposed插件。

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48

JustTrustMe

JustTrustMe

JustTrustMe

绕过HTTPS证书校验

XPosed中安装JustTrustMe · 好用的安卓模拟器：夜神Nox (crifan.org)

【已解决】Mac中夜神模拟器中安装Xposed模块：JustTrustMe

然后就可以去用Charles抓包了，而绕开https了，实现了破解https的目的

app抓包利器：Charles

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48

砸壳导出dex

砸壳导出dex

FDex2

FDex2 · Android逆向：静态分析

DumpDex

详见：

DumpDex · Android逆向：静态分析

具体用法：

配合XPosed插件导出dex · 好用的安卓模拟器：夜神Nox (crifan.org)

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48

app可调试

让app可调试的插件

Xdebuggable

Xdebuggable

旧页面：均已失效

[MM-O] Xdebuggable | Xposed Module Repository

旧版Xposed可以搜到相关插件

apk下载地址：

https://dl-xda.xposed.info/modules/pw.rabit.xposed.xdebuggable_v4_c319ea.apk

新来源

https://github.com/ttimasdf/XDebuggable

apk下载

https://github.com/ttimasdf/XDebuggable/releases

举例

https://github.com/ttimasdf/XDebuggable/releases/download/v1.3/app-release.apk

XAppDebug

XAppDebug

Github

https://github.com/Palatis/XAppDebug

下载

https://github.com/Palatis/XAppDebug/releases

LSPosed插件页面

XAppDebug - Xposed Module Repository

https://modules.lsposed.org/module/tw.idv.palatis.xappdebug

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48

GravityBox

GravityBox

GravityBox

是什么：Xposed插件

作用

各种功能

从更改锁定屏幕、状态栏的颜色（及其透明度）、修改标准的最小和最大亮度级别、停用烦人的图标、建立扩展桌面模式等等

其他比如

更改赋予 Android 终端硬件按钮的功能

修改状态栏的外观和显示的选项

改变可以在手机或平板电脑屏幕上显示的亮度（这个是积极的，尤其是最小的，以节省电池）

直接应用程序分配给设备的触摸按钮

管理终端 RAM 的使用，了解此应用程序的消耗

修改锁屏

即使显示桌面也能旋转屏幕

其他介绍

安卓4.4电池图标美化、状态栏图标美化、时间居中显示、支持数字电量、全局透明度开启、隐藏SIM卡提示和显示、增加高级电源菜单、修改快捷下拉栏、简单开启虚拟按键功能、自带按键救星功能、关机菜单加入截屏功能、旧式电视CRT关屏特效、恢复开发者选项、锁屏快速程序启动

重力工具箱GravityBox是一款依赖Xposed框架支持的全能系统工具，支持修改ROM的部分系统级重要参数

Xposed框架上必备神器级模块，软件是原生支持中文版本，可以修改和定制非常多系统级的功能。原生这个工具只能用于MTK平台，现在作者已经将它弄成通用的了

截图

试用GravityBox

从Github的release页面下载到apk：

https://github.com/GravityBox/GravityBox/releases/download/v11.0.5_r/GravityBox_R_11.0.5.apk

然后安装，安装后可以在EdXposed Manager中看到Xposed插件，点击开启：

更多选项：

点击打开：

首次有警告弹框：

主界面可以看到各种功能：

然后记录点相关功能：

实体按键调整

电源键调整

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48

Xposed插件开发

Xposed插件开发

TODO：

【未解决】用FDex2核心源码开发出可以正常安装的安卓apk的XPosed插件

【记录】参考和翻译XPosed的官网关于如何开发XPosed插件的文档

【记录】确保Android Studio能用Nox安卓模拟器设备去调试

【已解决】Android Studio中实现一个空功能的基本的安卓apk

【未解决】给安卓应用中新增一个按钮和点击按钮改变文字

【已解决】安卓app开发：新增一个按钮并设置文字和点击响应事件函数

【记录】Nox夜神模拟器中查看已安装的Xposed插件的安卓应用

【已解决】把XPosed插件的安卓apk安装到Nox夜神安卓模拟器中

【记录】确认XPosed插件生效正常工作输入期望log日志信息

【已解决】研究XPosed Installer的log日志

【记录】给XPosed插件版本号增加为1.1且用AS重新调试安装

【已解决】XPosed插件报错：java.lang.IllegalAccessError Class ref in pre-verified class resolved to unexpected implementation

【未解决】Android Studio中如何调试XPosed插件

【无需解决】把XPosed插件的安卓apk安装到普通安卓AVD模拟器中

【未解决】Android Studio调试Xposed插件报错：Waiting for application to come online

【未解决】研究安卓设备的设置中的选择调试应用和等待调试器的含义和用法

【未解决】AS中调试外部app显示所有进程看不到我们的Xposed插件的app的进程

【未解决】Mac中其他好用且能安装Xposed框架的安卓模拟器

【记录】下载和研究Xposed的XposedTools源码

【未解决】Mac中自己去编译x86_64的sdk23的Xposed框架zip安装包

【未解决】换XPosed插件开发所需的安卓模拟器从Nox夜神换为网易Mumu

此处环境：

电脑：Mac

已安装Android Studio

可用adb查看到安卓设备

➜  ~ adb devices -l
List of devices attached
9C181A8D3C3F3B         device usb:1048576X product:redfin model:Pixel_5 device:redfin transport_id:3

安卓手机：Google Pixel 5

Android 11

已root，已安装：EdXposed、Magisk

下面介绍，如何开发一个最基本的Xposed插件：

用AndroidStudio创建基本的安卓app项目

改动项目，增加Xposed相关配置

其中包括写Xposed插件代码

编译并安装Xposed的插件apk到安卓手机

确认Xposed插件的apk已安装，并测试插件是否生效

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48

新建安卓app项目

用AndroidStudio创建基本的安卓app项目

先用Android Studio去创建一个最基本的，普通的安卓app的项目：

核心步骤：Android Studio->New Project->No Activity->设置项目基本属性：Name、Package Name、Save Location、Language、Minimum SDK ->Finish

详细步骤：

新建项目

点击：New Project

选择类型：No Activity

此处选择：No Activity=无页面

说明

因为此处最基本的Xposed插件，无需页面

只要触发了对应的hook代码，能输出log，就表示真正生效了

另外：复杂的Xposed插件，可以根据自己需要去加上页面

用以支持各种配置和逻辑等等更多其他内容

设置项目基本参数

继续去设置安卓项目的基本参数：

Name：CrifanXposedHook

Package Name：com.example.crifanxposedhook

Save Location：/Users/crifan/dev/dev_root/androidReverse/Xposed/CrifanXposedHook

Language：Java

为了保险起见，先选Java，等熟悉了，再换到Kotlin

Minimum SDK：API 24: Android 7.0 (Nougat)

其他选项

可以根据自己需要，改为其他版本，比如更高版本的：API 27: Android 8.1 (Oreo)

初始化项目

点击Finish后，即可开始项目初始化，下载相关SDK等内容，直到下载完成：

进入Android Studio的主页面，开始项目初始化：

后续会继续初始化，包括Gradle等相关资源的下载、导入、重建索引等。

最后初始化完毕：

设置代理

由于，从google等国外网站下载Google开发相关的资源，比如SDK等，国内网络经常无法连接或下载速度慢，所以此处往往还会弹框，问你是否要加代理

此处选择添加代理，使用此处Mac中已有的Trojan的代理：

export HTTP_PROXY=http://127.0.0.1:58591; export HTTPS_PROXY=http://127.0.0.1:58591; export ALL_PROXY=socks5://127.0.0.1:51837

对应代理设置是：

最终项目文件和结构

点击展开目录结构如下：

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48

新增Xposed配置

改动项目，增加Xposed相关配置

新增改动或文件

新建xposed_init

新建文件：app/src/main/assets/xposed_init

目的：定义插件hook代码所在的类

文件内容：

com.example.crifanxposedhook.XposedHook

内容说明：

com.example.crifanxposedhook.XposedHook

是后续的具体的hook插件代码对应的Java的类

新建hook的Java类文件：XposedHook.java

新建hook代码文件：app/src/main/java/com/example/crifanxposedhook/XposedHook.java

目的： 实现hook代码逻辑

文件内容：

package com.example.crifanxposedhook;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;

public class XposedHook implements IXposedHookLoadPackage {
    public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {
        XposedBridge.log("XposedHook Loaded app: " + lpparam.packageName);
    }
}

代码说明

无需理会报错：Cannot resolve symbol IXposedHookLoadPackage

基本上确定是Android Studio的bug？

如果后续忘了加上jcenter()，则此处会报错找不到类：Cannot resolve symbol de

需要记得加上jcenter()，详见后续内容

本身已有app名称定义：strings.xml

本身已有：app/src/main/res/values/strings.xml

文件内容：

<resources>
    <string name="app_name">CrifanXposedHook</string>
</resources>

内容说明

其中CrifanXposedHook是当前app名称=Xposed插件名称=安卓项目名称

给AndroidManifest.xml中加上xposed相关定义

改动：app/src/main/AndroidManifest.xml

目的：新增Xposed相关配置 -> 让EdXposed等Xposed框架可以识别此（安卓的app是）Xposed插件

核心改动：修改application的部分属性，并加上meta-data的Xposed相关属性

改动后的：

文件内容：

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.CrifanXposedHook"
        tools:targetApi="31" >

        <!-- 是否是xposed模块，xposed根据这个来判断是否是模块 -->
        <meta-data
            android:name="xposedmodule"
            android:value="true" />

        <!-- 模块描述，显示在xposed模块列表那里第二行 -->
        <meta-data
            android:name="xposeddescription"
            android:value="crifan测试XPosed插件hook" />

        <!-- 最低xposed版本号。对于Xposed来说，最新的是：82
            注：后续如果需要用EdXposed最新的，可以改为：93
         -->
        <meta-data
            android:name="xposedminversion"
            android:value="82" />
    </application>

</manifest>

参数说明

xposedmodule=true

表示是Xposed插件=Xposed模块

xposeddescription=crifan测试XPosed插件hook

插件描述，会显示=出现在Xposed模块列表中的文字描述部分

xposedminversion=82

表示：Xposed Framework API=Xposed框架的API版本

此处值：82

最新的Xposed框架的API版本就是82

不过其实也是好多年前了（好像是2016年，当前此刻是2023年）

对应支持Android版本：> Android 5.0

对于后续要测试的安卓手机的安卓版本（Android 8.1，Android 11，Android 13）等，完全满足此要求

可选值=所有版本：36、37、39、42、50、51、52、53、60、63、65、81、82

详见：IXposedHookLoadPackage | Xposed Framework API

另外最好：去你的安卓手机中确认当前Xposed的API版本

比如

此处的Pixel5中，EdXposed首页中的：v93.0

表示用的是，更加新的93的EdXposed的Xposed的API版本

注：更新的API版本，支持其他更新的API接口

但是同时会兼容旧版本Xposed的API接口的

如果是之前旧的Android 4.4的安卓手机，则往往Xposed的API版本写的是54，测试就要此处设置为

xposedminversion=53

表示支持 <= Android 5.0，因为支持Android 4.x的Xposed的API版本是54

附录：旧版本Xposed插件的app/src/main/AndroidManifest.xml配置

另外贴出，之前，针对于旧版本Android 4.4的安卓手机

当时是Android 4.4.2的Nox夜神模拟器

对应adb连接并查看设备

crifan@licrifandeMacBook-Pro  ~  adb connect 127.0.0.1:62001
connected to 127.0.0.1:62001
crifan@licrifandeMacBook-Pro  ~  adb devices
List of devices attached
127.0.0.1:62001    device

的src/main/AndroidManifest.xml的配置：

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.crifan.crifanxposedmodule">

    <!--android:debuggable="true"-->
    <!--tools:ignore="HardcodedDebugMode"-->
    <!--android:exported="true"-->

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
    >
        <!-- 是否是xposed模块，xposed根据这个来判断是否是模块 -->
        <meta-data
            android:name="xposedmodule"
            android:value="true" />

        <!-- 模块描述，显示在xposed模块列表那里第二行 -->
        <meta-data
            android:name="xposeddescription"
            android:value="crifan测试XPosed模块开发" />

        <!-- 最低xposed版本号。用最新的：82
            详见：
                https://github.com/rovo89/XposedBridge/wiki/Using-the-Xposed-Framework-API
                https://github.com/rovo89/XposedBridge/wiki/Development-tutorial
                https://raw.githubusercontent.com/rovo89/XposedBridge/art/app/doclib/api/changelog.txt
            但会报错：该模块需要较新版本的XposedBridge（82），因此无法激活
            所以还是改为 53
         -->
        <meta-data
            android:name="xposedminversion"
            android:value="53" />

    </application>
</manifest>

供参考。

给app/build.gradle中加上xposed包的依赖

改动文件：app/build.gradle

目的：让Gradle下载相关xposed的jar包（和相关源码）

核心改动：加上：

        versionName "2023.08.09.01"

    compileOnly 'de.robv.android.xposed:api:82'
    compileOnly 'de.robv.android.xposed:api:82:sources'

改为：

app/build.gradle

plugins {
    id 'com.android.application'
}

android {
    namespace 'com.example.crifanxposedhook'
    compileSdk 33

    defaultConfig {
        applicationId "com.example.crifanxposedhook"
        minSdk 24
        targetSdk 33
        versionCode 1
        versionName "2023.08.09.01"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'com.google.android.material:material:1.9.0'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.5'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'

    compileOnly 'de.robv.android.xposed:api:82'
    compileOnly 'de.robv.android.xposed:api:82:sources'
}

参数说明：

xposed相关

compileOnly 'de.robv.android.xposed:api:82'

xposed的jar包依赖，版本是用最新的82

和之前的AndroidManifest.xml中的xposedminversion=82是对应的

compileOnly 'de.robv.android.xposed:api:82:sources'

xposed的源码包

注：

xposed官网推荐的provided（而不要用compile）已废弃，所以改用推荐的：compileOnly

compileOnly：表示代码编译会调用到，但是编译后输出的apk不会包含XPosed的库

这样就不会导致报错：java.lang.IllegalAccessError Class ref in pre-verified class resolved to unexpected implementation

app相关

versionName "2023.08.09.01"

app的版本号

在app列表详情页和EdXposed的Xposed插件列表中可以看到

附录：旧版本Android Studio中app的Gradle配置

对于之前的旧版本的Android Studio v4.2.2 来说：

app的Gradle配置：app/build.gradle

主要是加了：compileOnly 'de.robv.android.xposed:api:53'

内容为：

apply plugin: 'com.android.application'

android {
    compileSdkVersion 29
    defaultConfig {
        applicationId "com.crifan.crifanxposedmodule"
        minSdkVersion 19
        targetSdkVersion 29
        versionCode 3
        versionName "1.2"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    compileOnly 'de.robv.android.xposed:api:53'
}

全局Gradle配置文件：settings.gradle

项目级别的=全局的Gradle配置文件：settings.gradle

目的：加入xposed包所在的源jcenter的依赖

改动：给dependencyResolutionManagement的repositories加上jcenter()

变成：

pluginManagement {
    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
        jcenter()
    }
}
rootProject.name = "CrifanXposedHook"
include ':app'

参数说明：

jcenter()

xposed的官网的jar包的源，就放在了jcenter

Gradle去sync同步后，会去下载，之前加入的依赖

compileOnly 'de.robv.android.xposed:api:82'

compileOnly 'de.robv.android.xposed:api:82:sources'

分别对应的jar包地址：

https://jcenter.bintray.com/de/robv/android/xposed/api/82/api-82-sources.jar

https://jcenter.bintray.com/de/robv/android/xposed/api/82/api-82.jar

附录：旧版本Android Studio中全局Gradle配置

对于之前的旧版本的Android Studio v4.2.2 来说：

系统全局的：build.gradle配置：

核心改动：buildscript和allprojects中的repositories中，都加上了：jcenter()

内容为：

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:7.0.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

调试参数设置

Launch改为Nothing

此处，由于：

新建项目时，就选择了No Activity

且此处项目中的确也没有Activity

所以需要去：

把项目调试配置中的：

Android Studio->Run->Edit Configuration->Android App->app->General->Launch Options->从默认的：

Launch: Default Activity

改为：

Launch: Nothing

说明：

如果不改，则默认去Debug调试，会去尝试启动Default Activity，但是由于此处没有Activity=页面，导致报错

Could not identify launch activity: Default Activity not found
Error while Launching activity
Failed to launch an application on all devices

改了后，后续点击Debug调试按钮去调试时

最后会报错

要么是：Timed out waiting for process xxx to appear on

要么是：Processes xxx are not found Aborting session

原因：感觉是，安卓中，Activity=页面=Process=进程

而当前Xposed插件的项目中，的确没有Activity，所以没有进程可供调试，所以报错

其他

无需关闭Instant Run

此处Android Studio的版本是Android Studio Flamingo | 2022.2.1 Patch 2，此处：

已经没有官网提示的Instant Run了

最多算是有个，或许相关的，但是默认没有开启的

Live Edit

所以无需去：关闭Instant Run。

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48

编译安装Xposed插件apk

编译安装Xposed插件apk

接着再去

手动编译生成apk

编译项目=编译出Xposed插件的安卓apk = Build apk

Android Studio->Build->Build Bundle(s)/APK(s)->Build APK(s)

即可编译出Xposed插件=类似于普通安卓app的apk文件

再手动下载到安卓手机中，手动去安装apk

或者直接自动的：编译+安装apk

点击Android Studio中的Debug app（或运行Run）按钮

即可自动完成

编译出apk

安装apk到安卓手机

尝试调试（或运行）

注：此处实际上由于没有Activity，所以调试（或运行）会报错：

找不到进程

Processes are not found Aborting session 或 Timed out waiting for process to appear on

不过此处已实现我们的目标：安装最新版Xposed插件的apk到安卓手机了

剩下的，则忽略这些错误即可

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48

确认插件已安装和能生效

确认插件已安装和能生效

此时，Xposed插件=普通的安卓apk，已安装到安卓手机中：

如何确认Xposed插件已安装成功

可以通过，去下面这些地方：

安卓手机中设置中系统的应用列表中

Xposed框架中模块列表中

此处EdXposed

对比：旧的Xposed Installer中的Xposed模块列表中，显示效果是这种

能看到：自己的Xposed插件=普通安卓app，则说明：Xposed插件已成功安装

如何确认Xposed插件正常工作已生效

先开启插件

此处EdXposed中看到的自己的Xposed插件，右边有个开关，点击开启：

注：开启插件时，底部会出现提示：EdXposed模块列表已更新，变更将在重启后生效

（根据提示，继续）再去重启EdXposed

对比：旧的Xposed Installer中，新安装了Xposed插件后，需要重启Android手机才能使得插件生效

即可成功开启插件。

再确认插件是否正常工作

如何确认=测试Xposed插件已生效=真正正常工作了?

先去安卓手机Pixel5中操作：随便打开任意一些普通的安卓app即可

然后去找找，能看到输出对应hook的log日志，就说明插件正常生效了

问题变成：如何查看Xposed插件的hook的log日志

目前已知主要有2种方式：

Xposed框架中的日志

Android Studio中的LogCat

Xposed框架中的日志

对于此处的：EdXposed

EdXposed->日志->模块日志：

就可以看到hook的log日志：

其中的：

XposedHook Loaded app: com.google.android.apps.safetyhub

XposedHook Loaded app: com.tencent.mm

XposedHook Loaded app: com.google.android.gms

XposedHook Loaded app: org.meowcat.edxposed.manager

就表示，我们之前的Xposed的hook代码

XposedBridge.log("XposedHook Loaded app: " + lpparam.packageName);

真正工作了：能hook到对应的app了，输出对应的log了。

导出全部日志

另外，点击右上角纸飞机的按钮，可以导出当前全部的.txt日志文件：

EdXposed_Modules_20230809_153813.txt

EdXposed Log
Powered by Log Catcher
QQ support group: 855219808
Telegram support group: @Code_Of_MeowCat
Telegram channel: @EdXposed
--------- beginning of information
Manufacturer: Google
Brand: google
Device: redfin
Product: redfin
Model: Pixel 5
Fingerprint: google/redfin/redfin:11/RQ3A.211001.001/7641976:user/release-keys
ROM description: redfin-user 11 RQ3A.211001.001 7641976 release-keys
Architecture: arm64-v8a
Android build: RQ3A.211001.001
Android version: 11
Android sdk: 30
EdXposed version: v0.5.2.2_4683-master
EdXposed api: 93
Riru version: v25.3.4.r399.84f7084 (399)
Riru api: 25
Magisk: 25.2:MAGISK (25200)
--------- beginning of main
--------- beginning of system
--------- beginning of crash
08-09 15:31:13.253 28102 28102 I EdXposed-Bridge: Loading modules from /data/app/~~lakNq25Fyxv5X7_V5iswfQ==/com.example.crifanxposedhook-nubXoNVT2XbwkrSmpZB8tQ==/base.apk
08-09 15:31:13.692 28102 28102 I EdXposed-Bridge:   Loading class com.example.crifanxposedhook.XposedHook
08-09 15:31:13.913 28102 28102 I EdXposed-Bridge: XposedHook Loaded app: com.google.android.apps.safetyhub
08-09 15:31:21.951 28342 28342 I EdXposed-Bridge: Loading modules from /data/app/~~lakNq25Fyxv5X7_V5iswfQ==/com.example.crifanxposedhook-nubXoNVT2XbwkrSmpZB8tQ==/base.apk
08-09 15:31:22.379 28342 28342 I EdXposed-Bridge:   Loading class com.example.crifanxposedhook.XposedHook
08-09 15:31:22.571 28342 28342 I EdXposed-Bridge: XposedHook Loaded app: com.tencent.mm
08-09 15:32:05.516 28102 28158 I EdXposed-Bridge: XposedHook Loaded app: com.google.android.gms
08-09 15:37:02.714  1472  1472 I EdXposed-Bridge: Loading modules from /data/app/~~lakNq25Fyxv5X7_V5iswfQ==/com.example.crifanxposedhook-nubXoNVT2XbwkrSmpZB8tQ==/base.apk
08-09 15:37:02.876  1472  1472 I EdXposed-Bridge:   Loading class com.example.crifanxposedhook.XposedHook
08-09 15:37:02.911  1472  1472 I EdXposed-Bridge: XposedHook Loaded app: org.meowcat.edxposed.manager

对比：旧版Xposed：XPosed Installer中，看到的Xposed插件的hook的log日志是：

Android Studio中的LogCat

（之前旧版）AS->LogCat->filter：XPosed，可以查看到hook日志：

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48

Xposed插件demo项目

Xposed插件demo项目

此处，去把上述整个的Xposed插件的demo的项目，上传到Github仓库：

crifan/CrifanXposedHook: Xposed Module plugin demo project of Android Studio

https://github.com/crifan/CrifanXposedHook.git

供参考。

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48

Xposed心得

Xposed心得

TODO：

心得

【已解决】Xposed如何hook混淆后的安卓应用中的类名和函数名

安卓破解可能会涉及到Xposed

注意到：

【已解决】mac版JD-GUI查看并导出jar包的java源代码

和：

【已解决】搞懂安卓app混淆和加固常见做法和相关逻辑

中都有个：XPosedCheck

-》看来是安卓apk加固方案内部用到了：去check检测XPosed相关的逻辑

-》说明软件加固的破解中，有些是借助XPosed去破解安卓的

-》实际情况的确也是，XPosed之类的框架，是帮助破解安卓的利器

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48

附录

附录

下面列出相关参考资料。

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48

参考资料

参考资料

【未解决】编写EdXposed插件去hook调试Android应用YouTube

【未解决】给安卓手机Google Pixel3去安装Xposed

【已解决】参考XPosed官网教程创建最基本的XPosed插件的安卓apk

【已解决】AS调试安卓Xposed插件app

【已解决】安卓逆向编写Xposed插件：创建安卓app项目

【已解决】AS中给Xposed插件初始化配置和写hook代码

【已解决】AS中Xposed插件代码报错：Cannot resolve symbol de

【无需解决】AS中Xposed插件代码报错：Cannot resolve symbol IXposedHookLoadPackage

【已解决】对于EdXposed的Pixel3如何设置Xposed插件的xposedminversion

【已解决】Android Studio的gradle出现警告：WARNING Configuration provided is obsolete and has been replaced with compileOnly

【无需解决】AS调试安卓app报错：Processes are not found Aborting session

【无需解决】AS中调试安卓app报错：Timed out waiting for process to appear on

【已解决】安卓手机Pixel5中EdXposed中确认Xposed插件是否安装成功和是否生效

【已解决】搞懂XPosed插件开发流程并开发出一个最基本的XPosed插件

【已解决】Android Studio调试没有Activity的XPosed插件时报错：Error running app Default Activity not found

【已解决】Xposed插件加载报错：dalvikvm had used a different IXposedHookLoadPackage during pre-verification

【已解决】XPosed插件开发期间xposedminversion应该改成什么值

【已解决】Android 11中Magisk中安装EdXposed插件

【已解决】在Android 11中安装EdXposed框架

【已解决】Android 11中Magisk中安装Riru插件

【已解决】Android 11中EdXposed Manager的下载安装和基本使用

【已解决】给root后的Android 11的Google Pixel中安装XPosed框架

【记录】google pixel3中查看已安装过的Magisk和EdXposed

【已解决】Android 11的Magisk中安装EdXposed 0.5.2.2结果失败：请先从Magisk Manager中安装Riru Installation failed

【已解决】Android13的Pixel5安装LSPosed

【已解决】Magisk中安装LSPosed后去打开LSPosed的app

【记录】LSPosed的app的界面和功能

【记录】给Magisk安装MagiskHide替代方案：Shamiko模块

【记录】LSPosed的详细日志内容

【已解决】Magisk中的：Zygisk

【记录】Xposed框架继承者：EdXposed、LSPosed、Tai Chi

【未解决】XposedInstaller中安装Xposed插件：[MM-O] Xdebuggable

【记录】下载安装试用XPosed模块：GravityBox

【已解决】XPosed模块：GravityBox

【模块框架】LSPatch - 免Root模块框架小白向安装使用指南 - 知乎 (zhihu.com)

Android Lspatch(模块工具) 0.5.1(385) - 果核剥壳 (ghxi.com)

安卓应用的安全和破解

好用的安卓模拟器：夜神Nox

Releases · ElderDrivers/EdXposedManager (github.com)

Releases · RikkaApps/Riru (github.com)

Releases · ElderDrivers/EdXposed (github.com)

[BUG] Error detect riru · Issue #873 · ElderDrivers/EdXposed (github.com)

[BUG] Error detect riru · Issue #873 · ElderDrivers/EdXposed (github.com)

[原创]Xposed 安装记录-『Android安全』-看雪安全论坛

Android APK脱壳--腾讯乐固、360加固一键脱壳 | 辉天神龙

Difference between Xposed and VirtualXposed · android-hacker/VirtualXposed Wiki

How does VirtualXposed work · android-hacker/VirtualXposed Wiki

不需要 Root，也能用上强大的 Xposed 框架：VirtualXposed - 少数派

Xposed框架概况 - Xposed框架中文站

Xposed框架 - 维基百科，自由的百科全书

Xposed框架中文站 - 超多Xposed框架模块介绍与下载

【Android】Xposed 框架解析 - 简书

IXposedHookLoadPackage | Xposed Framework API

Pixel 5 Root, 安装Xposed框架, 解锁5G教程_android_Shadestart-开源项目管理 (csdn.net)

Zygisk: What is it? How to Download and Use it?

使用 GravityBox 自定义您的 Android 界面以及更多功能 | 安卓帮助 (androidayuda.com)

什么是GravityBox，Android 上最好的Xposed 模块？ 安卓帮助 (androidayuda.com)

重力工具箱(GravityBox)如何使用手机软件软件教程_脚本之家 (jb51.net)

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-14 20:09:48