app魔改神器 – xposed.md

AffettoIris 2023-11-21 3,228 11/21

 

Xposed是什么?

(好像现在它的同行面具(Magisk)更火。)

一个很牛逼的框架,可以在不修改APK的情况下影响程序的运行,突破官方软件的限制,简单说就是基于官方软件的二次开发,实现定制化功能,比如:

  • 直接把APP的界面改成自己想要的样

  • 去掉界面里不喜欢的东西,

  • 自动抢红包

  • 消息防撤回

  • 步数修改等等

Xposed的安装

app魔改神器 - xposed.md

打开逍遥模拟器,我的是安卓7.1 64位系统。

app魔改神器 - xposed.md

将Xposed Installer.apk拖入模拟器内安装,安装好后打开:

app魔改神器 - xposed.md app魔改神器 - xposed.md

我们打开逍遥多开器的文件所在位置D:\Program Files\Microvirt\MEmu,将 逍遥安卓7.1-64-框架包/下的两个文件/夹 复制到D:\Program Files\Microvirt\MEmu

app魔改神器 - xposed.md

双击install.bat运行脚本,理论上来说不一会儿我们就能看到xposed框架安装并显示版本信息version 89:

app魔改神器 - xposed.md

但是我这儿报错了啊,差不多原因是说没找到memu-script.sh:

app魔改神器 - xposed.md

其实install.bat就是依次执行如下命令的脚本:

adb root adb remount adb push ./xposed /system adb 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:21523 adb root adb remount adb push ./xposed /system adb shell cd /system/xposed sh 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框架成功!

app魔改神器 - xposed.md

然后重启模拟器再打开Xposed Installer app:

app魔改神器 - xposed.md

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,其源代码可在此处找到。查看类XposedBridge,您可以看到该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。我就不深入研究了

app魔改神器 - xposed.md

- THE END -

AffettoIris

11月21日12:42

最后修改:2023年11月21日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论