实现微信Hook消息接收

微信版本:3.9.12.45

账号:两个微信账号,大号用来发消息,小号用来测试

工具微信CE修改器x64dbg

图片[1]-实现微信Hook消息接收-羚羊公子博客

定位消息地址

选择微信进程!

图片[2]-实现微信Hook消息接收-羚羊公子博客

大号给小号发送消息,扫描类型选择字符串,数值填写消息内容!

图片[3]-实现微信Hook消息接收-羚羊公子博客

重复之上的步骤,不断重复,直到无法定位的时候(我这里有三个),一个个查看浏览器内存区域!

图片[4]-实现微信Hook消息接收-羚羊公子博客

找到带着wxid和xml格式的就是内存地址!

图片[5]-实现微信Hook消息接收-羚羊公子博客
图片[6]-实现微信Hook消息接收-羚羊公子博客

x64dbg断点

记录一下当前的微信地址1B6555E11BD,关闭CE修改器,打开x64dbg,附加微信,按住alt+e选择wechatwin.dll

图片[7]-实现微信Hook消息接收-羚羊公子博客

点进去,再内存窗口搜索刚才记录的地址

图片[8]-实现微信Hook消息接收-羚羊公子博客

设置写入断点!

图片[9]-实现微信Hook消息接收-羚羊公子博客

此时微信大号给小号发送消息,查看堆栈信息

图片[10]-实现微信Hook消息接收-羚羊公子博客

找到有个db的那个(这一步骤是再写入微信数据库之前定位call)

图片[11]-实现微信Hook消息接收-羚羊公子博客

选择,右键“在反汇编中转到指定QWORD”

图片[12]-实现微信Hook消息接收-羚羊公子博客

跳转之后,先取消上一个断点

图片[13]-实现微信Hook消息接收-羚羊公子博客

然后针对跳转的位置,找到上一个call位置,在call处进行断点

图片[14]-实现微信Hook消息接收-羚羊公子博客

发送消息,断点到了,查看RDI

图片[15]-实现微信Hook消息接收-羚羊公子博客
图片[16]-实现微信Hook消息接收-羚羊公子博客

在地址栏的第一个双击一下

图片[17]-实现微信Hook消息接收-羚羊公子博客

这样我们可以得出

0x48 是 微信id

0x88 是 微信消息的内容

计算偏移

找到断点位置,复制文件偏移!

图片[18]-实现微信Hook消息接收-羚羊公子博客

然后打开计算器那个图标,用偏移地址+C00

图片[19]-实现微信Hook消息接收-羚羊公子博客

得出结果250AEA7

验证结果

找到断点位置,复制地址

图片[20]-实现微信Hook消息接收-羚羊公子博客

然后按住ALT+E,找到复制wechatwin.dll的基址

图片[21]-实现微信Hook消息接收-羚羊公子博客

用计算器两者相减得出结果250AEA7

图片[22]-实现微信Hook消息接收-羚羊公子博客

结果是对的,此时编写frida脚本

var wechatWin = Module.findBaseAddress("WeChatWin.dll");
if (!wechatWin) {
    console.error("WeChatWin.dll模块未找到!");
    throw new Error("模块未找到"); 
}
var hookAddress = wechatWin.add(0x250AEA7);
Interceptor.attach(hookAddress, {
    onEnter: function (args) {
        var timestamp = this.context.rdi.add(0x44).readInt();
        var wxid = this.context.rdi.add(0x48).readPointer().readUtf16String();
        var msg  = this.context.rdi.add(0x88).readPointer().readUtf16String();
        console.log("[++++] "+ timestamp +"    "+ wxid +"  :  "+msg)
    }
});

console.log("Hook已安装,等待接收消息...");

运行脚本

图片[23]-实现微信Hook消息接收-羚羊公子博客

发送消息测试

图片[24]-实现微信Hook消息接收-羚羊公子博客

教程所需文件合集

© 版权声明
THE END
喜欢就给作者加个鸡腿吧!
点赞6 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容