最近在网上看了下各种相关帖子,都是比较老的版本,这里我将以3.6.0.18版本为例,对其进行分析 【供学术研究,请勿用于非法用途】
一、定位关键词
- 在登录界面通过CE搜索字符串“二维码” 把搜索结果长度改为1000,看到都是一些类似于html的标签,WX使用的UI库是《Duilib》这个库是开源的,不难找到。

- 其中有个跟二维码相关的关键词“qrcodeBackBtn”,是一个button,那我们就从这做切入点

二、寻址验证
- 打开od附加,搜索字符串“qrcodeBackBtn”,定位到引用了该字符串的地方,下断点

- 通过IDA对比,点击事件会有一个if分支做判断,刚好这里有一个跳转
- 尝试nop掉这个call,然后放行,果然!界面没有刷新二维码,那就是这个call了

- 继续F7跟进去看下,发现这里的eax中有wxid、二维码url等相关信息
- 他把eax的值又赋值给了ecx再次调用下一个call,那么这2个call应该是要一起用的

- 尝试把它们都nop掉,看看界面会有什么变化,界面确实一直转圈,并未出现二维码
- 那么这里应该就是我们要找的地方

三、编写代码
void Hook()
{
DWORD baseAddr = GetBaseAddr();
DWORD qrcodeAddr1 = baseAddr + qrcodeOffset1;
DWORD qrcodeAddr2 = baseAddr + qrcodeOffset2;
__asm
{
call qrcodeAddr1;
mov ecx, eax;
call qrcodeAddr2;
}
}