逆向 qq 消息撤回

开发工具

工具名称工具类型说明
AndroidStuduo编辑工具开发工具
jadxjava工具将apk解成java项目
xposed插件工具插件
qq版本8.8.80

开始

先通过jadx把apk反编译出来源码,通过build出来,在android studio打开,方便分析。

  • 要撤回自己的消息,肯定需要监听消息发送。

消息操作的函数基本都在这里ChatActivityFacade,可以通过 hook 此类的全部的函数,再通过手机发送一条消息,看会调用哪些函数。

最后确定,自己的发送消息都会调用到这个函数:

在这里插入图片描述

那我们只要hook住这里,拿到撤回消息需要的数据就行 message消息体。

//监听消息 = 自己
public void messageMonitoring() throws Exception {
    Class<?> ChatActivityFacade = mHookClassLoader.loadClass("com.tencent.mobileqq.activity.ChatActivityFacade");
    Class<?> QQAppInterface = mHookClassLoader.loadClass("com.tencent.mobileqq.app.QQAppInterface");
    Class<?> MessageRecord = mHookClassLoader.loadClass("com.tencent.mobileqq.data.MessageRecord");
    Class<?> ChatActivityFacade$SendMsgParams = mHookClassLoader.loadClass("com.tencent.mobileqq.activity.ChatActivityFacade$SendMsgParams");
    XposedHelpers.findAndHookMethod(ChatActivityFacade, "a",
            QQAppInterface, boolean.class, MessageRecord, ChatActivityFacade$SendMsgParams,
            new XC_MethodHook() {
                @Override
                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                    super.afterHookedMethod(param);
                    XLog.d("监听消息 = 自己");
                    
                    //延迟4秒撤回
                    new Handler().postDelayed(()-> messageRetraction(param.args[2]), 4_000);
                }
            });
}
  • 撤回消息

在QQMessageFacade这个类里面

在这里插入图片描述

我们只要伪造这个 f 方法即可

当然不可能事事如意,刚开始试的时候不行,再往后面跟踪

在这里插入图片描述

发现需要把dialog设置为true才能成功。

需要添加这个:ReflectionUtil.invokeMethod(MessageCache, “b”, boolean.class, true);

//消息撤回 = 事件
public void messageRetraction(Object ChatMessage) {
    XLog.d("消息撤回 执行");
    try {
        Class<?> MessageRecordClazz = mHookClassLoader.loadClass("com.tencent.mobileqq.data.MessageRecord");
        String selfuin = ReflectionUtil.getFieldValue(ChatMessage, "selfuin");
        Object sApplication = ReflectionUtil.invokeStaticMethod(mHookClassLoader.loadClass("com.tencent.common.app.BaseApplicationImpl"),
                "getApplication");
        Object qqAppInterface = ReflectionUtil.invokeMethod(sApplication, "getAppRuntime", String.class, selfuin);
        Object MessageCache = ReflectionUtil.invokeMethod(qqAppInterface, "getMsgCache");
        ReflectionUtil.invokeMethod(MessageCache, "b", boolean.class, true);
        Object QQMessageFacade = ReflectionUtil.invokeMethod(qqAppInterface, "getMessageFacade");
        ReflectionUtil.invokeMethod(QQMessageFacade, "f", MessageRecordClazz, ChatMessage);
        XLog.d("消息撤回 执行 完毕");
    } catch (Exception e) {
        XLog.d(e);
    }
}

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值