某比特币勒索病毒分析

面试时拿到的一个勒索病毒样本,结束后整理了一下当时的分析报告来和大家分享一下。该样本比较老,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”,此后所有以该键为文件后缀的文件启动后,会运行依据HKCRAOUIJJJBNYUXWCNshellopencommand(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即可,也是最简单的修复方法。

运行后成功执行解密程序,所有被加密的文件均被解密还原。

本文作者:ChaMd5安全团队

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/192592.html

Tags:
评论  (0)
快来写下你的想法吧!

ChaMd5安全团队

文章数:85 积分: 181

www.chamd5.org 专注解密MD5、Mysql5、SHA1等

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号