PC微信逆向:分析@群成员call

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_38474570/article/details/97672427


接上一篇文章,PCXX逆向:发送与接收消息的分析与代码实现:https://blog.csdn.net/qq_38474570/article/details/93339861

发送消息函数的分析

首先定位到发送消息的call

在这里插入图片描述

接着发送一条艾特消息让程序断下
在这里插入图片描述

普通消息和艾特消息的区别就在于eax结构体的区别,所以我们查看一下eax的值

在这里插入图片描述

此时eax指向一个结构体,我们数据窗口跟随看看第一个地址里面保存的是什么

在这里插入图片描述

里面保存的是被艾特人的微信ID

在这里插入图片描述

然后再查看一下ebx消息文本的指针,格式必须是@微信昵称 文本内容

定位组装的数据格式

在这里插入图片描述

想要调用微信发送艾特人消息的关键就在于如何组装这样一个数据格式,

在这里插入图片描述

这两个地址的内容对于我们来说都是未知的,所以我们要找到组装这个数据格式的call,然后我们直接调用call拿到这个数据格式,再发送艾特消息

追踪ebx+0x14

在这里插入图片描述

从这里可以得出eax来自于[ebx+0x14],接下来我们要找[ebx+0x14]来自于哪里

在这里插入图片描述

我们直接拉到函数头部下断点,发送一条艾特消息让程序断下

在这里插入图片描述

查看[ebx+0x14]的内容,发现里面为空,接着我们单步,看这个地方是在哪里被赋值

在这里插入图片描述

单步到这里我们发现这一句将[esi+0x4]的值赋值给了ebx,也就是说[esi+0x4+0x14]的位置会被赋值到[ebx+0x14],我们查看[esi+0x4+0x14]的值,发现就是我们要组装的数据结构。所以,现在我们要查找[esi+0x4]的值来自于哪里。

追踪esi+0x4

我们再次定位到函数头部,发消息让程序断下

在这里插入图片描述

当单步过mov esi,dword ptr ds:[eax]时,esi+0x14+0x4被赋值为我们追踪的数据结构

在这里插入图片描述

此时我们将esi替换为[eax],查看[eax]+0x14+0x4的内容,就是我们需要的数据结构

在这里插入图片描述
此时我们查看eax寄存器,指向了一个地址

在这里插入图片描述

这个地址偏移0x18的地方就是我们要找的数据结构,所以我们现在就要追溯eax来自于哪里

追踪eax

在这里插入图片描述

eax来自于这个函数的参数,所以我们定位到函数头,找到返回地址,反汇编窗口跟随,在返回地址前面一个call下断点

在这里插入图片描述

这里我们发现eax来自于ebp-0x24,所以可以将eax换成ebp-0x24,我们查看一下[ebp-0x24]+0x14+0x4的内容

在这里插入图片描述

就是我们在找的数据结构,继续往上追,在这个函数的头部下断点,我们要追溯[ebp-0x24]的内容来自于哪里?

追踪ebp-0x24

在这里插入图片描述

当我们步过这个call的时候发现ebp-0x24]+0x14+0x4被赋值为这个结构体,说明这个call非常关键,有可能就是用来组装数据的call

分析组装数据的call

在这里插入图片描述

这个call将eax当作参数传入了堆栈,而eax现在是个空白的缓冲区,我们F7单步跟进去

在这里插入图片描述

这里发现了一个call,传入了一个空白的缓冲区

在这里插入图片描述

还有艾特消息的文本格式,F8步过这个call

在这里插入图片描述

此时缓冲区内存放了我们需要的数据,说明这个就是我们需要的组装数据格式的call

测试组装数据的call是否有效

  1. 另找一块缓冲区,替换掉组装数据的call写数据的缓冲区
  2. 发一条普通的文本消息,然后替换eax的值为缓冲区的地址 看是否会发出艾特消息
  3. 将文本内容改成艾特的结构->@微信昵称 文本内容

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

展开阅读全文

没有更多推荐了,返回首页