首页
社区
课程
招聘
[原创]GandCrab v5.2 分析
2019-11-26 23:44 3998

[原创]GandCrab v5.2 分析

BQC 活跃值
1
2019-11-26 23:44
3998

目录

第一次分析有很多没分析到的地方,多多见谅

病毒简介

GandCrab勒索病毒于2018年1月首次出现,并出现了很多变种,GandCrab病毒家族主要通过RDP暴力破解、钓鱼邮件、捆绑恶意软件、僵尸网络以及漏洞利用传播。病毒本身不具有蠕虫传播能力,但会通过枚举方式对网络共享资源进行加密,同时攻击者往往还会通过内网人工渗透方式,利用口令提取、端口扫描、口令爆破等手段对其他主机进行攻击并植入该病毒。在一年半内赚进超过20亿美金后,他们决定金盆洗手,关闭这个恶意程序。2019年6月,GandCrab勒索病毒团队相关论坛发表俄语官方声明,将在一个月内关闭其RaaS(勒索软件即服务)业务。

样本信息

文件: C:\Users\win7\Desktop\VW5\VW5.exe
大小: 95232 bytes
修改时间: 2019年2月24日, 22:15:11
MD5: B48F9C12805784546168757322A1B77D
SHA1: 527C655FE98810AB22B6F36C9677D862BC66770E
CRC32: 8F03CEAF

查壳

使用PEiD查壳,链接器版本是14.0 是vs2015写的程序,区段也很正常。
图片描述

大致分析

  • 加载了C:\Windows\System32\vmhgfs.dll 模块
    图片描述

  • 文件操作有点多,大致是遍历目录生成txt文件。和后缀为.lock的文件。
    图片描述

  • txt的内容大概是告诉我们文件被加密了,不要删除,和购买私钥的具体方法。
    图片描述

    具体分析

    -入口处发现不能反汇编,猜测可能动态解密或者有混淆,使用动态调试看看吧。
    图片描述

  • 使用OD分析发现有多处混淆,由于我没什么太好的方法于是就单步分析。

  • 获取用户名,及一些计算机信息配置信息磁盘空间信息和当前使用的输入法
    图片描述
    图片描述
    图片描述
  • 通过注册表获得当前使用的输入法判断是否是俄语
    图片描述
  • 然后又获取了这些国家的输入法标识,通过GetUserDefaultUILanguage获得本机 输入法标识。具体对应的国家可以去https://docs.microsoft.com/zh-cn/openspecs/windows_protocols/ms-lcid/a9eac961-e77d-41a6-90a5-ce1a8b0cdb9c 查询。循环比较是不是在这些国家内。是的话就结束了。
    图片描述
    图片描述

  • 创建一个名字为 "BitHuender"的互斥体,并且遍历进程如果有以下进程就结束掉。steam做错了啥??
    图片描述

图片描述
图片描述

  • 获取主流杀毒软件名字,并遍历进程,如果有的话就保存一下,并没有给结束。
    图片描述

  • 解密生成密钥
    图片描述

  • 这个病毒有混淆,IDA有的地方不能分析,接着动态分析看看
    图片描述

  • 接着生成私钥
    图片描述

  • 会被加密文件的后缀

    图片描述
    图片描述

  • 接下来创建了一个线程(403cda),地址为 403dce,去ida中发现这个地址也不能反汇编
    图片描述
    图片描述

  • 动态调试下看看这个线程在做什么
    启动网络资源的枚举,并且加密局域网共享目录
    图片描述

  • 接下来获取磁盘类型,又启动了一个线程
    图片描述
    获取了一些目录
    \ProgramData.
    \IETldCache.
    \All Users.\Windows.
    \Boot\
    \Program Files\
    \Tor Browser\
    \All Users\
    \Local Settings\
    \Windows\

  • 如果是以上几种就不感染,除了函数直接jmp 到ret

    图片描述

如果是文件的话,以下几种不感染。
图片描述

  • 接下来就是遍历加密文件
    图片描述
    生成随即名称 lock文件,保存的感染时间
    图片描述
    创建勒索文档

    图片描述
    图片描述
    生成以后缀为 ukczkvdo的文件,这个后缀是随机生成的
    图片描述


[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

最后于 2019-11-26 23:49 被BQC编辑 ,原因:
收藏
点赞2
打赏
分享
最新回复 (8)
雪    币: 5380
活跃值: (11815)
能力值: ( LV12,RANK:312 )
在线值:
发帖
回帖
粉丝
一半人生 5 2019-11-27 09:04
2
0
不错,可以看一看 https://blog.51cto.com/13352079/2355303
雪    币: 19586
活跃值: (60203)
能力值: (RANK:125 )
在线值:
发帖
回帖
粉丝
Editor 2019-11-27 09:19
3
0
感谢分享~
雪    币: 239
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
人在鹅厂 2019-12-16 16:54
4
0
花指令很有规律的 ,可以试着写ida脚本去掉花指令的
雪    币: 6286
活跃值: (1141)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
BQC 1 2019-12-16 17:03
5
0
人在鹅厂 花指令很有规律的 ,可以试着写ida脚本去掉花指令的
好的,谢谢!一直对去花没啥思路
雪    币: 239
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
人在鹅厂 2019-12-16 17:03
6
0
把这些位置nop掉 然后重新分析就能正常f5
雪    币: 6286
活跃值: (1141)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
BQC 1 2019-12-16 17:03
7
0
一半人生 不错,可以看一看 https://blog.51cto.com/13352079/2355303
谢谢
雪    币: 239
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
人在鹅厂 2019-12-16 17:07
8
0
def patch(addr):
    data = list(get_bytes(addr,28))
    if((ord(data[0]) == 0xB9) and (ord(data[1]) == 0xD2) and (ord(data[2]) == 0xC3) and ord(data[3]) == 0x01 and (ord(data[5]) == 0xE8) and (ord(data[6]) == 0x0B)):
                       for i in range(0,28):
                               patch_byte(addr+i,0x90)
base = 0x401000
len = 0x411000-base
for i in range(len):
       patch(base+i)
AnalyzeArea(base, 0x411000) 
print 'Finished'

#ida python的脚本
雪    币: 6286
活跃值: (1141)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
BQC 1 2019-12-16 17:16
9
0
人在鹅厂 def patch(addr): data = list(get_bytes(addr,28)) if((ord(data[0]) == 0xB9) and (ord(data[1 ...
好的,谢谢你,学到了
游客
登录 | 注册 方可回帖
返回