写在前面的话

MaMoCrypt是一款臭名昭著的勒索软件,该勒索软件从去年的十二月份开始活跃,深受其害的用户可以算是不计其数了。那么在这篇文章中,我们将告诉大家如何恢复、解密被MaMoCrypt勒索软件加密的数据。

MaMoCrypt是一款非常与众不同的勒索软件,这款勒索软件采用Delphi开发,并且使用了mpress进行封装,是MZRevenge的一个变种版本。

勒索软件行为

MaMoCrypt能够删除Windows卷影(ShadowVolume),并禁用防火墙以及UAC服务。这些功能在恶意软件领域中其实并不罕见,因此我们在此对其不做更深入的讨论。

它使用了Delphi的随机生成器(基于线性同余生成器)以及基于时间的DWORD种子(使用QueryPerformanceCounter或GetTickCount),此时将会生成两个缓冲区,其中的数据会使用Base64进行编码,并添加MZRKEYPUBLIC / MZRKEYPRIVATE字符串。

根据上述的两个密钥以及一个掩码,该勒索软件将会针对每个文件生成两个加密密钥,随后将会使用它们来进行文件加密。它首先会使用AES 128 CBC来进行文件内容加密,然后再使用Twofish 128 NOFB来对其进行二次加密。AES加密过程中剩余的16%内容将使用AES 128 CFB进行加密,所有加密文件的后缀名都会添加一个“.MZ173801”。

加密完成之后,恶意软件会再次枚举所有加密目录,并分别存放勒索信息,而勒索信息中也会包含对应的那两个MZR密钥。

虽然MZR密钥在密钥生成或加密的过程中不会发生变化,但掩码会持续更新。它们的生成基于的是SHA1、SHA512和某些自定义算法的混合计算结果。每一个AES和Twofish密钥还会使用SHA512进行16次计算以及字节异或。

掩码和密钥生成

*(int*)mask_in = offset; for (int i = 0; i < 0x800; ++i) {     SHA1(mask_in, 0x84, mask_out);     *(int*)mask_in = i + 1 + offset;     *(mask_in + 3 + (i & 0x7F) + 1) ^= mask_out[0];     mask[i] = mask_out[1]; } offset += 0x800; aes_key = generate_key(mask, mzrkey_private.c_str(), 0x800, mzrkey_private.size()); for (int i = 0; i < 0x200; ++i) { SHA1(mask_in, 0x84, mask_out);     *(int*)mask_in = i + 1 + offset;     *(mask_in + 3 + (i & 0x7F) + 1) ^= mask_out[0];     mask[i] = mask_out[1]; } offset += 0x200; twofish_key = generate_key(mask, mzrkey_public.c_str(), 0x200, mzrkey_public.size());generate_key: int mzrkey_size_bswap = _byteswap_ulong(mzrkey_len); int mask_size_bswap = _byteswap_ulong(mask_len); for (int i = 0; i < key_SIZE; ++i) {   ((int*)in)[0] = _byteswap_ulong(i);   for (int j = 0; j < i; ++j)      in[j + 4] = key[j];   *((int*)(in + 4 + i)) = _byteswap_ulong(1);   *((int*)(in + 8 + i)) = mask_size_bswap;   memcpy(in + 3 * sizeof(int) + i, mask, mask_len);   memcpy(in + 3 * sizeof(int) + mask_len + i, &mzrkey_size_bswap, 4);   memcpy(in + 3 * sizeof(int) + mask_len + 4 + i, mzrkey, mzrkey_len);   SHA512(in, mask_len + mzrkey_len + 4 * sizeof(int) + i, out);   for (int j = 0; j < SHA512_DIGEST_LENGTH; ++j)       key[i] ^= out[j]; }

AES CBC的IV将使用AES 128 ECB生成,位置在一个16字节缓冲区内。类似的,Twofish NOFB的IV将使用Twofish 128 ECB生成,位置同样在一个16字节缓冲区内。掩码的初始内容生成如下:

memset(mask_in, MASK_IN_SZ, 0); memset(mask_out, MASK_OUT_SZ, 0); for (int i = 0; i < 0x80; ++i) {   SHA1(mask_in, 0x84, mask_out);   *(int*)mask_in = i + 1;   *(mask_in + 3 + i + 1) = mask_out[0]; }

实际上,这种加密机制我们此前从未在其他勒索软件中见到过,而且恶意代码还会对整个文件系统进行加密,该勒索软件的硬编码文件和驱动器列表如下:

C:\Program Files\SteamC:\Program Files (x86)\Steam[DRIVES A-Z, WITHOUT C]C:\Users\%user%\AppData\Roaming\Microsoft\Windows\Recent\C:\Users\%user%\PicturesC:\Users\%user%\MusicC:\Users\%user%\VideosC:\Users\%user%\DocumentsC:\Users\Public\DocumentsC:\Users\Public\VideosC:\Users\Public\MusicC:\Users\Public\PicturesC:\Users\%user%\DownloadsC:\Users\%user%\Favorites::{645FF040-5081-101B-9F08-00AA002F954E} (Recycle Bin)C:\Users\AdministratorC:\Users\PublicC:\Users\DefaultC:\Users\%user%\DesktopC:\Users\Public\DesktopC:\Users\%user%\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBarC:\Users\%user%\AppData\Roaming\Microsoft\Windows\Start MenuC:\ProgramData\Microsoft\Windows\Start Menu\

由于掩码/密钥生成使用了一个偏移量来代表每一个文件的递增,那么解密的过程将依赖于文件的加密文件夹。

这款勒索软件支持的文件加密类型如下:

.cs;.lnk;.mp3;.jpg;.jpeg;.raw;.tif;.gif;.png;.bmp;.3dm;.max;.accdb;.db;.dbf;.mdb;.pdb;.sql;.dwg;.dxf;.c;.cpp;.cs;.h;.php;.asp;.rb;.java;.jar;.class;.py;.js;.aaf;.aep;.aepx;.plb;.prel;.prproj;.aet;.ppj;.psd;.indd;.indl;.indt;.indb;.inx;.idml;.pmd;.xqx;.xqx;.ai;.eps;.ps;.svg;.swf;.fla;.as3;.as;.txt;.doc;.dot;.docx;.docm;.dotx;.dotm;.docb;.rtf;.wpd;.wps;.msg;.pdf;.xls;.xlt;.xlm;.xlsx;.xlsm;.xltx;.xltm;.xlsb;.xla;.xlam;.xll;.xlw;.ppt;.pot;.pps;.pptx;.pptm;.potx;.potm;.ppam;.ppsx;.ppsm;.sldx;.sldm;.wav;.aif;.iff;.m3u;.m4u;.mid;.mpa;.wma;.ra;.avi;.mov;.mp4;.3gp;.mpeg;.3g2;.asf;.asx;.flv;.mpg;.wmv;.vob;.m3u8;.mkv;.dat;.csv;.efx;.sdf;.vcf;.xml;.ses;.rar;.zip;.7zip;.dtb;.bat;.apk;.vb;.sln;.csproj;.vbproj;.hpp;.asm;.lua;.ibank;.design;.aspx;.bak;.obj;.sqlite;.sqlite3;.sqlitedb;.back;.backup;.one;.pst;.url;.onetoc2;.m4a;.m4v;.ogg;.hwp;.HWP;.OGG;.M4V;.M4A;.ONETOC2;.URL;.PST;.ONE;.BACKUP;.BACK;.SQLITEDB;.SQLITE3;.SQLITE;.OBJ;.BAK;.ASPX;.DESIGN;.IBANK;.LUA;.ASM;.HPP;.VBPROJ;.CSPROJ;.SLN;.CS;.VB;.LNK;.JPG;.JPEG;.RAW;.TIF;.GIF;.PNG;.BMP;.3DM;.MAX;.ACCDB;.DB;.DBF;.MDB;.PDB;.SQL;.DWG;.DXF;.C;.CPP;.CS;.H;.PHP;.ASP;.RB;.JAVA;.JAR;.CLASS;.PY;.JS;.AAF;.AEP;.AEPX;.PLB;.PREL;.PRPROJ;.AET;.PPJ;.PSD;.INDD;.INDL;.INDT;.INDB;.INX;.IDML;.PMD;.XQX;.XQX;.AI;.EPS;.PS;.SVG;.SWF;.FLA;.AS3;.AS;.TXT;.DOC;.DOT;.DOCX;.DOCM;.DOTX;.DOTM;.DOCB;.RTF;.WPD;.WPS;.MSG;.PDF;.XLS;.XLT;.XLM;.XLSX;.XLSM;.XLTX;.XLTM;.XLSB;.XLA;.XLAM;.XLL;.XLW;.PPT;.POT;.PPS;.PPTX;.PPTM;.POTX;.POTM;.PPAM;.PPSX;.PPSM;.SLDX;.SLDM;.WAV;.MP3;.AIF;.IFF;.M3U;.M4U;.MID;.MPA;.WMA;.RA;.AVI;.MOV;.MP4;.3GP;.MPEG;.3G2;.ASF;.ASX;.FLV;.MPG;.WMV;.VOB;.M3U8;.MKV;.DAT;.CSV;.EFX;.SDF;.VCF;.XML;.SES;.RAR;.ZIP;.7ZIP;.DTB;.BAT;.APK;

加密成功之后,该勒索软件将枚举全部加密目录,并一一存放勒索信息,勒索文本文件名为“How Do I Recover My Files (Readme).txt”:

如何解密

第一步:首先点击【http://download.bitdefender.com/am/malware_removal/BDMaMoDecryptTool.exe】下载解密工具,并存储在本地设备中。

第二步:双击下载下来的BDMaMoDecryptTool.exe应用程序文件,然后在弹出的UAC提示中点击“Yes”:

第三步:读取并接受终端用户许可证协议:

第四步:考虑到这款勒索软件家族的特殊性,工具将会以特定的顺序来扫描系统,而无法允许用户指定需要解密的文件夹或文件数据,因此我们强烈建议用户选择“备份文件”选项。

第五步:点击“Start Tool”按钮,剩下的就交给解密工具来完成吧!如果你选择了备份选项,那么加密文件和解密文件都将同时出现,你还可以在%temp%\BDRemovalTool目录中查看到解密过程的日志记录。

解密工具

BDMaMoDecryptTool.exe:【https://download.bdstore.com.cn/am/malware_removal/BDMaMoDecryptTool.exe】

精彩推荐

delphi php 加密解密_如何恢复被MaMoCrypt勒索软件加密的数据相关推荐

  1. java md5加密解密_技术09期:数据安全之加密与实现

    前言:大数据时代,每个人的生活中都不存在所谓的绝对"秘密",通过网络上的数据信息可以分析出一个人生活的各种痕迹.因此,保障大数据信息安全至关重要. 本文主要介绍了散列算法.对称加密 ...

  2. 加密解密php,2个比较经典的PHP加密解密函数分享

    项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这个加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理. 最常见的应用在用户登录以及一些AP ...

  3. 使用X.509数字证书加密解密实务(二)-- 使用RSA证书加密敏感数据(转)

    转自:http://www.cnblogs.com/chnking/archive/2007/08/30/875947.html 使用X.509数字证书加密解密实务(二)-- 使用RSA证书加密敏感数 ...

  4. 加密解密_使用RSA密钥对加密解密数据

    使用RSA密钥对加密解密数据 作者: 郭政鸿 2021/1/6 前言: 前几天看了非对称加密, 那非对称加密处理常见的https中的应用, 平时我们可以用来做什么呢? 1. 生成RSA密钥对 使用op ...

  5. 加密解密_作业-加密解密程序

    # 加密解密程序'''作业:自己写一个加密程序,能够加密的内容是英文和汉字.同时加密并且解密就是说,一段话中既有中文又有英文,标点符号不用处理.加密规则,获取ascii码数字,中间用|分割# 思路提示 ...

  6. 字符串加密与解密_一种可以用在程序加密的功能

    本篇博客会有两篇代码,均为C# 编写而成.其中一篇为先行的各种加密技术如何使用(转载出处会在文末注明):另一篇为利用以上加密技术做出的一个类库,可以使程序捆绑在运行此程序的硬件并限定使用时间,十分高效 ...

  7. mysql base64 加密解密_烂泥:base64加密与解密

    本文由ilanniweb微信公众号提供友情赞助,首发于烂泥行天下 jenkins技术分享QQ群:571981257 一.什么是base64 base64是网络上最常见的用于传输8Bit字节码的编码方式 ...

  8. 勒索文件恢复_我将如何从勒索软件中恢复

    勒索文件恢复 There are very few things that genuinely worry me in cybersecurity. Recovering from ransomwar ...

  9. linux加密文件_如何在Linux上使用Gocryptfs加密文件

    linux加密文件 Gocryptfs是安装在用户空间(FUSE)中的文件系统文件级加密程序. FUSE安装意味着将加密文件存储在使用FUSE接口安装的单个目录树中,就像USB密钥一样. 这样一来,任 ...

最新文章

  1. 拆解交易系统--模块拆解与服务化
  2. linux部署tomcat启动后无法访问,linux中启动tomcat后浏览器无法访问的解决方法
  3. windows下定期清理超过一定时间的文件
  4. 计算机算法的发展动态,计算机算法动态规划讲解.ppt
  5. 表情显示服务器异常,MySqlmoji表情引发的存储异常微信昵称
  6. 列注释_机器学习 Pandas 08:进阶 前09题 ( 带答案、注释 )
  7. python-50: 验证码
  8. JDK1.8与spring3.x的不兼容
  9. 利用百度智能云实现车牌号识别
  10. 建站系列:有云服务器和域名怎么建设网站?
  11. 好看的皮囊 · 也是大自然的杰作 · 全球高质量 · 美图 · 集中营 · 美女 · 2017-08-22期...
  12. 计算机组成原理简答题
  13. 需求工程-学习通习题-太原理工大学(14-17章)
  14. 王者荣耀头像大小怎么调?调整图片尺寸大小工具分享
  15. Xamainr 地图之webview初探
  16. utorrent android,utorrent手机安卓版
  17. 如何设置软件开机自动启动
  18. vscode项目配置服务器,vs code配置服务器
  19. 哺乳动物细胞转录调控入门---真核生物染色质概述
  20. Vue_02 快速入门 基础语法1

热门文章

  1. openGauss训练营第二期结营!一百个QA和PPT合辑大放送!随附105人结营学员名单...
  2. Oracle的直方图试验
  3. 2019全球PostgreSQL生态报告出炉,PG为何从RDBMS中脱颖而出?丨文末送书
  4. 解读业界5种主流的深度网络模型
  5. 华为云应用服务网格最佳实践之从Spring Cloud 到 Istio
  6. 利用深度学习识别滑动验证码缺口位置
  7. Vue+ElementUI项目使用webpack输出MPA【华为云分享】
  8. 【LiteOS】STM32F103-LiteOS移植教程(详细篇)
  9. android 内凹的圆角,css实现内凹圆角,利用圆角反向进行(转)
  10. Think in Java第四版 读书笔记7第13章 字符串