吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1027|回复: 43
上一主题 下一主题
收起左侧

[Android 原创] 某绿色聊天软件添加长按菜单

  [复制链接]
跳转到指定楼层
楼主
paditianxiu 发表于 2025-3-15 01:53 回帖奖励
本帖最后由 paditianxiu 于 2025-3-15 11:54 编辑

效果图

准备工具

  • 算法助手Pro
  • NP管理器

    分析软件

    打开算法助手附加绿色软件进程,开启onClick监听功能

    启动微信触发一下长按菜单的点击事件,然后我们回到算法助手看日志,通过控件标题来判断是哪个

    我们复制类名ot4.k打开NP管理器,搜索类名,只有一个结果点进去,点击导航按钮长按<init>这个方法名点击查看调用处

    一样只能找到一个结果,我们点进去,点导航,长按p方法单独转成Java这样不会有其它代码干扰

    我们往下滑看到这里2131320032这个ID就是菜单文字的ID,可以通过AutoJs等软件查看到,this.z.d的类型是ArrayList,最后还转成MenuItem不然看出这应该是菜单的集合,类型为MenuItem

    编写我们的Hook代码先获取ArrayList类型的this.z.d

    下面他会判断是不是instanceofx3,我们找一下这个类名跳转进去,应该可以找到我们想要的结果了

    我们退出Java反编译页面,搜索x3我们长按跳转过去,转成Java看看

    我们可以看到setIconsetIcon方法

    那我们要先Hook的话要拿到他的构造方法,和类名一样的方法名就是构造方法了,我们搜索x3,他有三个参数,Context context int i int i2

    第一个context肯定是上下文,我们HookActivity就能获取到,不用管,后面两个不知道,我们尝试Hook一下这个方法,打印参数看看结果是什么

    XposedBridge.hookAllConstructors("cm4.x3".findClass(application.classLoader), object : XC_MethodHook() {
    override fun beforeHookedMethod(param: MethodHookParam) {
        val context = param.args[0] as Context
        val i = param.args[1] as Int
        val i2 = param.args[2] as Int
        ("x3 constructor called with parameters:").d()
        ("Context: $context").d()
        ("i: $i").d()
        ("i2: $i2").d()
    }
    })

    我们重新打开微信,触发一下长按消息事件,可以看到12很多,x2应该是GroupID最后这个11是我Hook上的,i应该是一个ID,你们可以测试一下,应该这两个参数随便写都行

    我们来实现最后的Hook代码,倒数第二行dObject.removeAt(8)是删除ArrayList第9个元素的意思,因为他的添加按钮代码有判断,一行超过6个就不能添加了,所以我们为了适配所有消息,删除没用的搜一搜按钮,最后效果就出来了

    接下来我们添加点击事件,我们一开始onClick监听的类名ot4.k就是点击事件了,我们通过TextView也就是菜单名称来判断是点了哪个菜单,并弹出Tosat,来看看效果吧

    全部代码

    // 定义一个可空的 Activity 变量,用于存储 LauncherUI 实例
    var launcherUiActivity: Activity? = null
    // 对 com.tencent.mm.ui.LauncherUI 类的 onCreate 方法进行 Hook
    "com.tencent.mm.ui.LauncherUI".hook(application.classLoader, "onCreate", Bundle::class.java) {
    launcherUiActivity = it.thisObject as Activity?
    }
    // 对 ot4.r 类的 p 方法进行 Hook
    "ot4.r".hook(application.classLoader, "p", Int::class.java, Int::class.java) { param ->
    // 获取当前对象
    val thisObject = param.thisObject
    // 获取 thisObject 对象中的 z 字段
    val zObject = XposedHelpers.getObjectField(thisObject, "z")
    // 获取 zObject 对象中的 d 字段,并转换为 MutableList<Any> 类型
    val dObject = XposedHelpers.getObjectField(zObject, "d") as MutableList<Any>
    // 查找 cm4.x3 类
    val x3Class = "cm4.x3".findClass(application.classLoader)
    // 获取 cm4.x3 类的构造函数
    val x3Constructor = x3Class.getConstructor(Context::class.java, Int::class.javaPrimitiveType, Int::class.javaPrimitiveType)
    // 获取 cm4.x3 类的 setTitle 方法
    val setTitleMethod = x3Class.getMethod("setTitle", CharSequence::class.java)
    // 获取 cm4.x3 类的 setIcon 方法
    val setIconMethod = x3Class.getMethod("setIcon", Int::class.javaPrimitiveType)
    // 创建 cm4.x3 类的实例
    val menu = x3Constructor.newInstance(launcherUiActivity, 114, 11)
    // 调用 setTitle 方法设置标题
    setTitleMethod.invoke(menu, "吾爱破解")
    // 调用 setIcon 方法设置图标
    setIconMethod.invoke(menu, R.drawable.cow)
    // 移除 dObject 列表中索引为 8 的元素
    dObject.removeAt(8)
    // 将新创建的 menu 对象添加到 dObject 列表中
    dObject.add(menu)
    }
    // 对 ot4.k 类的 onClick 方法进行 Hook
    "ot4.k".hook(application.classLoader, "onClick", View::class.java) { param ->
    // 将参数中的第一个元素转换为 LinearLayout 类型
    val linearLayout = param.args[0] as LinearLayout
    // 获取 LinearLayout 中的 TextView
    val textview = (linearLayout.getChildAt(0) as LinearLayout).getChildAt(1) as TextView
    // 判断 TextView 的文本是否为 "吾爱破解"
    if (textview.text == "吾爱破解") {
        // 显示 Toast 消息
        Toast.makeText(textview.context, "吾爱破解帕帝天秀", Toast.LENGTH_SHORT).show()
    }
    }

    这个hook方法是扩展的函数,有需要的回复一下我发评论区

免费评分

参与人数 8吾爱币 +14 热心值 +8 收起 理由
SherlockProel + 1 + 1 我很赞同!
brucemino + 1 + 1 很受用的教程,谢谢贴主分享
zhaojia744 + 1 + 1 用心讨论,共获提升!
a211500 + 1 + 1 谢谢@Thanks!
Issacclark1 + 1 谢谢@Thanks!
芽衣 + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
longi + 1 + 1 用心讨论,共获提升!
正己 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
LoughTay 发表于 2025-3-16 11:09
实用!lz厉害,支持你&#128077;&#128077;&#128077;&#128077;&#128077;
沙发
正己 发表于 2025-3-15 11:45
3#
 楼主| paditianxiu 发表于 2025-3-15 11:56 |楼主
4#
JackChen1688 发表于 2025-3-15 12:54
有点看天书的感觉
5#
 楼主| paditianxiu 发表于 2025-3-15 12:58 |楼主

这个是基础
6#
 楼主| paditianxiu 发表于 2025-3-15 13:06 |楼主
微信是8.0.56版本的忘记说了
7#
slaymoon 发表于 2025-3-15 13:42
感谢分享,学习了
8#
youfeng0909 发表于 2025-3-15 13:56
厉害厉害,这算法助手是真牛
9#
镜花水月-陌上桑 发表于 2025-3-15 14:28
感谢分享,学习了
10#
wpx977 发表于 2025-3-15 14:29
牛b,虽然看不懂
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-3-17 10:07

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表