wx朋友圈Hook(一)

一、定位到关键代码

第一次尝试

首先想到使用adb shell dumpsys activity top代码

在这里插入图片描述

获取朋友圈界面的Activity,com.tencent.mm/.plugin.sns.ui.SnsUploadUI,直接反编译微信得到源码

wx朋友圈Hook(一)_第1张图片

第二次尝试

然后发现代码实在太多,很难浏览,然后想到DDMS的轨迹追踪功能,我们录取一个发表朋友圈的轨迹,查找OnClick方法,果然找到一个OnMenuItemClick

wx朋友圈Hook(一)_第2张图片

直接搜索这个方法

wx朋友圈Hook(一)_第3张图片
无奈代码还是太多,感觉很难继续分析下去

第三次尝试

这里考虑到使用DDMS的Dump View Hierarchy for UlAutomator功能,首先微信进入发送朋友圈的界面,然后dump

wx朋友圈Hook(一)_第4张图片

最后找到“测试测试”对应的id,然后通过搜索findViewById,得到了关键的代码

wx朋友圈Hook(一)_第5张图片

分析znn的调用情况

wx朋友圈Hook(一)_第6张图片

没有发现函数的调用,但是发现了一个赋值,那就搜索一下this.desc

wx朋友圈Hook(一)_第7张图片

果然找到一个赋值,但是当我们开始分析zno的a方法时,发现他只是一个接口

wx朋友圈Hook(一)_第8张图片

既然如此,那就只能考虑搜索zno类的赋值了,全局搜索一下,查看每一个赋值操作

wx朋友圈Hook(一)_第9张图片

终于找到关键的类QA

QA这里先对传入的参数进行了判断,然后返回对应的类实例

wx朋友圈Hook(一)_第10张图片

this.ziU=0时:

wx朋友圈Hook(一)_第11张图片

this.ziU=14时:

wx朋友圈Hook(一)_第12张图片

这里应该已经可以猜测这个参数和朋友圈发送的方式有关系了,继续分析ziU的值

wx朋友圈Hook(一)_第13张图片

使用frida脚本打印一下各种情况的this.ziU参数

import frida
import sys
jscode ='''
Java.perform(function(){
    var SnsUploadUI = Java.use('com.tencent.mm.plugin.sns.ui.SnsUploadUI');
    var ao = SnsUploadUI.ao.overload("android.os.Bundle");//重载
    ao.implementation = function(bundle)
    {
    var ret = ao.call(this, bundle);//调用方法获取返回值
    send("sns type = " + this.ziU.value);//打印ziU的值
    return ret;
    }
}
);
'''
def message(message,data):
    if message["type"] == 'send':
        print("[*] {0}".format(message["payload"]))
    else:
        print(message)

process = frida.get_remote_device().attach("com.tencent.mm")
script = process.create_script(jscode)
script.on("message",message)
script.load()
sys.stdin.read()

最后总结如下:

9:纯文本动态
,0:纯图片、图片+文字动态
,14:纯视频、视频+文字动态

由于微信不支持视频加图片,所以没有进行这个测试

你可能感兴趣的:(android,java)