微信Hook劫获protobuf数据

    网上相关的微信Hook教程,讲的基本都是相同的功能,比如获取当前微信号,二维码登录,加群,获取群信息,发消息。但是貌似protobuf方面的没什么人讲到,我自己百度,Google了下是没找到,所以只能自食其力了。

    因为微信用的协议是mmtls,发送的数据呢是用的google的protobuf,知道这点后,咱可以自己去用protobuf练习写个demo,怎么写demo,咱就不赘述了,咱就说怎么来获取微信发送的protobuf数据吧。

    1.首先咱都知道微信发请求都会调用req2buf相关的函数然后再post出去,接受数据呢会调用buf2resp相关的函数对protobuf数据进行反序列化,然后再进行接下来的逻辑处理。所以咱就随便OD里面找个req2buf相关的函数头进行断点

   

 

    2.接下来咱可以推断req2buf函数里面肯定调用了protobuf相关的序列化函数功能的。那咱就借助IDA,来找下关键字。首先打开IDA,载入WeChatWin.dll,按快捷键shift+f12,切到字符串搜索窗口。然后输入关键词“google"查找,结果如下图:

 

   注意看截图里面画红框的”message_lite.cc“,那为什么是它呢?是因为我自己在写protobuf练习的demo过程中,发现protobuf序列化和protobuf反序列化过程中都会调用到这个文件里面的相关函数。

    那是不是只要把这个字符相关的函数给下个断点,就可以获取调用入口了呢。ok,接下来看有哪几个函数引用了这个字符串,

    3.双击红框的地方,跳过去,然后再按”X“键查看引用的地方,结果如图:

 

    可以看到有3个函数引用到了,那咱就开OD,对3个函数下断点,然后1步步进行调试了,就会找到调用的入口函数。因为我自己已经用OD调试过了,就不再演示怎么用OD找入口函数了,直接用IDA来找了。

-----------------------------------------

IDA快速查找protobuf序列化,反序列化入口函数。

  1. 随便查找个req2buf相关的函数

     

    因为有了前面的推断,及OD的调试经验。所以可以知道这个函数里面肯定要有调用protobuf序列化的函数。咱就1个函数1个函数的点进去看。过程就不说了,目标函数就是画红框那个。它的2个参数呢,就是咱要的

第1个参数是放的序列化后的数据缓冲区,第2个参数是缓冲区大小。在OD调试的时候就可以把数据给拷出来,放到protobuf解析工具里面做解析。

1.序列化函数入口断点:

 

2.继续下一步,然后复制数据

 

3.处理空格,然后解析

 

    protobuf反序列化的入口函数过程是模一样的,先找个buf2resp的函数头断点。再相关的message_lite.cc函数断点,下面附一图IDA里面的找buf2resp反序列化的函数入口点吧。

 

pb解析工具下载

IDARvaTool

posted @ 2021-10-11 15:25  情三  阅读(1237)  评论(1编辑  收藏  举报