上节课 我们详细解析的二维码图片的找法,这节课我们继续来实现远程hook二维码图片地址, 语言的话用易语言大法
我们上节课有找到一个地址 他存放着二维码图片地址
这里我们说怎么实现hook 也就是说二维码刷新 我们可以直接Hook到二维码
我事先把上节课说道的地址找到 04CF4A90

04FC9E30 就是二维码图片地址
我们要借助OD 通过断点来跟踪他是怎么变化的

在输入命令的地方 输入 dd 04CF4A90 然后回车
就可以看到 内存数据

我们对04CF4A90这个地址 下一个硬件写入断点
因为当二维码变化的时候 存放的二维码地址 也就变了
下断点之后
我们用手机扫一下二维码 然后再退回到 二维码界面 实现二维码的刷新

断在了这里,我们先把硬件断点取消掉


然后删除我们刚刚下的断点 就行了

我们要看断下的上一行 才是我们要找的地方 也就是esi
大家仔细看 他和我们下断的地址是一样的 而我们知道 这个地址里面是存放着二维码地址的
这时候 其实二维码图片 并没有写入进来

我们按F8单步走

走完这个子程序 也就是执行完ret

这几个地方 其实都存放着二维码图片的真实地址
我们hook 53758DF7这个地址 因为这里二维码数据 才真正被填充完毕
大家可以尝试 在这之前断下 然后读取 看看是不是能读取到完整的二维码 就知道了

当我手动刷新二维码之后 这是hook出来的寄存器的值
- “esi” | 80692704 4CF45E0
- “eax” | 83664432 4FC9E30
- “edi” | 3761 EB1
汇编里面有这样一句代码
53758DEC |. FFB6 B0040000 push dword ptr ds:[esi+0x4B0]
esi+0x4B0=4CF45E0+4b0=04CF4A90 这个地址 其实就存放着二维码的地址 大家如果记得的画
image.png
而 eax直接就是二维码的图片地址了
edi 其实也很明显了 图片大小
这些东西都有了之后 我们就可以 自由读取二维码了 也可以应对刷新
每次二维码刷新的时候 我们都能hook到
image.png

我们再来看下扫码之后的内容 也就是二维码图片里的实际内容是什么

我们通过二维码解码平台 解析微信二维码 得到里面的实际内容
http://weixin.qq.com/x/Yd6B206B7TWQJZ7xHo2A 发现是这么一串内容
我们尝试在内存中寻找他

我们先尝试 整串搜索 发现0个结果 搜索不到
我们就不搜完整的串 我们只搜索Yd6B206B7TWQJZ7xHo2A 这一串特征数据 每次刷新都只是这一串变化 前面的网址是固定的
我这里二维码自动刷新 了 http://weixin.qq.com/x/oezZfJIcLrUKkmqLlLot

我们再次手动扫描二维码 实现刷新

发现 只有06206C68地址 跟着变化了
也就是说 这个地址应该就是我们要找的
和上面的方法一样
我们对06206C68这个地址下硬件访问断点 来观察他的变化过程

我们发现 esi里面存放了我们二维码内容的地址
我们可以看到旁边的注释
这个地址来自 wechatwin模块
我们就来计算下他的地址 首先我们得到wechatwin模块基址

我们把 549a7f30-模块基址53600000=13A7F30
因此我们可以计算出 二维码存放基址等于 模块基址+13A7F30
然后我们开始用易语言大法 开始码代码

这样就完成了 即使我们关闭微信客户端 重新打开 代码依旧能用
如果要应对更新 或者兼容其他版本 可能需要进行特征码定位
今天的内容就到这了
网友评论