查看: 98|回复: 0

[转载图文] PC微信逆向:分析@群成员call

[复制链接]
发表于 2020-6-9 01:02:10 | 显示全部楼层 |阅读模式
                                                                                        文章目录

    • 发送消息函数的分析
    • 定位组装的数据格式
      • 追踪ebx+0x14
      • 追踪esi+0x4
      • 追踪eax
      • 追踪ebp-0x24
      • 分析组装数据的call
      • 测试组装数据的call是否有效

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

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

PC微信逆向:分析@群成员call
  接着发送一条艾特消息让程序断下

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

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

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

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

PC微信逆向:分析@群成员call
  此时eax指向一个结构体,我们数据窗口跟随看看第一个地址里面保存的是什么

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

PC微信逆向:分析@群成员call
  里面保存的是被艾特人的微信ID

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

PC微信逆向:分析@群成员call
  然后再查看一下ebx消息文本的指针,格式必须是@微信昵称 文本内容
定位组装的数据格式

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

PC微信逆向:分析@群成员call
  想要调用微信发送艾特人消息的关键就在于如何组装这样一个数据格式,

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

PC微信逆向:分析@群成员call
  这两个地址的内容对于我们来说都是未知的,所以我们要找到组装这个数据格式的call,然后我们直接调用call拿到这个数据格式,再发送艾特消息
追踪ebx+0x14

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

PC微信逆向:分析@群成员call
  从这里可以得出eax来自于[ebx+0x14],接下来我们要找[ebx+0x14]来自于哪里

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

PC微信逆向:分析@群成员call
  我们直接拉到函数头部下断点,发送一条艾特消息让程序断下

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

PC微信逆向:分析@群成员call
  查看[ebx+0x14]的内容,发现里面为空,接着我们单步,看这个地方是在哪里被赋值

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

PC微信逆向:分析@群成员call
  单步到这里我们发现这一句将[esi+0x4]的值赋值给了ebx,也就是说[esi+0x4+0x14]的位置会被赋值到[ebx+0x14],我们查看[esi+0x4+0x14]的值,发现就是我们要组装的数据结构。所以,现在我们要查找[esi+0x4]的值来自于哪里。
追踪esi+0x4  我们再次定位到函数头部,发消息让程序断下

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

PC微信逆向:分析@群成员call
  当单步过mov esi,dword ptr ds:[eax]时,esi+0x14+0x4被赋值为我们追踪的数据结构

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

PC微信逆向:分析@群成员call
  此时我们将esi替换为[eax],查看[eax]+0x14+0x4的内容,就是我们需要的数据结构

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

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

此时我们查看eax寄存器,指向了一个地址

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

PC微信逆向:分析@群成员call
  这个地址偏移0x18的地方就是我们要找的数据结构,所以我们现在就要追溯eax来自于哪里
追踪eax

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

PC微信逆向:分析@群成员call
  eax来自于这个函数的参数,所以我们定位到函数头,找到返回地址,反汇编窗口跟随,在返回地址前面一个call下断点

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

PC微信逆向:分析@群成员call
  这里我们发现eax来自于ebp-0x24,所以可以将eax换成ebp-0x24,我们查看一下[ebp-0x24]+0x14+0x4的内容

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

PC微信逆向:分析@群成员call
  就是我们在找的数据结构,继续往上追,在这个函数的头部下断点,我们要追溯[ebp-0x24]的内容来自于哪里?
追踪ebp-0x24

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

PC微信逆向:分析@群成员call
  当我们步过这个call的时候发现ebp-0x24]+0x14+0x4被赋值为这个结构体,说明这个call非常关键,有可能就是用来组装数据的call
分析组装数据的call

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

PC微信逆向:分析@群成员call
  这个call将eax当作参数传入了堆栈,而eax现在是个空白的缓冲区,我们F7单步跟进去

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

PC微信逆向:分析@群成员call
  这里发现了一个call,传入了一个空白的缓冲区

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

PC微信逆向:分析@群成员call
  还有艾特消息的文本格式,F8步过这个call

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

PC微信逆向:分析@群成员call
  此时缓冲区内存放了我们需要的数据,说明这个就是我们需要的组装数据格式的call
测试组装数据的call是否有效
  • 另找一块缓冲区,替换掉组装数据的call写数据的缓冲区
  • 发一条普通的文本消息,然后替换eax的值为缓冲区的地址 看是否会发出艾特消息
  • 将文本内容改成艾特的结构->@微信昵称 文本内容
  目前微信机器人的成品已经发布,需要代码请移步Github。还请亲们帮忙点个star
https://github.com/TonyChen56/WeChatRobot


温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的最好奖励,还可以获得学币奖励,请尊重作者的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
论坛交流群:672619046
微信公众号
快速回复 返回顶部 返回列表