免杀学习日记----使用Invoke-obfuscation免杀powershell脚本

引言

在网络安全领域,免杀技术是一种能够绕过防病毒软件检测的技术,它可以让攻击者隐藏自己的恶意代码,从而实现对目标系统的渗透和控制。免杀技术的发展和应用,对于网络攻防双方都具有重要的意义。

在本文中,我将介绍一款名为Invoke-Obfuscation的工具,它是一款专门用于混淆PowerShell脚本的工具,可以有效地降低脚本被防病毒软件检测到的概率。我之所以选择这款工具进行学习,是因为它具有以下几个优点:

- 它是开源的,可以在GitHub上免费下载和使用。

- 它提供了多种混淆选项和策略,可以根据不同的需求进行灵活的组合和调整。

- 它支持对整个脚本或者部分代码进行混淆,也可以对已经混淆过的脚本进行再次混淆。

- 它可以在内存中执行混淆后的脚本,不需要在磁盘上留下任何痕迹。

Invoke-Obfuscation 简介

Invoke-Obfuscation是由Daniel Bohannon开发的一款PowerShell脚本混淆工具,它可以对PowerShell脚本进行多层次、多维度的变形和隐匿,从而使得防病毒软件难以识别出脚本中的恶意行为。

Invoke-Obfuscation的主要功能和特点如下:

- 它可以对PowerShell脚本中的命令、参数、变量、字符串、注释等元素进行混淆,包括替换、拼接、编码、压缩、加密等操作。

- 它可以对PowerShell脚本中的语法结构进行混淆,包括修改分隔符、添加空白符、改变换行符、使用别名、使用反引号等操作。

- 它可以对PowerShell脚本中的执行方式进行混淆,包括使用IEX、Invoke-Expression、Invoke-Command等命令来执行脚本或者代码片段。

- 它可以对PowerShell脚本中的载荷进行混淆,包括使用Base64、Hex、ASCII等编码方式来隐藏恶意代码。

PowerShell脚本混淆的基本原理是利用PowerShell语言的灵活性和多样性,通过改变脚本的表现形式而不改变其功能和逻辑,从而使得防病毒软件无法通过静态分析或者动态监测来识别出脚本中的恶意行为。

安装和配置

要使用Invoke-Obfuscation工具,首先需要下载并安装它。下载地址为:https://github.com/danielbohannon/Invoke-Obfuscation

下载后,解压缩文件,并将Invoke-Obfuscation文件夹复制到PowerShell模块路径下。PowerShell模块路径通常为:C:\Users\用户名\Documents\WindowsPowerShell\Modules

然后,在PowerShell控制台中输入以下命令来加载Invoke-Obfuscation模块:

Import-Module Invoke-Obfuscation

如果加载成功,将会出现以下提示:Invoke-Obfuscation v1.0 - by Daniel Bohannon (@danielhbohannon)

接下来,输入以下命令来启动Invoke-Obfuscation的交互式界面:

Invoke-Obfuscation

如果启动成功,将会出现以下界面:

至此,Invoke-Obfuscation工具已经安装和配置完成,可以开始使用它进行PowerShell脚本的混淆了。

使用Invoke-Obfuscation实现免杀

要使用Invoke-Obfuscation工具进行PowerShell脚本的混淆,需要遵循以下几个步骤:

  1. 输入或者导入要混淆的PowerShell脚本。

  2. 选择要使用的混淆选项和策略。

  3. 查看和测试混淆后的PowerShell脚本。

  4. 导出或者执行混淆后的PowerShell脚本。

下面,我将以一个简单的PowerShell脚本为例,来演示如何使用Invoke-Obfuscation工具进行混淆。这个脚本的功能是弹出一个消息框,显示“Hello, world!”的内容。脚本的代码如下:

Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.MessageBox]::Show("Hello, world!")

输入或者导入要混淆的PowerShell脚本

在Invoke-Obfuscation的交互式界面中,有两种方式可以输入或者导入要混淆的PowerShell脚本:

  • 直接在控制台中输入或者粘贴脚本代码,并以空行结束。

  • 使用SCRIPT命令来指定一个包含脚本代码的文件路径,并按回车键。

在这里,我选择第一种方式,直接在控制台中输入上面的脚本代码,并以空行结束。输入后,将会出现以下提示:

[>] Please enter a command: Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.MessageBox]::Show("Hello, world!")

[+] Script input successful.

[>] Please enter a command:

这表示脚本已经成功输入到工具中,可以开始进行混淆了。

选择要使用的混淆选项和策略

在Invoke-Obfuscation工具中,提供了多种混淆选项和策略,可以根据不同的需求进行灵活的组合和调整。这些选项和策略分为以下几类:

  • TOKEN: 对PowerShell脚本中的命令、参数、变量、字符串、注释等元素进行替换、拼接、编码、压缩、加密等操作。

  • STRING: 对PowerShell脚本中的字符串进行编码、压缩、加密等操作。

  • ENCODING: 对整个PowerShell脚本进行Base64、Hex、ASCII等编码操作。

  • COMPRESS: 对整个PowerShell脚本进行Gzip压缩操作。

  • LAUNCHER: 对PowerShell脚本中的执行方式进行修改,使用IEX、Invoke-Expression、Invoke-Command等命令来执行脚本或者代码片段。

每一类选项和策略都有多个子选项和子策略,可以通过输入相应的编号来选择和切换。例如,要选择TOKEN类别下的ALL子选项,可以输入1.1。要选择STRING类别下的REVERSE子策略,可以输入2.3

要查看当前可用的选项和策略,可以输入MENU命令。要查看当前已经选择的选项和策略,可以输入SHOW OPTIONS命令。

在这里,我将随机选择一些混淆选项和策略,来对上面输入的脚本进行混淆。具体的选择如下:

  • TOKEN\ALL\1: 对所有元素进行随机替换。

  • STRING\REVERSE\1: 对字符串进行反转。

  • ENCODING\HEX\1: 对整个脚本进行Hex编码。

  • LAUNCHER\IEX\1: 使用IEX命令来执行脚本。

要查看混淆后的脚本代码,可以输入OUTPUT SCRIPT命令

defender绕过

将混淆后的脚本上传到win10发现defender没有杀掉

  • 执行脚本msf监听上线

  • shangxian.png