在这篇文章中,我们将研究最近送达的恶意可执行文件钻机开发套件。它被包装在.NET加密器中,并包括与我们前段时间描述的类似功能(在这里).类似的封装程序是广泛的,通常用于保护各种恶意软件样本,这就是为什么有必要了解它们的共同构建模块和击败它们的方法。

分析样品

关于此示例的有趣事实是它签署了:

签名_file.

打开包装

可执行文件在.NET中编写,因此我们可以使用针对此目的(.NET Reflector,DNSPy等)所做的一些流行工具来分解它。

混淆

正如我们所看到的,代码被混淆 - 函数具有乱码,无意义的名称。还有内部的代码包含了很多垃圾指令,并且很难遵循。甚至应用已知的.NET Deobfuscation(DE4DOT)的应用程序甚至没有帮助。

DE4DOT.

不管怎样,让我们从找到可能的有效载荷开始。

资源

查看资源我们可以看到一个看起来像扭曲的PE文件的元素:

浪漫_pe.

它是通过以下函数加载和处理的:

装载

使用dnSpy,我们可以在函数的末尾设置断点,运行它并转储输出缓冲区。

dump_result.

倾倒的二进制文件原来是在.NET中写的另一个PE文件(3A5CC47413CD815B44A0329100E552DA).然而,它并不是我们要寻找的恶意负载,而是密码器的另一个元素——加载器。它将实际有效负载解包,并使用RunPE技术(也称为进程空化)将其注入另一个二进制文件中。

loader_view.

加载器不是独立 - 它依赖于上一个文件的资源。我们可以从资源的代码中看到“瓦里奥托普“包含一组参数。它被一个函数解密解密,用了一个词“参数,作为解密密钥:

load_params.

真实的有效载荷隐藏在另一个加密资源的内部。文件的名称以及解密密钥包含在上一步中解密的参数中:

run_payload

有效载荷可以注入其中一个预定义的可执行文件:vbc.exe.RegAsm.exeapplaunch.ex.ex.e,notepad.exe.exe.- 或者,最终,它自己的过程。根据加密集的一个参数进行选择。

解密算法是基于自定义异或的:

解密

使用此功能的副本,我们可以轻松地从初始二进制文件中解密转储的资源。我们能够重建样本解码器,您可以在此处找到Python脚本:msil_dec.py.

解密参数:

./ msil_12 .py——file varitoyp——key params 0| |0|0|0|0|0|0|0|10000|0|0|0|0|0|0|0|0|0|0| LgunkLBEWL7f5asOISuri|0|0|0|0|0|0|nTEVmryG9b8grLtmS06bryl0|ZxjmzvjUYrFNhuAOygWpbtsxcVZ|6|0|

参数以字符串的形式,包含由分隔符分隔的值。参数30和31包含掩盖加密有效载荷和密钥的资源的名称。

nTEVmryG9b8grLtmS06bryl0, //二进制ZxjmzvjUYrFNhuAOygWpbtsxcVZ, //密钥

加密的可执行文件存储在初始二进制文件的资源中:
二进制

关键是:
钥匙

解密:

./ msil_12 .py——file nTEVmryG9b8grLtmS06bryl0——key ZxjmzvjUYrFNhuAOygWpbtsxcVZ > payload.exe

结果,我们得到了最终有效载荷(07A08CF5211665DFCD090E7BAB6C8608) - 它是一个neurevt机器人,用于凭证窃取和ddos攻击(阅读更多在这里).

命令

结论

这个密码破译员可能和上次描述了一个——它甚至可能是同一作者的作品。同样,我们看到一个加载器中包含了另一个PE文件。同样,这里也有一个参数数组。最后,注入有效负载的应用程序列表在这两种情况下是完全相同的。在前面的加密器中,使用了一个BMP文件来隐藏加密数据(配置和最终有效负载)。这一次,作者们放弃了任何隐写技巧。

在以前的释放近一年后,我们不能说产品进化到更复杂的东西。相反 - 我们看到了同样的想法,但是不同地突变和实施。


这是由Hasherezade,独立的研究员和程序员撰写的客座帖子,具有强烈的Infosec。她喜欢详细介绍恶意软件,并与社区分享威胁信息。看看她的推特@hasherezade.以及她的个人博客:https://hshrzd.wordpress.com.