aosp-安装Xposed框架及简单使用

5,739 阅读4分钟

一、简介

前面我们已经刷入了Magisk面具去获取Root权限,这次我们要刷入Xposed框架

简单介绍下Xposed框架

Xposed 是国外大牛开发的一个工具,Xposed通过拦截安卓程序运行过程来达到修改程序行为的目的。

不需要修改安卓源文件,而是通过分析程序运行来拦截并影响运行情况。

注意:

第一次刷入LSPosed框架,建议大家删除面具里已经刷好的全部模块,特别是XP框架或者太极模块,多个模块一起运行,很可能直接翻车无限重启。

二、步骤

2.1 下载

Xposed框架现在由国内开发者开发了,名字是LSPosed,地址Releases · LSPosed/LSPosed (github.com)

Snipaste_2023-08-15_21-03-32.png 点击该地址,我们可以看到有两个压缩包

官方提供了2个运行环境供我们选择,分别为riru版本和zygisk版本。

两者环境的LSPosed使用起来没什么区别,只有是对运行环境存在要求。

我们推荐大家使用zygisk版本的LSPosed框架,兼容和日用更广泛。

这里我们选择下载zygisk版本的zip

下载完后,将zip包放入到设备的Download目录

2.2 打开zygisk

Snipaste_2023-08-15_21-01-03.png

当我们打开Magisk可以看到,Zygisk显示的是"否",想要安装zygisk版本的Xposed,就需要我们把这个打开

点击右上角设置——>Zygisk选项打开——>重启

Snipaste_2023-08-15_21-02-34.png
Snipaste_2023-08-15_21-04-01.png

2.3 安装Xposed

  1. 打开Magisk面具
  2. 点击底部栏的模块
  3. 点击从本地安装
  4. 选择zygisk版本的Xposed压缩包
  5. 安装完成后点击重启
Snipaste_2023-08-15_21-07-28.png

重启之后,如果在下拉状态栏有如下通知则表明安装成功了

Snipaste_2023-08-15_21-11-01.png
Snipaste_2023-08-15_21-12-07.png

三、简单使用教程

有了LSP,就可以对任意应用包括系统进行hook了,我们写一个LSP模块,劫持Activity启动逻辑,打印个日志。

我们了解下LSP模块的概念:

LSP模块是一个APK,就和我们平时开发的APK一样,区别是相对普通APK,它可以让LSP加载到指定的进程中,并对该进程的Java进行Hook。

相对普通APK开发,我们额外要做的两件事:

  1. 定义要入侵的进程,LSP官方叫做Scope,一个scope其实就是指定一个包名,例如此处我们要hook android系统,那么包名就是android。
  2. 指定如何Hook,就是要写hook的代码了,通过代码hook java method,将其替换成我们自己的逻辑。

3.1 新建工程(被Hook)

代码很简单

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView textView = findViewById(R.id.textview);

        Button button = findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                textView.setText(TextClazz.getText());
            }
        });
    }
}
public class TextClazz {
    public static String getText(){
        return "未被劫持";
    }
}
Snipaste_2023-08-16_00-50-11.png

3.2 新建工程(Hook)

打开AndroidStudio新建个项目,名字随便起

3.3 添加Scope定义

在AndroidManifest.xml里,定义以下meta data,主要是告知LSP我们是一个模块,以及我们的scope在哪个xml里,让它去解析

```
<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:supportsRtl="true"
    android:theme="@style/Theme.XposedTest"
    tools:targetApi="31">

    <meta-data
        android:name="xposedmodule"
        android:value="true"/>

    <meta-data
        android:name="xposeddescription"
        android:value="This is a demo for Xposed" />

    <meta-data
        android:name="xposedminversion"
        android:value="54" />
        
        ........
        
</application>
```

3.4 前期准备

LSP加载我们的Hook逻辑时,要知道我们的Hook代码入口,因此,我们需要创建一个xposed_init文件,放在app/main/src/assets目录下,供LSP解析。

文件内容如下:

com.example.xposedtest.HookEntry

其中,com.example.xposedtest是我应用的包名,每个人根据自己的包名填写

下面就要开始实现HookEntry这个类了,到此我们需要引用一个lib依赖,这个依赖提供了Hook相关的一些工具以及接口,我们要实现接口,利用工具去修改method。

在app依赖中添加,注意是compileOnly的,因为在安装LSP时,这个lib已经集成到系统运行时了:

compileOnly("de.robv.android.xposed:api:82")

由于这个库出来很久了,所以要在根目录settings.gradle,加上jcenter仓库,否则拉不下来。

Snipaste_2023-08-15_22-19-43.png

3.5 指定Hook逻辑

public class HookEntry implements IXposedHookLoadPackage {
    //加载一个应用的进程的时候,会调用这个方法
    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
        hookWheel(lpparam);
    }

    private void hookWheel(XC_LoadPackage.LoadPackageParam lpparam) {
        Class c = XposedHelpers.findClass("com.example.needbyhook.TextClazz", lpparam.classLoader);
        if (c != null) {
            XposedHelpers.findAndHookMethod(c, "getText", new XC_MethodHook() {
                @Override
                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                    super.afterHookedMethod(param);
                    param.setResult("你被劫持啦哈哈哈哈!");
                }
            });
        }
    }
}

3.6 Xposed开启这个插件

运行项目,并在Xposed中开启

Snipaste_2023-08-16_00-52-39.png

重启即可,现在再点击按钮,文字就被劫持了

Snipaste_2023-08-16_00-54-12.png

感谢

在Android模拟器上玩转Xposed - 掘金 (juejin.cn)

LSPosed框架1.8.6 zygisk+riu下载刷入激活使用图文教程-ROM乐园官网 (romleyuan.com)

Xposed系列-修改文本数据 (sunofbeach.net)