社区应用 最新帖子 精华区 社区服务 会员列表 统计排行
  • 635阅读
  • 3回复

[分享]GlobelImposter及C4H变种分析

楼层直达
z3960 
级别: 茶馆馆主
发帖
770868
飞翔币
207694
威望
215657
飞扬币
2511641
信誉值
8

1、概述globelImposter出来已经有很长时间了,目前其C4H后缀的变种依旧有老哥中招,该家族可谓是经久不衰,且就在投稿前几天火绒发紧急通告说该家族又在活跃。尽管在坛子上也globelImposter相关的分析文章,但主要的加密部分可能因为时间关系分析得较简略或有点错误,毕竟勒索病毒精髓就是加密的部分。若文中有错误的地方望大伙指出,谢谢。2、样本信息样本名           globelImposter.exe样本大小        51,712 bytesMD5            
C120F323C78D046C991F0EFE45F3819C
SHA1            
C6CBF8DD6DDA8388A6B5860A62091808E2B4D2BF
3. 实验环境windows xp 32位4. 简要运行相关注册表操作:相关文件操作:已被加密的文件:5、详细分析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内容如下:执行自删除操作:命令如下:6、CCH4变种对比名称:C4H.exe大小:56832 字节MD5:3AF2E34E2B5E3632C0C99DE82AC5A6E4SHA1:6041C4AB11FF14D20F71072A04AD78F0B7D4BEDAbindiff总体对比图:差异一: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加密:加密前的文件数据:加密后的文件数据:差异四:注册表的键值不同:----完结,谢谢大家观看------


图片 1_3.png (20.31 KB, 下载次数: 0)


54.png (13.24 KB, 下载次数: 0)

本帖最近评分记录: 1 条评分 飞扬币 +50
爱我中华 飞扬币 +50 2021-02-08 您的帖子很精彩,感谢您的付出!
我不喜欢说话却每天说最多的话,我不喜欢笑却总笑个不停,身边的每个人都说我的生活好快乐,于是我也就认为自己真的快乐。可是为什么我会在一大群朋友中突然地就沉默,为什么在人群中看到个相似的背影就难过,看见秋天树木疯狂地掉叶子我就忘记了说话,看见天色渐晚路上暖黄色的灯火就忘记了自己原来的方向。
级别: 超级版主
发帖
830456
飞翔币
224550
威望
224618
飞扬币
2422758
信誉值
0

只看该作者 1 发表于: 2021-02-08
来看一下
级别: 超级版主
发帖
830456
飞翔币
224550
威望
224618
飞扬币
2422758
信誉值
0

只看该作者 2 发表于: 2021-02-08
不错,了解了
级别: 茶馆馆主
发帖
556350
飞翔币
196451
威望
3641
飞扬币
2823373
信誉值
0

只看该作者 3 发表于: 2021-02-08
长知识了