摘要
如今,尽管防病毒软件及其复杂,它们利用了签名,启发式,行为分析甚至机器学习算法等先进的检测技术,但它们还是很容易被规避。在本文中,我将提供一个非常简单的教程,介绍如何bypass大多数防病毒软件。我们将结合使用众所周知的内存注入和入口点的思路。我们的目标不是从头创建FUD的有效载荷,而是采取一种基于现有程序进行处理的方法。
快速说明:我仍然认为,使用最新的防病毒软件是一个好习惯,只是不要永远都相信它。
在本教程中,我选择了.NET开源有效负载,因此该恶意软件的包装程序也将在.NET中进行编码,以简化该过程(尽管完全有可能在此处使用不同的语言)。
尽管我们使用的是C#,但提出的概念与语言无关,你可以在另一种语言中实现它。
要求
对于本教程,您将需要:
- .NET有效负载 [将被执行的恶意软件]
- Visual Studio [编码和构建我们的项目]
- ILmerge [将多个.NET程序集合并为一个]
- win10虚拟机 [测试我们的项目]
如前所述,我们将使用内存注入来加载恶意可执行文件,但是在加载之前,我们需要一个入口点。为了欺骗防病毒软件并逃避沙盒行为分析,由于大多数沙盒不允许键盘/鼠标交互,因此我们设定单击鼠标将触发注入,没有人可以预测这种情况的发生时间。我们还将对恶意软件进行加密,之后将其加载到内存中,以避免AV静态检测。
步骤1:加密有效负载
选择恶意软件后,我们需要将其转换为base64,以便将其作为字符串存储在包装中。该包装程序通常称为存根(stub),因为它是负责解密和执行恶意软件的代码。转换为base64之后,我们将使用标准AES加密对其进行加密,然后再次将其转换为字符串。
转换的简要说明:
- 转换您的二进制文件(字节-> base64)
- 加密(base64->字节)
- 再次转换(字节-> base64)
打开Visual Studio并创建一个项目,该项目将负责加密二进制文件,生成并运行它。下图说明了该过程。

此代码将加密的有效负载保存在文件中,稍后将使用。
第2步:检测鼠标单击
现在,我们需要创建一个程序来全局检测鼠标单击,并在检测到单击时执行我们的二进制文件。最简单的方法是使用名为MouseKeyHook的NuGet包。我们希望全局检测点击,但是包装器的执行应该是隐身的,因此我们将强制控制台应用程序作为Windows窗体应用程序运行。
这样,我们可以在不向用户显示任何输出窗口的情况下运行程序。
- 在VisualStudio中创建控制台应用程序(.NET Framework 4)并使其作为Windows窗体应用程序运行

- 转到解决方案- >管理NuGet包并安装MouseKeyHook和ILmerge。
- 为鼠标左/右键单击创建一个挂钩

单击后执行load方法,并触发解密和执行过程,下面将对其进行详细说明。
步骤3:解密并注入
设置好鼠标单击的钩子之后(我们将使用任何鼠标左/右单击,但是可以修改为其他任意操作),我们需要执行与第一个操作相反的操作来解密恶意软件。base64字符串是第一步中创建并保存在文件中的字符串(我们的编码加密恶意软件)。
反向过程:
- 转换(base64->字节)
- 解密(字节-> base64)
- 再次转换:(base64->字节)

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

注意:除了这种方法外,我们还可以使用原始有效负载创建一个Pastebin,并在我们要加载它时发出Web请求。因为我们不需要硬编码的有效负载,所以这将使最终的二进制文件更小。但是,这会增加被认定为恶意程序的可能性。
最后的想法
虽然我们能够逃避防病毒并执行有效负载,实现了目标,但是此解决方案远非完整,可以通过几种不同的方式进行改进,例如:
- 为有效负载添加开机启动(进程注入,Windows注册表,启动键等)
- 删除.Net依赖项
- 添加压缩/混淆
- 缩小有效载荷大小
- 选择随机字符串和变量名称
- 更改使用的加密
- …
另一个有趣的想法是用一种更底层的语言(例如C或C ++)实现此机制,使其更隐蔽。
成人之美
兄弟 这博客很有特色啊。
qwqdanchun@成人之美
老哥你的网站也是呀,哈哈
helloleader
楼上的网站的确更有特色, 哈哈哈哈
sorryfu
绝了 这个博客主题