首页
社区
课程
招聘
[原创]PC微信逆向:使用HOOK拦截微信二维码
发表于: 2019-6-18 19:32 19678

[原创]PC微信逆向:使用HOOK拦截微信二维码

2019-6-18 19:32
19678

微信二维码在内存中存放形式是png格式的二进制数据,所以我们需要眼熟一下png的文件格式,如图

前32个字节是固定的,分别是btPngSignature和struct PNG_CHUNK chunk结构,其中保存有png图片的标识。

其中NG和IHDR是每个PNG文件都会有的标识,眼熟一下就好。微信的二维码图片就是通过这种格式在内存中存放

首先在微信未登录状态下附加微信,此时二维码还未加载

然后选择未知的数值,点击首次扫描

出现三百万个结果

此时我们再次点击切换账号,出现二维码,让保存二维码的地址被赋值

然后选择变动的数值 再次扫描

此时还剩下七万个结果

然后用手机扫描二维码 不要点击登录,再次扫描变动的数值,此时还剩三万多个结果

接着随意移动微信框,点击未变动的数值,还剩一万多个结果。返回二维码登录重复以上操作,直到地址栏还剩下两个绿色的基址,这两个绿色的基址就是我们要的。

因为随机基址的存在,这个地址在各位的电脑上是不一样的。但是低四位是一致的,这两个地址应该是xxxx9194和xxxx919C。

然后重启一次微信,再用CE附加,回到这个状态

用OD附加微信,在找到的第一个地址xxxx9194下内存写入断点

点击切换账号,在二维码未加载时程序会断下。注意,这个地方会断下来两次,第二次才是我们要的结果。

因为二维码是存放在微信的核心模块WeChatWin中的,所以我们在堆栈中找到所有的WeChatWin中的函数

像这种API的调用就可以直接排除掉,然后在每一个疑似函数上下断点。找的时候堆栈尽量往下拉,这个函数会比较靠后。

因为我已经找过一遍了,所以直接告诉你们是这一个。特征是有一个ecx传参。

接着在这个函数上下断点,删除内存访问断点,F9运行

然后扫一下二维码,点击返回二维码登录,程序断下

此时观察ecx指针的内容,明显是一个结构体,结构体的第一个是地址,第二个好像是大小。然后在这个地址上数据窗口跟随


里面是PNG文件的二进制数据,这个就是我们要找的微信二维码的基址

打开PCHunter,选择微信进程,查看->查看进程内存,输入地址和大小,然后将内存dump下来

打开图片

现在已经确定就是我们需要的二维码。然后我们将这个call的地址减去模块基址,记录下偏移。待会需要HOOK这个call

二维码其实是一种开放性的信息存储器,它将固定的信息存储在自己的黑白小方块之间。大部分的二维码都有一个特点,就是里面存放的其实是一段文本。我们可以利用这个文本来寻找突破口

将微信的二维码截图保存,然后用在线的二维码解码器解析微信的二维码

可以看到解码之后的结果是一段网址

如果直接搜索这段网址是找不到任何结果的,原因是因为微信在保存这段位置的时候,实际上是将它分为了两部分存储

第一部分的固定不变的,第二部分被当作一个参数传入,客户端从服务器获取的只是第二部分的内容。所以我们去搜索第二部分。

另外,微信的二维码会定时刷新,刷新的时候会改变第二部分的内容。如果你搜不到的话可能是因为之前的文本已经失效了。从解析文本到搜索文本最好在一分钟之内完成

此时 我们直接搜索第二部分的文本

搜索完成之后,等待二维码自动刷新,然后找到那个变化之后的地址,用截图上传的方式确保找到的是正确的地址


然后用OD附加微信,在找到的地址上下内存写入断点

等待二维码自动刷新,二维码刷新时会往原来存放二维码的地址写入新的二维码数据,程序就会断下

此时eax指向二维码的文本内容,我们找到堆栈中的第一个地址,在数据窗口显示,此时就能找到存放微信二维码数据的基址了

然后我们在CE中添加WeChatWin.dll模块,找到模块基址,算出偏移(用0x104CF618-0xF250000=127F618)。然后将这个地址换成模块基址+偏移的方式添加到CE地址栏。

重新打开微信,用CE载入

保留当前列表,然后将二维码内容指针的值添加到列表

点击确定。此时二维码的内容和解析出来的内容一致,说明基址有效

那么我们拿到这个二维码的内容有什么作用呢?我们可以将这个获取到的二维码内容调用二维码生成器的API接口进行再次编码,然后生成一个更加漂亮好看专属二维码,效果如图:

接着我们编写一个dll,将这个dll注入到微信进程中,利用IAT Hook截取微信的二维码。部分关键代码如下:

开启HOOK

卸载HOOK

保存图片

最终效果如图:

最后附上工程和成品DLL

目前微信机器人的成品已经发布,需要代码请移步Github。还请亲们帮忙点个star

https://github.com/TonyChen56/WeChatRobot

 

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2019-7-27 10:29 被鬼手56编辑 ,原因:
上传的附件:
收藏
免费 9
支持
分享
最新回复 (11)
雪    币: 1266
活跃值: (1307)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
2019-6-18 23:55
0
雪    币: 279
活跃值: (101)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
最后于 2019-6-19 09:18 被想猫的鱼编辑 ,原因:
2019-6-19 09:16
0
雪    币: 279
活跃值: (101)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
需要pc端 itunes苹果账号注册,协议注册源码的,可以站内短信联系!
最后于 2019-6-19 09:20 被想猫的鱼编辑 ,原因:
2019-6-19 09:18
0
雪    币: 6078
活跃值: (5485)
能力值: ( LV5,RANK:65 )
在线值:
发帖
回帖
粉丝
5
赞一个,虽然用不到,但是读到的内容,还是可以借鉴使用在其它地方,对微信的二维码,也多了一些了解,感谢分享!
2019-6-19 20:14
0
雪    币: 342
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
强大 可以动手去试一下了。
2019-7-27 01:19
0
雪    币: 230
活跃值: (47)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
6666666666
2019-9-14 23:33
0
雪    币: 43
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
8
想猫的鱼 需要pc端 itunes苹果账号注册,协议注册源码的,可以站内短信联系!
我需要iTunes注册机,加我3593687896
2022-5-5 00:26
0
雪    币: 219
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
9
牛皮,有需求,麻烦添加qq358619478
2022-5-16 08:23
0
雪    币: 2965
活跃值: (2312)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
佬,现在这种方法好像不行了,搜出来没有直接的绿色基址。
2023-10-7 16:02
1
雪    币: 4700
活跃值: (3209)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
听说现在的微信有检测了,会封号,具体怎么检测的也没个原理,搞不明白
2023-10-7 16:09
0
雪    币: 2119
活跃值: (1890)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
12
2023-10-7 16:45
1
游客
登录 | 注册 方可回帖
返回
//