微信Xposed案例实战

一、Xposed环境配置和简单的demo

一、新建项目

二、配置相关文件

a.配置activity_main.xml,这个只需要添加一个测试用的按钮即可

在这里插入图片描述

b.配置MainActivity.java,同样只需要实现一个按钮事件即可

在这里插入图片描述
重点来了:

c.添加api-82.jar和api-82-sources.jar在libs目录下

如图:
在这里插入图片描述

这两个jar包,在https://bintray.com/rovo89/de.robv.android.xposed/api下载
在这里插入图片描述

d.配置build.gradle

在dependencies{}里面添加如下内容
在这里插入图片描述
第一行原本为implementation,必须将其改为compileOnly,原因是compileOnly命令只在编译时期打包进入,原因是Xposed里已有该jar包内容,再次打包进去会冲突。
后面两个compileOnly是为了成功导入和编译jar包
e.创建xposed的插件
建立HookMan.java调用IXposedHookLoadPackage接口
在这里插入图片描述

这些都比较简单,就是一个java反射,找到Hook类,然后通过调用Xposed的相关api,如findAndHookMethod()方法实现Hook,将需要弹出的内容写在afterHookMethod
beforeHookedMethod方法,是在我们toastMessage运行前会调用,afterHookedMethod方法,在我们方法运行后调用。

f.编写插件入口配置文件Xposed_init

在project目录下的main目录里面添加一个asserts,再在其目录下添加一个xposed_init
首先创建asserts(注意,这个不是一个简单的文件,而是一个Android Folder):

然后建立一个txt文件

将HookMain完整包名填写到文件中

g.剩下的就是安装程序重启程序了(Xposed模块的安装成功需要重启手机)

二、Xposed框架实现给微信添加menu

1.获取当前界面的类

打开微信到该页面

adb shell 
su
dumpsys activity | grep mResumedActivity

得到结果:

mResumedActivity: ActivityRecord{
   10752e3c u0 com.tencent.mm/.ui.LauncherUI t429}

(1)Android Device Monitor 首先查看下微信的布局,可以很明显的看到这个搜索和这个加好都是在同一个布局里面,那么我们点击加号,然后用ddms来录制轨迹
在这里插入图片描述

录制完成后得到:
在这里插入图片描述
然后我们显然要搜索onClick方法,得到它的调用在这里
在这里插入图片描述

然后慢慢寻找到该方法
在这里插入图片描述

接下来就是hook该方法了
(1)建立HookMain.java

package com.example.wechatmenu;

import android.content.Context;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

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 HookMain implements IXposedHookLoadPackage {
   

    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
   
        String hookClass = "com.tencent.mm.ui.LauncherUI";//显示要hook的类名
        String hookMethodName = "onCreateOptionsMenu";//显示要hook的方法
        //TODO findAndHookMethod方法的参数(要Hook的包名+类名,Classload,要hook的方法名,hook方法的参数,XC_MethodHook匿名类)
        XposedHelpers.findAndHookMethod(hookClass, lpparam.classLoader, hookMethodName, Menu.class, new XC_MethodHook () {
   
            @Override
            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
   
                super.beforeHookedMethod(param);
                final Context applicationContext=null;
                //将hook到的微信里面的Menu参数传给一个新构造的menu对象
                Menu menu = (Menu) param.args[0];
               //获得context以便能够调用Toast方法
                applicationContext=AndroidAppHelper.currentApplication().getApplicationContext(); //使用menu类的add方法添加按钮
                menu.add(0
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值