globelImposter及其C4H变种分析

1、概述

globelImposter出来已经有很长时间了,目前其C4H后缀的变种依旧有老哥中招,该家族可谓是经久不衰,且就在投稿前几天火绒发紧急通告说该家族又在活跃。尽管在坛子上也globelImposter相关分析文章,但主要的加密部分可能因为时间关系分析得较简略或有点错误,毕竟勒索病毒精髓就是文件加密部分。若文中有错误的地方望大伙指出,谢谢。

 

2、样本信息

样本名           globelImposter.exe

样本大小         51,712 bytes

MD5            C120F323C78D046C991F0EFE45F3819C

SHA1            C6CBF8DD6DDA8388A6B5860A62091808E2B4D2BF

  1. 实验环境

windows xp 32位

 

  1. 简要运行

相关注册表操作:

 

相关文件操作:

已被加密的文件:

 

  1. 详细分析

5.1 解密出内置的RSA公钥并计算其SHA256

首先跟进MyAESDecode_408B19()函数:

该函数用内置的AES密钥解密出内置的RSA公钥:

先调用aes_setkey_enc()设置内置的密钥,再跟进aes256_crypt()函数,该函数使用ECB模式解密,函数详情如下:

其中aes_crypt_ecb()中,当a2=1时进行加密操作,a2=0时进行解密操作:

内置的AES密钥:

内置被加密的RSA公钥:

解密后的RSA公钥:

然后申请空间存放计算出RSA公钥的SHA256:

跟进ClacSha256_4088F4(),该函数负责计算解密出来的RSA公钥的SHA256:

存放的地址:

 

5.2 用RSA公钥的解密出相关字符串

先获取当前程序运行路径:

 

接着调用MyAESDecode_408B19()函数,传入RSA公钥的SHA256的值作为AES的密钥分别解密出后缀名和how_to_back_files.txt

再调用DecodeStrList_409ABF()函数,传入RSA公钥的SHA256作参数,解密出相关不加密的字符串:

判断运行文件的路径是否为LOACLAPPDATA环境变量路径,如果不是,则把文件复制过去:

并在注册表把路径值设置为开机启动项:

 

5.3生成UserID的txt文档

把RSA公钥的进行SHA256后的字符串与ALLUSERPROFILE环境变量对应的路径拼接:

紧接着把路径传人CalcIDAndCreateTxt_409B4B()函数并调用:

跟进该函数,函数中把公钥和计算生成的UserID写入Txt文件创建拼接后的文件:

然后申请堆空间,并调用CreateUserRSAAndWrite_40A116()函数生成加密用户所需的RSA密钥,并把公钥写入堆空间

跟进CreateUserRSAAndWrite_40A116()函数,在该函数中首先调用rsa_gen_key__40741D()生成USER_RSA1024密钥对

然后调用Wirtefile 向txt文件写入生成的RSA公钥:

把Rsa_P、Rsa_Q与字符串拼接:

拼接后的字符串如下:

接着调用rsa_encrypt_409FDE()函数,传入内置的rsa公钥对拼接后的字符串进行加密:

被加密后的字符串:

把加密后的字符串十六进制转为ASC字符串后,并写入txt文件中,以此作为用户ID:

 

 

文件内容:

5.4开始加密文件:

下面进入文件加密的函数StartEncryptFiles(),参数为用户ID和生成的Rsa公钥:

跟该加密含塑,首先获得判断磁盘类型,2、3、4表示支持移动移动硬盘、硬盘、网络硬盘:

对每个盘符开启一个线程进行加密,参数为用户ID和生成的Rsa公钥:

进入线程函数StartAddress,首先解析出函数参数:

开始拼接盘符c:\* 遍历文件:

经过一系列的比较文件名,最终调用加密函数startEncrypt_408D8B():

 

进入startEncrypt_408D8B,先调用ctr_drbg_random_40667A()生成32字节的随机sec_key:

生成的32字节的随机sec_key如下:

初始化digest向量:

把向量和文件路径作填充消息:

所生成的32字节的hash如下:

然后把生成的hash前16字节和sec_key作填充消息,做两次hash运算后的值作为AES加密的key:

所生成的AES的密钥为:

用参数传入的RSA公钥加密生成AES的sec_key,其中off_40111C为公钥指数e:固定为0x010001:

加密后的sec_key:

把加密后的sec_key和计算生成的用户ID字符串写入文件:

然后调用AES_EnCryptFile()执行文件加密:

跟进AES_EnCryptFile()中,其中调用EncryptFile_408A3F()进行加密, v12为原来内容 a10为加密后的内容:

跟进EncryptFile_408A3F()函数,该函数为主要加密操作函数,加密方法为:采取隔行加密策略,先异或16个字节,再用AES的ecb模式加密:

加密前传入内容:

进行前16个字节异或后:

再用AES的ecb模式加密异或后的16字节:

 

加密完文件后把AES的密钥再次做hash运算,并把前面生成hash的前16字节也复制在后面,再把这0x30个字节复制到加密后文件内容的后面

最终加密后的文件内容结构如下:

第一部分为文件加密的内容:

第二部分为AES密钥被生成RSA公钥加密后的内容:

第三部分为所生成RSA公钥:

第四部分为部上hash的0x30个字节:

 

5.5 相关的后续工作:

在WriteHowBackFile_40935E()函数中释放how_to_back_file.txt在相应目录:

内容如下:

 

在CreateAndRunBat()调用MyAESDecode_408B19()解密bat,清除登录日志:

解密的aes密钥:

Bat内容如下:

 

执行自删除操作:

命令如下:

 

  1. CCH4变种对比

 

名称:C4H.exe

大小:56832 字节

MD5:3AF2E34E2B5E3632C0C99DE82AC5A6E4

SHA1:6041C4AB11FF14D20F71072A04AD78F0B7D4BEDA

 

bindiff总体对比图:

 

差异一:

RSA的公钥写在文件中:

直接将其计算SHA256:

 

差异二:

解密的字符串的方式,C4H不同与globelImposter的直接采用根据RSA的SHA256值解密作AES的密钥解密出相关字符串,其采用自定义解密的方式根据RSA的SHA256值解密出相应的文件名:

解密出的字符串:

 

 

获得的加密后缀名为.C4H:

自定义的解密方式如下:

 

差异三:

C4H生成RSA时没有用到随机数接口,该数值却直接写在文件中:

而加密文件AES密钥生成方式是一样的,只是C4h将IV和secret key一起hash了 2000次,再作为AES的key:

但文件的加密方式不同,取消了原来的隔行AES_ECB加密,全部均异或后再AES_ECB加密:

加密前的文件数据:

加密后的文件数据:

 

差异四:

注册表的键值不同:

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值