微信版本:3.9.12.45
账号:两个微信账号,大号用来发消息,小号用来测试
定位消息地址
选择微信进程!
大号给小号发送消息,扫描类型选择字符串,数值填写消息内容!
重复之上的步骤,不断重复,直到无法定位的时候(我这里有三个),一个个查看浏览器内存区域!
找到带着wxid和xml格式的就是内存地址!
x64dbg断点
记录一下当前的微信地址1B6555E11BD,关闭CE修改器,打开x64dbg,附加微信,按住alt+e选择wechatwin.dll
点进去,再内存窗口搜索刚才记录的地址
设置写入断点!
此时微信大号给小号发送消息,查看堆栈信息
找到有个db的那个(这一步骤是再写入微信数据库之前定位call)
选择,右键“在反汇编中转到指定QWORD”
跳转之后,先取消上一个断点
然后针对跳转的位置,找到上一个call位置,在call处进行断点
发送消息,断点到了,查看RDI
在地址栏的第一个双击一下
这样我们可以得出
0x48 是 微信id
0x88 是 微信消息的内容
计算偏移
找到断点位置,复制文件偏移!
然后打开计算器那个图标,用偏移地址+C00
得出结果250AEA7
验证结果
找到断点位置,复制地址
然后按住ALT+E,找到复制wechatwin.dll的基址
用计算器两者相减得出结果250AEA7
结果是对的,此时编写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已安装,等待接收消息...");运行脚本
发送消息测试
教程所需文件合集
© 版权声明
© 版权声明 All Rights Reserved
1 本站名称:羚羊公子博客
2 本站网址:https://lygzblog.cn
3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考。请于下载后24小时内删除。版权归原作者和机构所有,严禁商用,否则产生的一切后果将由您自己承担。
4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5 如有侵权请邮件与我们联系处理。敬请谅解!邮件:lygz@lygzblog.cn
THE END
喜欢就给作者加个鸡腿吧!

请登录后查看评论内容