某比特币勒索病毒分析
面试时拿到的一个勒索病毒样本,结束后整理了一下当时的分析报告来和大家分享一下。该样本比较老,2012年首次在VT上被记录。样本的逆向难度比较简单,没有什么反逆向技术,挺适合新手练手。
IOC
MD5 291456322adcac8f75437b9f4a715693
SHA-1 ac51cec89c0d563715a646ccf5d584f1ce1fdd5d
SHA-256 62e59afe5b604b14efeb68600ca3f179024b17d2e4babf30fa41ebbf91e2f710
静态分析&动态分析
解密配置文件
从资源节区中加载配置文件数据,再通过密钥解密配置文件,配置文件。
解密算法如下:
void __stdcall __spoils<edx,ecx> sub_40211B(char *a1, int a2)
{
v2 = a1;
v3 = a1;
v4 = 0;
for ( i = a2; i; --i )
{
if ( v4 == 16 )
v4 = 0;
v6 = *v2++;
*v3++ = key[v4++] ^ v6; // key:89 EF 37 A2 01 55 C9 80 7F 69 83 14 2D 45 6B 03
}
}
加密文件
在start函数中,通过GetLogicalDrives函数获取最大可用磁盘设备号,从A盘开始到最大可用磁盘设备号进行遍历,遍历分区下所有目录和文件,并将目标文件类型加密。
被加密的文件格式都有哪些?
在sub_4013A8函数中,我们可以看到待加密文件的文件类型有:*.zip、.rar、.7z 、.tar、.gzip、. jpg、.jpeg、.psd 、.cdr、.dwg、.m ax、.bmp、.gif.* .png、.doc、.doc x、.xls、.xlsx、.ppt、.pptx、.tx t、.pdf、.djvu.* .htm、.html、.md b、.cer、.p12、. pfx、.kwm、.pwm. .1cd、.md、.mdf 、.dbf、.odt、.v ob、.ifo、.lnk. .torrent、.mov、 .m2v、.3gp、.mpe g、.mpg、.flv、. avi、.mp4、.wmv、.divx、.mkv、.m p3、.wav、.flac、.ape、.wma、.ac 3、.exe、.iso、. dll,以及.html。
被加密文件的数据配置信息中指定的文件加密大小
指定的加密大小是nNumberOfBytesToRead (0x1B03E4),也就是默认加密的最大长度为1770468个字节。此外,加密的位置是从第48字节以后开始的。
运行被加密文件时弹出勒索提示框的
通过在注册表“HKEY_CLASSES_ROOT”根下添加一个键“.lUUUUUUUUU”,此后所有以该键为文件后缀的文件启动后,会运行依据HKCR\AOUIJJJBNYUXWCN\shell\open\command(Default)下设置的程序。
HKEY_CLASSES_ROOT控制键包括了所有文件扩展和所有和执行文件相关的文件。它同样也决定了当一个文件被双击时起反应的相关应用程序。
相关代码位于函数sub_402342。
文件加密算法&加密文件的密钥的产生
加密文件使用的tea加密密钥是根据一组固定密钥根据文件名末尾地址进行4轮循环异或生成新密钥。
对文件进行加密使用到的加密算法有两种,根据配置文件来决定使用哪一种算法进行加密:
1.tea加密,算法位置在函数sub_4017EC,tea解密算法在函数sub_4018B0;
unsigned __int32 __stdcall tea_decryph(unsigned int *a1, unsigned __int32 *a2)
{
v2 = 0x9E3779B9 * dword_4065A5;
x = _byteswap_ulong(*a1);
y = _byteswap_ulong(a1[1]);
do
{
v5 = y - ((dword_406591 + (x >> 5)) ^ (v2 + x) ^ (dword_40658D + 16 * x));
v6 = x - ((dword_406589 + (v5 >> 5)) ^ (v2 + v5) ^ (newKey + 16 * v5));
v7 = v2 + 0x61C88647;
y = v5 - ((dword_406591 + (v6 >> 5)) ^ (v7 + v6) ^ (dword_40658D + 16 * v6));
x = v6 - ((dword_406589 + (y >> 5)) ^ (v7 + y) ^ (newKey + 16 * y));
v2 = v7 + 0x61C88647;
}
while ( v2 );
result = _byteswap_ulong(x);
*a2 = result;
a2[1] = _byteswap_ulong(y);
return result
2.函数sub_401748,使用一组16位密钥进行异或加密。
样本的勒索逻辑是否严密,被加密文件是否能够解密?解密思路?
该勒索病毒的勒索逻辑并不严密,能够轻易解密。加密后解密密钥被保存在样本数据段中,加密算法也并不复杂,可以写脚本直接反解被加密的文件。由于解密算法也在样本中,所以可以修改代码逻辑去主动执行解密程序。比如,可以修改sub_401AB9函数中的代码逻辑,将输入的密码计算得到的密钥改成保存的正确密钥。
前者思路太麻烦了,这里提供第二种解密思路:将下图画圈处硬编码地址改为0x406DC9即可,也是最简单的修复方法。
运行后成功执行解密程序,所有被加密的文件均被解密还原。
end
招新小广告
ChaMd5 Venom 招收大佬入圈
新成立组IOT+工控+样本分析 长期招新
欢迎联系admin@chamd5.org
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
随时掌握互联网精彩
- 1 澳门是伟大祖国的一方宝地 7902747
- 2 36岁女子看高血压查出怀孕34周 7989022
- 3 日本火山喷发灰柱高达3400米 7862282
- 4 中国为全球经济增长添动能 7791832
- 5 肖战新片射雕英雄传郭靖造型曝光 7676537
- 6 女子8年生6个女儿第7胎再产女 7558296
- 7 女法官遇害案凶手被判死刑 7471790
- 8 大三女生练咏春一起手眼神骤变 7300994
- 9 蒋欣生图更是妈妈级别 7282693
- 10 太原市原市长耿彦波再获新头衔 7121181