![72c8dc5d89289ba6e72113cb52cf1b47.png](https://i-blog.csdnimg.cn/blog_migrate/55bd2dd2229dae6d728733158abe53f2.jpeg)
微信在pack之后又封装了一层,尝试跟踪,在tencent.mm:push进程下,java端最后断在一个req2buf函数中,但是这个函数是由so调用的,能力有限,还没调到具体调用的地方。所以试试看转战PC端。
使用微信版本2.6.4.56
首先发现这个报文是和手机端就不一样,当手机向PC发送消息时,是先发送一个不知名报文,然后PC端返回一段比较长的报文,然后才会收到真实数据报文。
通过内存断点,目前发现PC端返回的断点可能是用来给真实收到的报文解密的。
具体调试方式如下:
直接在ws2_32.dll中查找recv函数,下函数断点。因为微信是tcp的,应该不是udp,
下内存断点,查看访问数据段的地方。(这里内存断点下在靠后的部分,前面部分是一些标示位,可能进不了加密段)
而后进入一个函数,偏移为100215A0,这里修改函数备注为procecv26
共有5个参数,分析可知第一个是收到的报文,第二个是解码后的报文,第三个作为功能标示位,让函数进入不同的功能块。第四和第五个参数用来生成秘钥,用于后续加密。
调试发现第三个标识位功能大概如下:
1:处理收到的第一条通知报文吧,每次手机发消息给pc,都会现有一