V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

每个人的时间,资源是有限的,有的时候你或许能够想到很多 idea,但是由于现实的限制,却并不是所有的 idea 都能够成为现实。

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
dphdjy
V2EX  ›  奇思妙想

[填坑]xposed 注入 QQ 暴露 API

  •  
  •   dphdjy · 2016-03-03 00:40:57 +08:00 · 7535 次点击
    这是一个创建于 3188 天前的主题,其中的信息可能已经有所发展或是发生改变。
    原贴: /t/251256

    接受 /发送的实现



    已知问题:
    1. hook 的接受方法触发条件是 session 不是当前 session && 在 chatactivity
    2. 发送方法只支持纯文本 那个 arraylist 暂时不知道干嘛的~

    然后就没有然后了~
    第 1 条附言  ·  2016-03-03 11:06:12 +08:00
    接受的调用栈:
    1. mqq.app.MainService$2.run(MainService.java:290)
    2.com.tencent.mobileqq.msf.sdk.MsfRespHandleUtil.handlePushMsg
    3.mqq.app.MainService$5.onRecvCmdPush(MainService.java:648)
    4.mqq.app.MainService.access$200(MainService.java:60)
    5.mqq.app.MainService.receiveMessageFromMSF(MainService.java:212)
    6.mqq.app.ServletContainer.notifyMSFServlet(ServletContainer.java:156
    7.mqq.app.MSFServlet.onReceive(MSFServlet.java:39)
    8.com.tencent.mobileqq.compatible.TempServlet.onReceive
    9.com.tencent.mobileqq.app.QQAppInterface.a
    10.com.tencent.mobileqq.service.MobileQQService.a
    11.com.tencent.mobileqq.app.MessageHandler.a
    12.com.tencent.mobileqq.app.MessageHandler.f
    13.com.tencent.mobileqq.troop.data.TroopMessageProcessor.a
    14.com.tencent.mobileqq.troop.data.TroopMessageProcessor.a
    15.com.tencent.mobileqq.app.message.QQMessageFacade.a
    16.com.tencent.mobileqq.app.message.QQMessageFacade.notifyObservers
    17.com.tencent.mobileqq.activity.ChatActivity.update
    18.com.tencent.mobileqq.activity.ChatActivity.a

    同名方法均为重载
    当前 hook 在 18 所以只有在 chatactivity 生命周期内才有效

    私以为 hook 最佳应该在 12 ,但是方法太多~暂时没有找到能用的
    _(:з)∠)_ 求 dalao 继续分析~

    发送:
    ChatActivityFacade 有一系列静态方法,暂时只用了纯文本的接口

    不过看情况应该还有更好的 hook 点,不过自己封装数据包好麻烦 _(:з)∠)_

    以及代码适用于 QQ 日本版,其他未测试~
    为何用日本版~因为轻聊版 fc~
    第 2 条附言  ·  2016-03-12 20:33:46 +08:00
    第 3 条附言  ·  2016-03-13 13:21:24 +08:00

    「 phuckQQ 」:MessageHandlerHook

    新的接口

    --Dump ToServiceMsg--
    appId:0
    appSeq:-1
    attributes:{}
    extraData:Bundle[{}]
    serviceCmd:OnlinePush.PbPushGroupMsg
    ssoSeq:-1
    uin:**********
    wupBuffer:[B@31505262
    needResp:true
    sendTimeout:-1
    serviceName:
    timeout:-1
    toVersion:1
    uinType:0
    
    --Dump FromServiceMsg--
    appId:-1
    appSeq:-155686881
    attributes:{__timestamp_net2msf=1457838086197
     _tag_socket=183.60.38.56:8080
     __attribute_tag_sid=Ae3bfvyI4oYwUYncrnPXLlsd
     _tag_LOGSTR=183.60.38.56:8080|-155686881|OnlinePush.PbPushGroupMsg|
     __timestamp_msf2app=1457838086199
     _tag_localsocket=/192.168.1.6:58156|58156
     resp_needBootApp=1
     __timestamp_net2msf_boot=649205
     to_SenderProcessName=com.tencent.qq.kddi}
    extraData:Bundle[{}]
    serviceCmd:OnlinePush.PbPushGroupMsg
    ssoSeq:-155686881
    uin:**********
    wupBuffer:[B@12191ff3
    errorMsg:
    flag:0
    fromVersion:1
    msgCookie:[B@560d4b0
    resultCode:1000
    
    16 条回复    2024-03-20 23:06:32 +08:00
    wbsdty331
        1
    wbsdty331  
       2016-03-03 00:55:27 +08:00
    参考 酷 Q
    dphdjy
        2
    dphdjy  
    OP
       2016-03-03 07:40:52 +08:00 via Android
    @wbsdty331 ta 是直接破解协议,而且闭源。这个是 hook 手 Q 的消息循环拦截转发消息
    oott123
        3
    oott123  
       2016-03-03 08:18:38 +08:00
    session 不是当前 session 是啥意思…
    Coxxs
        4
    Coxxs  
       2016-03-03 09:11:32 +08:00 via Android
    hook 和协议分析各有优点吧..前者模拟更真实,后者效率和自由度会高一些
    silvernoo
        5
    silvernoo  
       2016-03-03 09:39:54 +08:00
    似乎可以做机器人
    dphdjy
        6
    dphdjy  
    OP
       2016-03-03 10:51:21 +08:00 via Android   ❤️ 1
    @oott123 当前每个 chatactivity 初始化会根据 intent 创建一个 sessioninfo 对象 然后我 hook 的这个点是每次聊天上面显示其他人到信的地方,所以对于当前 activity 的全部信息不给予处理
    dphdjy
        7
    dphdjy  
    OP
       2016-03-03 10:52:30 +08:00 via Android
    @Coxxs 如果只是从自由度什么的~我的和他一样啦~毕竟 hook 到协议栈就好了~不过没找到!!大概是动态调用
    oott123
        8
    oott123  
       2016-03-03 13:15:52 +08:00
    @dphdjy 不明觉厉中,为啥要勾那个地方…
    另外协议栈在原生代码里吧。
    dphdjy
        9
    dphdjy  
    OP
       2016-03-03 14:31:33 +08:00 via Android
    @oott123 不知道╮(╯▽╰)╭ 不在就 hook 协议栈和应用层接口不就好了~

    反正随便放钩子~
    dphdjy
        10
    dphdjy  
    OP
       2016-03-03 14:33:35 +08:00 via Android
    @silvernoo 就是为了机器人~做准备的~原来的 web 协议没什么可以玩的了
    xiaoshenke
        11
    xiaoshenke  
       2016-03-04 00:46:45 +08:00 via Android
    马克
    dphdjy
        12
    dphdjy  
    OP
       2016-03-07 19:32:59 +08:00 via Android
    嘛~本来准备开个头~然后有人一起填坑~大概并没有~

    演示



    dphdjy
        13
    dphdjy  
    OP
       2016-03-13 11:43:08 +08:00
    @Coxxs 突然发现是酷 Q 作者啊~
    求出 linux 的 so ~那我就不 hook 了~~
    mignxuan3000
        14
    mignxuan3000  
       2016-10-11 11:28:17 +08:00
    http://gitai.me 挂了 楼主
    GoldenHuaji
        15
    GoldenHuaji  
       2021-02-04 13:09:13 +08:00
    QQ8.5.5 现在可以 Hook com.tencent.mobileqq.app.MessageHandlerUtils 的方法 a(Lcom/tencent/mobileqq/app/QQAppInterface;"com/tencent/mobileqq/data/MessageRecord;Z) ,每次收到消息都会调用,其中,第二个参数 MessageRecord 有很多有用的信息
    eleba
        16
    eleba  
       248 天前
    2024-03-20 更新
    15#的 com.tencent.mobileqq.app.MessageHandlerUtils 最新版本已经被混淆
    只要反编译后查找 Q.msg.MessageHandlerUtils ---------------msgFilter message [before filter] is null !
    关键字然后 hook 之。
    TIM 最新版也是如此

    记录一下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1910 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:37 · PVG 08:37 · LAX 16:37 · JFK 19:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.