(好像现在它的同行面具(Magisk)更火。)
一个很牛逼的框架,可以在不修改APK的情况下影响程序的运行,突破官方软件的限制,简单说就是基于官方软件的二次开发,实现定制化功能,比如:
直接把APP的界面改成自己想要的样
去掉界面里不喜欢的东西,
自动抢红包
消息防撤回
步数修改等等
Xposed的安装
打开逍遥模拟器,我的是安卓7.1 64位系统。
将Xposed Installer.apk拖入模拟器内安装,安装好后打开:
![]()
我们打开逍遥多开器的文件所在位置
D:\Program Files\Microvirt\MEmu,将 逍遥安卓7.1-64-框架包/下的两个文件/夹 复制到D:\Program Files\Microvirt\MEmu下
双击
install.bat运行脚本,理论上来说不一会儿我们就能看到xposed框架安装并显示版本信息version 89:
但是我这儿报错了啊,差不多原因是说没找到memu-script.sh:
其实
install.bat就是依次执行如下命令的脚本:
adb rootadb remountadb push ./xposed /systemadb shell su -c "cd /system/;sh memu-script.sh"pause现在脚本在执行倒数第二步时报错了,那我们就手动执行命令,还原事故发生现场!
在Windows CMD命令行模式下依次输入以下命令
adb connect 127.0.0.1:21523# 注意,只开一个模拟器,然后用adb devices查看你正在用的模拟器的端口,我的是127.0.0.1:21523adb rootadb remountadb push ./xposed /systemadb shellcd /system/xposedsh memu-script.sh细心点同学会发现我是基于脚本的命令修改了
cd /system/为cd /system/xposed,因为"cd /system/;sh memu-script.sh"会报错sh:memu-script.sh : No such file or directory。使用find / -name memu-script.sh发现这个脚本文件在/system/xposed/下,所以我才这样修改命令的。安装xposed框架成功!
然后重启模拟器再打开Xposed Installer app:
Xposed的工作原理
在开始修改之前,你应该大致了解Xposed如何工作(如果你觉得太无聊,你可以跳过这一部分)。方法如下:
有一个叫做“Zygote”的过程。从它的名字(中文含义——受精卵)这是Android运行时的核心。每个应用程序都作为它的副本(“fork”)启动。
/init.rc手机启动时,脚本会启动此过程。进程开始完成/system/bin/app_process,加载所需的类并调用初始化方法。这就是Xposed发挥作用的地方。安装框架时,会将扩展的app_process可执行文件复制到
/system/bin。这个扩展的app_process就会把XposedBridge.jar加载到运行时环境,这样我们就可以在虚拟机启动之前,甚至是在Zygote的main方法被执行之前做一些爱做的事(捂脸,其实就是加载插件)。此时我们的插件被执行,就是Zygote进程的一部分,所以可以直接获取到应用的上下文Context,然后做很多超出想象的事情——对于任何一个app ,我们都可以hook或者替换掉其中的类或方法或对象。再加上已经root。我们可以为所欲为了。这个jar位于
/data/data/de.robv.android.xposed.installer/bin/XposedBridge.jar,其源代码可在找到。查看类,您可以看到该main方法。这就是我上面写的内容,这个过程在一开始就被调用了。在那里进行了一些初始化,并且还加载了模块(稍后我将回到模块加载)。方法挂钩/更换
真正创造Xposed力量的是“钩”方法调用的可能性。通过反编译APK进行修改时,可以直接在任意位置插入/更改命令。但是,您需要在之后重新编译/签署APK,并且您只能分发整个包。使用可以放置Xposed的钩子,你不能修改方法内的代码(不可能清楚地定义你想在哪个地方做什么样的改变)。相反,您可以在方法之前和之后注入自己的代码,这是Java中可以清楚解决的最小单元。
XposedBridge有一个私有的本机方法
hookMethodNative。此方法也在扩展中实现app_process。它会将方法类型更改为“native”,并将方法实现链接到其自己的本机通用方法。这意味着每次调用hooked方法时,都会调用泛型方法,而不会让调用者知道它。在此方法中,handleHookedMethod调用XposedBridge中的方法,将参数传递给方法调用,this引用等。然后,此方法负责调用已为此方法调用注册的回调。这些可以更改调用的参数,更改实例/静态变量,调用其他方法,对结果执行某些操作...或者跳过任何内容。它非常灵活。
Xposed的使用
精力有限,使用xposed完成一些邪恶的事,需要写java代码(编写HookModule),不然消息防撤回,这个防撤回功能怎么实现呢?逼事还挺多的,创建Xposed模块、添加依赖、创建xposed_init、修改MainActivity.java、编写HookModule。我就不深入研究了
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://www.ink0.cn/index.php/2023/11/21/app%e9%ad%94%e6%94%b9%e7%a5%9e%e5%99%a8-xposed-md/










共有 0 条评论