学逆向论坛

找回密码
立即注册

只需一步,快速开始

发新帖

2万

积分

41

好友

1157

主题
发表于 2020-6-9 00:59:50 | 查看: 5149| 回复: 0
                                                                                        文章目录

    • 分析群拉人功能的思路
    • 定位群拉人call
      • 定位联系人的微信ID
      • 定位群拉人call
        • 必须要执行的call
        • 可以不执行的call
        • 必须要执行的call
      • 追踪数据结构的来源
      • 总结
分析群拉人功能的思路

PC微信逆向:分析群拉人功能

PC微信逆向:分析群拉人功能
  首先思考一下群拉人功能背后的编程逻辑,第一步需要将一组联系人放到一个数组里,然后拿到这一批人的微信ID,接着对这一批人发送一个群邀请。那么我们就可以从联系人的微信ID入手,只要找到了那组微信ID,那么就能下内存访问断点,进而找到群拉人的call
定位群拉人call定位联系人的微信ID

PC微信逆向:分析群拉人功能

PC微信逆向:分析群拉人功能
  首先在不选中联系人的情况下搜索微信ID

PC微信逆向:分析群拉人功能

PC微信逆向:分析群拉人功能
  接着选中所有的地址,添加到下方地址栏

PC微信逆向:分析群拉人功能

PC微信逆向:分析群拉人功能
  接着复制所有的内容,将其放到在线文本对比工具的A部分中

PC微信逆向:分析群拉人功能

PC微信逆向:分析群拉人功能
  接着选中要添加的联系人,然后再次搜索微信ID,此时搜索的数量增加。因为当你选中联系人的时候,微信肯定要把这个选择的联系人的ID放到已选联系人的数组里。

PC微信逆向:分析群拉人功能

PC微信逆向:分析群拉人功能
  接着同样将这批地址放到文本对比工具的B部分中。接着我们需要找到点击前没有的地址,点击后有的地址。也就是找到B有A没有的地址。

PC微信逆向:分析群拉人功能

PC微信逆向:分析群拉人功能
  接着我们在B部分里找到了四个A部分没有的地址,那么问题在于怎么筛选出唯一的一个地址呢?根据我们以往的经验我们知道,存放微信ID的数据格式一般如下:
XXXXXXXX XXXXXXXX "wxid_xxxxxx"
XXXXXXXX 13
XXXXXXXX 20
XXXXXXXX 0
XXXXXXXX 0
  那么我们可以大胆猜测,存放这个选中联系人的微信ID的地址的数据格式也是和之前的一样。接着我们在OD中去查看这四个地址的数据格式,看是否和上述的数据格式一致

PC微信逆向:分析群拉人功能

PC微信逆向:分析群拉人功能
  首先在CE中搜索选中的地址是否有上一级指针,如果没有 直接pass这个地址

PC微信逆向:分析群拉人功能

PC微信逆向:分析群拉人功能
  接着在OD中查看上一级指针的内容,发现这个数据结构比较符合我们的要求

PC微信逆向:分析群拉人功能

PC微信逆向:分析群拉人功能
  再次查看另外一个地址,发现这个正好是我们预期的数据结构,完全符合

PC微信逆向:分析群拉人功能

PC微信逆向:分析群拉人功能

  经过筛选我们发现三个地址都符合我们要的特征
定位群拉人call必须要执行的call

PC微信逆向:分析群拉人功能

PC微信逆向:分析群拉人功能
  既然如此我们只能先挑一个最大的地址来碰运气了,在这个地址中下内存访问断点(这一步需要经过多次排查)

PC微信逆向:分析群拉人功能

PC微信逆向:分析群拉人功能
  点击确定,让程序断下,

PC微信逆向:分析群拉人功能

PC微信逆向:分析群拉人功能
  此时程序断下,删除访问断点,开始排查堆栈

PC微信逆向:分析群拉人功能

PC微信逆向:分析群拉人功能
  在堆栈中我们发现了一个call,传入了被邀请人的微信ID,那么这个call就非常像我们找的邀请群成员的call,我们在这下个断点,邀请好友让程序再次断下
  如果想要验证这个call是否是关键call,那么可以修改微信ID,看看是否会将修改后的好友加进群。经过测试如果直接跳过这个call,那么微信会直接崩溃,因为这个是组装数据的必要的一个call。
  但是我们发现这个地方只有被邀请人的微信ID,并没有邀请的群ID,那么我们需要继续往后跟,很有可能这也是一个连续的call
可以不执行的call

PC微信逆向:分析群拉人功能

PC微信逆向:分析群拉人功能
  从找到的call一直往后F8单步,接着我们在这个地方找到了一个call,传入了一个群ID,那么有没有可能只要调用这两个call就能完成邀请的动作了呢?我们来验证一下

PC微信逆向:分析群拉人功能

PC微信逆向:分析群拉人功能
  让程序再次断下,然后将这个je修改为jmp,跳过这个call,跳过之后好友还是被拉进群了,那么说明这个call是一个没有用的call。我们还要继续往下找,找到传入了群ID的那个call
必须要执行的call

PC微信逆向:分析群拉人功能

PC微信逆向:分析群拉人功能
  当我们F8步过这个all的时候,发现将群ID写入到了堆栈,说明这个call可能是我们需要的call,继续往下单步

PC微信逆向:分析群拉人功能

PC微信逆向:分析群拉人功能
  发现这里有一个call将一个结构体压入堆栈,这个结构体我们已经很眼熟,见过很多次了

PC微信逆向:分析群拉人功能

PC微信逆向:分析群拉人功能
  数据窗口跟随,发现里面保存的就是微信ID,那么这个call就很有可能是我们需要的邀请人进群的call了
  当我们跳过这个call时,发现此时微信崩溃,也就是说这个call也是一定要执行的一个关键call
追踪数据结构的来源  现在我们已经知道了哪些是必须要调用的call,现在我们需要拿到esi数据结构的来源

PC微信逆向:分析群拉人功能

PC微信逆向:分析群拉人功能
  一直往上追溯,我们发现esi在这个地方被赋值,所以我们在这个call下断点,让程序断下

PC微信逆向:分析群拉人功能

PC微信逆向:分析群拉人功能
  程序断下,查看esi的值,我们发现此时esi已经是我们需要追溯的结构体,所以我们还需要继续往上找

PC微信逆向:分析群拉人功能

PC微信逆向:分析群拉人功能
  继续往上翻我们并没呀找到任何给esi赋值的地方,所以我们猜测有可能是这个call传入了一个微信ID,然后组装数据结构,所以我们在这个call下断点

PC微信逆向:分析群拉人功能

PC微信逆向:分析群拉人功能
  断点断下,此时esi的缓存区为空,F8步过这个call

PC微信逆向:分析群拉人功能

PC微信逆向:分析群拉人功能
  此时缓冲区内正是我们需要的数据,也就是说这个call是用于组装数据的必须的call

PC微信逆向:分析群拉人功能

PC微信逆向:分析群拉人功能
  另外 在这个地址还有一个往堆栈中写入群号的call,这个call也是要调用的
  现在我们只需要调用我们找到的前面三个call,就能够完成拉人的功能,但是微信会崩溃

PC微信逆向:分析群拉人功能

PC微信逆向:分析群拉人功能
  经过排查我们发现这个call,也是一个必须要调用的call,如果不调用的话 微信会直接崩溃
总结  想要写代码完成群拉人的功能,分为三个步骤。第一步,调用下面的call,组装数据
0FD94079    50              push eax                                 ; 微信ID
0FD9407A    E8 911E0000     call WeChatWi.0FD95F10                   ; 用于组装微信ID结构体的call
  第二步,调用下面的call,防止微信崩溃
0FD9412F    6A 00           push 0x0
0FD94131    68 A4D8FA10     push WeChatWi.10FAD8A4
0FD94136    8D4D C0         lea ecx,dword ptr ss:[ebp-0x40]
0FD94139    E8 D2D84200     call WeChatWi.101C1A10                   ; 一定要调用的call 否则微信会崩溃
  第三步,调用下面的call往堆栈中写入群号
0FD941EC    83EC 14         sub esp,0x14
0FD941EF    8D8B 80080000   lea ecx,dword ptr ds:[ebx+0x880]
0FD941F5    8BC4            mov eax,esp
0FD941F7    8965 E8         mov dword ptr ss:[ebp-0x18],esp
0FD941FA    50              push eax
0FD941FB    E8 90300100     call WeChatWi.0FDA7290                   ; 往堆栈中写入群号
  第四步,调用拉人的call
0FD9422B    C645 FC 03      mov byte ptr ss:[ebp-0x4],0x3
0FD9422F    56              push esi                                 ; 微信ID结构体
0FD94230    B9 C0DDFA10     mov ecx,WeChatWi.10FADDC0
0FD94235    C645 FC 02      mov byte ptr ss:[ebp-0x4],0x2
0FD94239    E8 920E2100     call WeChatWi.0FFA50D0                   ; 拉人的call
  目前微信机器人的成品已经发布,需要代码请移步Github。还请亲们帮忙点个star
https://github.com/TonyChen56/WeChatRobot


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

小黑屋|手机版|站务邮箱|学逆向论坛 ( 粤ICP备2021023307号 )|网站地图

GMT+8, 2024-4-27 08:02 , Processed in 0.117100 second(s), 40 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表