GandCrabV2.0病毒分析记录

分析环境

吾爱破解虚拟机(XP系统) IDA 6.8 火绒剑

样本来源

https://www.52pojie.cn/thread-712552-1-1.html

病毒文件信息

文件: C:\Documents and Settings\Administrator\桌面\GandCrabV2.0 样本 IDB\GandCrabV2.0 样本+IDB\hmieuy.exe
大小: 315912 bytes
修改时间: 2018年3月11日 星期日, 13:28:31
MD5: F42774332FB637650FF0E524CE1B1685
SHA1: 0012363A8A6EFDD93FBD4624EE5E8DDF1F7BE8D5
CRC32: 9732F21C

行为概览

在这里插入图片描述

查壳信息

exeinfo在这里插入图片描述
样本无壳,通过链接器版本以及提示判断开发环境为VS2010 C++编写。

火绒剑动态运行分析记录

1.执行监控

在这里插入图片描述
病毒载入运行运行所需的dll 不断打开nslookup.exe进程(此进程用于查询 Internet域名信息或诊断DNS 服务器问题,获取被感染主机的公网IP信息),

文件与行为监控

在这里插入图片描述
在这里插入图片描述
 病毒在C:\Documents and Settings\Administrator\Application Data\Microsoft\路径下创建iqvwlz.exePE文件,从文件的MD5与sha1值对比,可以推断初始的样本是一层包装。
在这里插入图片描述
调用系统RSA加密库 加密算法大概率是RSA。

注册表监控在这里插入图片描述

在这里插入图片描述
注册表除大量获取键值外,在HKEY_CURRENT_USER\Software\Microsoft\Windows
\CurrentVersion\RunOnce路径下设置键值 用于所创建的iqvwlz.exe文件实现自启动。

网络监控 在这里插入图片描述

网络行为主要是连接66.171.248.178:80,获取本机IP信息,nslookup.exe不断重连0.0.0.0:53初步判断可能是没有连接到C&C地址 不断进行重连尝试。

动态行为监控小结:病毒程序运行后在C:\Documents and Settings\Administrator\Application Data\Microsoft\目录下创建exe文件,通过不断设置注册表项实现exe文件开机自启动和长久驻留。期间有调用RSA库可能是用RSA算法进行加密。不断打开nslookup.exe进程查询主机ip信息。可能是由于无法与服务器C&C地址进行连接 导致一直无法运行勒索加密。

代码分析

使用IDA定位main函数入口004010B4,断点与F4结合跳过大量前面混淆进入到解密资源代码处:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
首先通过VirtualProtect修改区域内存为可读可写可执行,然后执行解密函数将加密数据解密为恶意代码
解密前
在这里插入图片描述
解密后:在这里插入图片描述
shellcode的dump大小为0x181B8 此值取edx中的参数赋值与资源大小值参考 解密后进入shellcode代码部分执行
在这里插入图片描述解密的shellcode代码通过获取访问fs寄存器进入PEB结构的方式获取kernel32.dll的基址 进而对dll的导出表进行遍历获得相关函数的地址
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
获取kernel32.dll地址
在这里插入图片描述
在这里插入图片描述
在01370000处申请大小为23400h大小的内存空间 写入新的PE文件 可dump此处内存另存分析
在这里插入图片描述
在这里插入图片描述
解密PE文件后,程序将依次PE文件内容拷贝到0x400000处实现加载到内存,后续操作中修复PE文件IAT
在这里插入图片描述
IAT修复
  分析dump所得的PE文件发现病毒通过ReflectiveLoader函数装载解密出的恶意代码,将含有恶意功能的dll数据到自身进程,实现dll不落地即可执行其功能躲避杀软查杀。技术手法:反射式注入
设置bp VirtualProtect断点查找可能要执行的下一段解密数据(建立在已经知道有要改变内存属性的才能执行代码或者测试是否有类似代码存在)
在这里插入图片描述
  在MZ位置即4120C0处设置硬件写入断点,重新运行,回溯可见解密dll数据过程,之后查找ReflectiveLoader函数,修改内存保护属性为可读可写可执行。之后即进行dll文件的IAT修复 重定位等反射式注入操作。
在这里插入图片描述
对DUMP所得的dll进行分析 dll被反射注入加载后创建新线程执行病毒功能
在这里插入图片描述
此处线程切换可以通过设置中断于新线程定位代码调试
在这里插入图片描述
在这里插入图片描述
进入新线程函数通过注册表信息查询获主机相关信息 并创建互斥体
在这里插入图片描述
在这里插入图片描述
互斥体使用收集到的系统信息进行CRC32加密后的ID进行拼接
在这里插入图片描述
创建新线程 完成对杀软驱动的信息收集 释放自身到系统目录 设置注册表实现开机自启的操作
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
遍历并结束部分会占用勒索加密文件的进程
在这里插入图片描述
再次收集主机相关信息完善勒索文本 发送到服务器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
调用CSP 生成RSA加密的公钥和私钥
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
回传服务器收集到的主机信息过程
1·主机信息收集同上
在这里插入图片描述
2·公钥和私钥进行base64加密
在这里插入图片描述
将收集的信息整合进行CRC32加密后再进行base64加密 加上协议包头部等信息发送到服务器
在这里插入图片描述
伪装为火狐浏览器进行网络连接
在这里插入图片描述
在这里插入图片描述
创建nslookup进程使用管道方式实现通信 进行服务器查找 循环解析politiaromana.bit,malwarehunterteam.bit,gdcb.bit
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

加密文件部分

进入文件加密部分后首先指定不加密文件后缀
在这里插入图片描述
使用临界区防多开 进入加密函数后先判断磁盘类型 对每一个要加密的磁盘设备使用一个线程执行加密函数
在这里插入图片描述
在这里插入图片描述
进入文件加密函数后首先指定不加密文件目录,然后判断文件后缀不是.sql后创建勒索文本
在这里插入图片描述
在这里插入图片描述
创建勒索文本
**加粗样式**
根据规则寻找到加密文件后进入具体的文件加密过程 首先检测文件名是否是不可以加密的
在这里插入图片描述
在这里插入图片描述
具体的文件加密函数过程上半部分
在这里插入图片描述
随机化过程 Rand1与Rand2一样
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
公钥加密过程 先拷贝Rand2到新内存空间 使用公钥进行加密 获得PubKeyR2和PubKeyR1
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下半部分加密文件过程 先通过CreateFileW ReadFile组合将要加密的文件内容映射到内存
在这里插入图片描述
在这里插入图片描述
进入数据加密函数后以0x10大小为单位与Rand1进行逐位异或
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
大于10字节 进入加密函数
在这里插入图片描述
在加密函数中先使用Rand2数据异或加密前面Rand1加密后的0x10字节
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
前0x10字节处理之后,进入作者字节构造的加密函数 使用Rand2中的数值 循环移位进行加密
在这里插入图片描述
在这里插入图片描述
超过0x10字节 第一个被构建的加密函数 加密后的0x10字节加密后的效果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
写入Rand2公钥加密后的数据
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
循环遍历目录下文件执行加密
在这里插入图片描述
 加密结束后执行操作
在这里插入图片描述
在这里插入图片描述

分析总结

 复现是个相对轻松的工作,但是病毒分析复现,感觉很受限,前人已有的,找到就可以,但是细节方面哪些要继续追进去深入,哪些可能是错误的干扰都必须保持自己的思考。
 勤记录,多小结,时间尽量可控(太长时间有没有规划会把控不了整个的运行流程)。这个样本在算法方面纠缠了很长时间,但最后得承认对于新手来说,逆向一个勒索病毒算法不如dump代码进行黑盒处理或者直接找解密工具。

解密网站分享

https://www.nomoreransom.org/crypto-sheriff.php?lang=zh

参考文章

https://www.52pojie.cn/thread-712552-1-1.html
https://www.52pojie.cn/thread-931175-1-1.html