huolong blog

Xposed模块入门

编辑Mainfest文件

在AndroidMainfest文件中Application项中加入以下数据

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

<meta-data
android:name="xposeddescription"
android:value="xposed模块描述" />

<meta-data
android:name="xposedminversion"
android:value="82" />

插入以上数据的目的是使得Xposed框架能够知道这个apk是一个模块文件

加载jar包

1.手动添加:将jar下载到本地后自行添加。手动下载XposedBridgeApi-82.jar文件,拖放到“项目名称/app/libs/”,然后右键“Add As Library” 自行添加这个jar包。之后在build.gradle的dependencies目录下添加命令 compileOnly files('libs\\api-82.jar')

2.自动同步:如果网络情况允许的话,可以直接在gradle文件下的dependencies下添加:compileOnly 'de.robv.android.xposed:api:82',这样可以免去事先下载jar包的步骤,需要注意的是随着jcenter仓库关闭,目前直接使用该配置gradle会报错,所以需要在settings.gradle配置文件中做如下配置:

添加入口点

没有添加入口点的xposed模块可以被xposed管理器识别,但是不可以启用,必须指明入口点,启用的方法也很简单:

在\src\main目录下创建assets文件夹,在该文件夹下创建入口点文件xposed_init,内容为编写的Hook类类名。

编写主要类文件

这是hook类代码的一个实例:

package com.huol.sswcrack;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;

public class Crack implements IXposedHookLoadPackage {
    public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
        if (lpparam.packageName.equals("com.qq.ssw1")) {
            ClassLoader classLoader = lpparam.classLoader;
            XposedBridge.log("Loaded app: " + lpparam.packageName);
            Class clazz = XposedHelpers.findClass("com.qq.ssw.v2.splash.SplashActivityV2", lpparam.classLoader);
            XposedHelpers.findAndHookMethod(clazz, "onCreate", Bundle.class, new XC_MethodHook() {
                @Override
                protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                    super.beforeHookedMethod(param);
                    Class mainActivity = XposedHelpers.findClass("com.qq.ssw.v2.main.MainActivityV2", lpparam.classLoader);
                    Activity activity = (Activity) param.thisObject;
                    Intent mIntent = new Intent(activity, mainActivity);
                    activity.startActivity(mIntent);
                }
            }); // 去开屏广告和不必要权限要求
            XposedHelpers.findAndHookMethod("tencent.io.b", classLoader, "i", new XC_MethodHook() {
                @Override
                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                    super.afterHookedMethod(param);
                    param.setResult(true);
                }
            }); //破解会员
        }
    }
}