Xposed模块的编写

编写Xposed模块

1,在AXML文件里添加以下代码:

<!--        添加标识-->
        <meta-data
            android:name="xposedmodule"
            android:value="true" />
<!--        载入Hook模块后显示的信息-->
        <meta-data
            android:name="xposeddescription"
            android:value="Xposed Proxy For Hook" />
<!--        规定jar包的版本信息-->
        <meta-data
            android:name="xposedminversion"
            android:value="54" />

在这里插入图片描述
2,在bulid文件下添加

集成XposedBridgeAPI-89.jar

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

3,在assets目录下,创建xposed_init 文件
在这里插入图片描述

内容是:Xposed的入口类的完整类名
在这里插入图片描述
固定写法:

public class  packageHook implements IXposedHookLoadPackage {
    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {

    }
}

练习


打印装载的apk程序包名

public class  packageHook implements IXposedHookLoadPackage {
    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
        // 打印装载的apk程序包名
        XposedBridge.log("Launch app: " + loadPackageParam.packageName);
        XposedBridge.log("Hook已经成功了");
    }
}

修改函数返回值:
project:CheckSN

Hook模块:

public class CheckSNHook implements IXposedHookLoadPackage {


    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {

        XposedBridge.log(lpparam.packageName+":");

        XposedHelpers.findAndHookMethod(
                "com.example.checksn.MainActivity",//被Hook函数的:包名+类名
                lpparam.classLoader,//classLoader固定
                "checkSN",//要hook的方法名
                  //方法参数 没有就不填
                String.class,//被Hook函数的第一个参数
                String.class,//被Hook函数的第二个参数
                new XC_MethodHook() {

                    //Hook之前,方法执行前执行
                    @Override
                    protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                        super.beforeHookedMethod(param);

                        StackTraceElement[] element=new Throwable("wodelog").getStackTrace();
                        for(int i=0;i<element.length;i++){
                            String s1= (String) param.args[0];
                            String s2= (String) param.args[1];

                            XposedBridge.log("账号:"+s1);
                            XposedBridge.log("注册码:"+s2);
                            XposedBridge.log("查看堆栈:"+element[i].toString());
                        }
                    }
                    //Hook之后,方法执行后执行,改方法的返回值一定要在方法执行完毕后更改
                    @Override
                    protected void afterHookedMethod(MethodHookParam param) throws Throwable {


                        //获取方法返回结果
                        param.getResult();
                        //设置方法返回结果
                        param.setResult(true);

                      super.afterHookedMethod(param);
                    }
                }
        );

    }

}


2024/4/7

坑: app 的 build.gradle 不要引入source,只引入api即可,否则不报错,但是永远找不到IXposedHookLoadPackage

dependencies {
	......
    //以下一句引用
    compileOnly 'de.robv.android.xposed:api:82'
}

坑:jcenter已经过期不提供服务了,一些网上的文档较旧了,改为在setting,gradle中添加

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
		//以下一句引用
        maven { url  "https://api.xposed.info/"}
    }
}

坑:插件写的有问题,一定要先卸载删除插件,然后重新修改后安装,然后exposed中打开模块并重启手机,;在这里卡了很久,就是因为有时候没这么做,导致一直不成功

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
很抱歉,我无法提供编写针对特定需求的完整代码。但是,我可以给你一个思路和示例代码来实现在Xposed框架中模拟鼠标点击的功能。 首先,你需要创建一个Xposed模块项目,并确保你已经设置好了Xposed开发环境。然后,按照以下步骤进行操作: 1. 在你的模块类中,重写`handleLoadPackage`方法以拦截目标应用程序的包名。 ```java @Override public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { if (lpparam.packageName.equals("目标应用程序的包名")) { // 在这里进行模拟鼠标点击的操作 } } ``` 2. 在`handleLoadPackage`方法中,使用`XposedHelpers.findAndHookMethod`方法来hook目标应用程序的相关方法。 ```java XposedHelpers.findAndHookMethod("目标类的完整路径", lpparam.classLoader, "目标方法名", 参数类型, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { // 在这里进行模拟鼠标点击的操作 } }); ``` 3. 在hook到目标方法之后,在`beforeHookedMethod`方法中执行模拟鼠标点击的操作。 ```java InputManager inputManager = (InputManager) context.getSystemService(Context.INPUT_SERVICE); long downTime = SystemClock.uptimeMillis(); long eventTime = SystemClock.uptimeMillis(); float x = 100; // 点击位置的X坐标 float y = 100; // 点击位置的Y坐标 int action = MotionEvent.ACTION_DOWN; // 点击动作类型 int source = InputDevice.SOURCE_TOUCHSCREEN; MotionEvent motionEvent = MotionEvent.obtain( downTime, eventTime, action, x, y, 0 ); motionEvent.setSource(source); inputManager.injectInputEvent(motionEvent, InputManager.INJECT_INPUT_EVENT_MODE_WAIT_FOR_FINISH); ``` 上述代码中的参数可以根据你的实际需求进行调整,例如点击位置的坐标、点击动作类型等。 请注意,以上代码仅为示例,具体实现还需要根据你的目标应用程序和需求进行调整。同时,在使用Xposed框架进行系统定制时,请务必小心谨慎,确保你了解相关风险并备份重要数据。 希望这些示例代码能对你有所帮助!如果有其他问题,请继续提问。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值