提醒:本文最后更新于 141 天前,其中某些信息可能已经过时,请谨慎使用!
你似乎正在查看一篇很久远的文章。
为了你这样的访客,我特地保留了我的历史博文。不要笑话过去的我,用温柔的目光看下去吧。

摘要

如今,尽管防病毒软件及其复杂,它们利用了签名,启发式,行为分析甚至机器学习算法等先进的检测技术,但它们还是很容易被规避。在本文中,我将提供一个非常简单的教程,介绍如何bypass大多数防病毒软件。我们将结合使用众所周知的内存注入入口点的思路。我们的目标不是从头创建FUD的有效载荷,而是采取一种基于现有程序进行处理的方法。

快速说明:我仍然认为,使用最新的防病毒软件是一个好习惯,只是不要永远都相信它。

在本教程中,我选择了.NET开源有效负载,因此该恶意软件的包装程序也将在.NET中进行编码,以简化该过程(尽管完全有可能在此处使用不同的语言)。

尽管我们使用的是C#,但提出的概念与语言无关,你可以在另一种语言中实现它。

要求

对于本教程,您将需要:

  • .NET有效负载 [将被执行的恶意软件]
  • Visual Studio [编码和构建我们的项目]
  • ILmerge [将多个.NET程序集合并为一个]
  • win10虚拟机 [测试我们的项目]

如前所述,我们将使用内存注入来加载恶意可执行文件,但是在加载之前,我们需要一个入口点。为了欺骗防病毒软件并逃避沙盒行为分析,由于大多数沙盒不允许键盘/鼠标交互,因此我们设定单击鼠标将触发注入,没有人可以预测这种情况的发生时间。我们还将对恶意软件进行加密,之后将其加载到内存中,以避免AV静态检测。

步骤1:加密有效负载

选择恶意软件后,我们需要将其转换为base64,以便将其作为字符串存储在包装中。该包装程序通常称为存根(stub),因为它是负责解密和执行恶意软件的代码。转换为base64之后,我们将使用标准AES加密对其进行加密,然后再次将其转换为字符串。

转换的简要说明:

  • 转换您的二进制文件(字节-> base64)
  • 加密(base64->字节)
  • 再次转换(字节-> base64)

打开Visual Studio并创建一个项目,该项目将负责加密二进制文件,生成并运行它。下图说明了该过程。

此代码将加密的有效负载保存在文件中,稍后将使用。

第2步:检测鼠标单击

现在,我们需要创建一个程序来全局检测鼠标单击,并在检测到单击时执行我们的二进制文件。最简单的方法是使用名为MouseKeyHookNuGet包。我们希望全局检测点击,但是包装器的执行应该是隐身的,因此我们将强制控制台应用程序作为Windows窗体应用程序运行。

这样,我们可以在不向用户显示任何输出窗口的情况下运行程序。

  • 在VisualStudio中创建控制台应用程序(.NET Framework 4)并使其作为Windows窗体应用程序运行
  • 转到解决方案- >管理NuGet包并安装MouseKeyHookILmerge
  • 为鼠标左/右键单击创建一个挂钩

单击后执行load方法,并触发解密和执行过程,下面将对其进行详细说明。

步骤3:解密并注入

设置好鼠标单击的钩子之后(我们将使用任何鼠标左/右单击,但是可以修改为其他任意操作),我们需要执行与第一个操作相反的操作来解密恶意软件。base64字符串是第一步中创建并保存在文件中的字符串(我们的编码加密恶意软件)。

反向过程:

  • 转换(base64->字节)
  • 解密(字节-> base64)
  • 再次转换:(base64->字节)

解密有效负载后,我们将在C#中使用内存注入在内存中执行它。

注意:除了这种方法外,我们还可以使用原始有效负载创建一个Pastebin,并在我们要加载它时发出Web请求。因为我们不需要硬编码的有效负载,所以这将使最终的二进制文件更小。但是,这会增加被认定为恶意程序的可能性。

最后的想法

虽然我们能够逃避防病毒并执行有效负载,实现了目标,但是此解决方案远非完整,可以通过几种不同的方式进行改进,例如:

  • 为有效负载添加开机启动(进程注入,Windows注册表,启动键等)
  • 删除.Net依赖项
  • 添加压缩/混淆
  • 缩小有效载荷大小
  • 选择随机字符串和变量名称
  • 更改使用的加密

另一个有趣的想法是用一种更底层的语言(例如C或C ++)实现此机制,使其更隐蔽。

发表评论

共有 4 条看法

  1. 成人之美

    兄弟 这博客很有特色啊。

    1. qwqdanchun@成人之美

      老哥你的网站也是呀,哈哈

  2. helloleader

    楼上的网站的确更有特色, 哈哈哈哈

  3. sorryfu

    绝了 这个博客主题