使用x64dbg分析微信聊天函数并实现发信息

作者:网友投稿 时间:2018-03-26 16:01

字号

我们知道微信现在不光在手机上很常用,在电脑也是非常常用的,尤其是使用微信联系客户和维护群的人,那这个时候每天都会定期发送一些信息,如果人工操作会很累,所以自动化工具是王道,本节就使用x64dbg让你看看怎么完成发消息。本节完整源码在github:https://github.com/15pb/wechat_tools

2. 网络协议分析模型

首先我们讲一些理论知识,在开发中,网络通信的协议最常见的有tcp,udp,http等,而在通信时使用的模型(这里的模型说的是代码执行方式)也不尽相同,我们在分析微信协议的时候第一要确定微信是什么通信协议,第二要确定使用的是哪种模型。第三再分析微信的私有通信协议完成调用。

2.1 PC微信通信协议的识别

PC端微信使用的协议我们可以通过对每种协议相关的API设置断点来确定是哪个协议。一般PC端客户端程序的通信协议常用的是tcp和udp。 

关于tcp,udp的API:

协议 函数
tcp   send  
udp   sendto  

Clipboard Image.png

2.2 通信模型的识别

知道了通信协议之后,再说说通信协议的模型。一般我们在开发网络程序时,会采用两种方式来与网络进行通信,第一种是就是直接从UI获取数据然后发送数据,第二种是有单独的工作线程负责发送数据,两种通信模型我把它们分别称为同步模型,异步模型。 这两种模型中异步模型是比较复杂的,为了方便大家理解,我们将两种模型最简单的雏形给大家梳理一下:

① 同步模型 

Clipboard Image.png

这种模型的优点在于UI操作完就可以立即发送,非常适合我们做逆向分析,通过栈回溯一般都可以找到字符串的踪迹,从而找到发送消息的函数,剩下的就是分析其参数,完成调用即可。一些网络负载不是太大的程序,比如普通软件、2D网络游戏,大多会采用这种方式,实时的获取 

② 异步模型 

Clipboard Image.png

这种模型通常在UI线程中发送数据时会添加到一个队列中,然后在工作线程中不停的从队列中读取数据,然后发送数据。在逆向分析时,我们要做的就是通过在send设置断点,然后可以通过观察send的参数缓冲区,再对缓冲区或是与缓冲区关联的地址设置访问或写入断点,断到写缓冲区,添加队列的地方。之后在去找调用函数。由于这个过程比较复杂,有时需要多次设置断点才可以找到我们想要的信息。 

3. 使用x64dbg分析微信模型与定位关键函数

基于上面的理论,我们实际去分析一下微信的通信模型。

3.1 使用x64dbg分析微信网络发包线程

首先我们还是在send设置断点,然后等断下之后观察堆栈窗口中有没有敏感字符串,我们使用PC版微信中的文件传输助手来测试  

Clipboard Image.png

当send断下之后,我们查看堆栈窗口中的信息,观察有无我们输入的字符串

Clipboard Image.png

实际观察会发现堆栈中没有我们想要的字符串,一般这个时候可以大致确定发送数据的这个线程与UI线程不是一个线程,通信的模型属于异步模型。

3.2 使用x64dbg定位UI线程的队列添加

确定了异步模型,我们下一步做的就是在send的参数buf上设置硬件写入断点,看看哪里给这个buf写入了信息,找到那个队列信息。 

责任编辑:CQITer新闻报料:400-888-8888   本站原创,未经授权不得转载
继续阅读
热新闻
推荐
关于我们联系我们免责声明隐私政策 友情链接