GoAround
一个能够生成AMSI绕过并使用三种不同混淆方法自动混淆PowerShell脚本的工具。GoAround采用MIT许可证。更多信息请参阅LICENSE文件。
免责声明
本工具旨在帮助渗透测试人员在日常后渗透任务中使用,并作为研究项目开发。任何恶意使用本工具或在未经授权的情况下对第三方系统使用本工具的行为,均由用户自行承担责任。
安装
只需从Github下载代码,然后在Windows命令行或PowerShell控制台中运行该工具即可。
用户指南
使用GoAround可以完成两个不同的任务:
- 生成包含AMSI绕过所需代码的PowerShell脚本。生成的代码可以自动混淆。
- 使用不同技术自动混淆PowerShell脚本。
用户可以在两种不同的AMSI绕过和三种不同的混淆技术中进行选择。
使用方法
要使用本工具,需要在机器上安装Python。以下路径应添加到PATH环境变量中:
- C:\Users{Usuario}\AppData\Local\Programs\Python\Python39
- C:\Users{Usuario}\AppData\Local\Programs\Python\Python39\Scripts
完成此操作后,您将能够通过以下两种方式之一从命令行运行该工具:
- 在工具文件夹内:python goaround.py {选项}
- 在其他文件夹中:python {GoAround文件夹的完整路径} {选项}
命令结构如下:
python goaround.py -m [模式] (-t [类型]) (-f [混淆类型]) (-i [输入文件]) (-o [输出文件])
其中方括号内的所有选项都是可选的。这些选项的取值含义为:
- -m 或 --mode:唯一必需的选项。指示工具必须运行的操作模式。更多信息请参见操作模式部分。
- -t 或 --type:当模式为bypass时,指示将要使用的绕过类型;当模式为obfuscate时,指示混淆方法的类型。请参阅绕过类型部分了解不同的绕过类型,以及混淆方法部分了解可用的混淆方法。
- -f 或 --obfuscation:当操作模式为bypass时,此选项用于选择绕过的混淆类型。此选项在obfuscate模式下不可用,此时应使用"-t"或"--type"。要了解不同的混淆方法,请阅读混淆方法部分。
- -i 或 --input:仅在obfuscate模式下使用。允许用户选择要混淆的文件。
- -o 或 --output:此选项允许用户选择生成的脚本的名称。名称必须以".ps1"结尾。默认情况下,输出文件名为"output.ps1"。
此外,还支持以下选项,并且必须单独运行(不带任何其他选项):
- -h 或 --help:向用户显示工具的使用指南。
- -v 或 --version:显示工具的版本号。
操作模式
有两种操作模式:bypass和obfuscate,通过选项"-m"或"--mode"进行选择:
- bypass:指示工具以绕过模式运行。在这种情况下,将生成一个包含AMSI绕过代码的PS1文件。
- obfuscate:指示工具以混淆模式运行。在这种情况下,工具将混淆用户通过选项"-i"或"--input"提供的文件(在该操作模式下为必选项)。将生成一个包含混淆后代码的PS1文件。混淆功能仅适用于PowerShell脚本。
绕过类型
在bypass模式(-m bypass)下,可以通过选项"-t"或"--type"指定绕过类型。
目前支持的绕过类型如下:
- reflection:Matt Graeber的反射绕过。
- scan_buffer_laine:Paul Laîné的AmsiScanBuffer补丁绕过。
如果未指定类型,默认使用reflection绕过。
混淆方法
目前,该工具支持三种不同的PowerShell混淆技术。
在bypass模式下选择混淆类型时,使用选项"-f"或"--obfuscation"(若不指定,则绕过不会被混淆)。在obfuscate模式下选择混淆类型时,使用选项"-t"或"--type"(若不指定,默认使用串联技术)。
混淆类型的名称如下:
- mayus:使用随机大小写技术更改PowerShell代码。不会影响代码中存在的字符串。此方法会更改文件的哈希值。
- concatenation:obfuscate模式下默认使用的方法。将代码中存在的字符串替换为多个较小子字符串的串联。字符串会被随机分割,因此同一输入文件每次生成的代码都会不同。
- insertion:将代码中存在的字符串替换为字符串与变量的组合。例如,如果代码中存在字符串"amsiutils",它可能被替换为"am$var_tfm0",其中var_tfm0 = "siutils"。字符串会被随机分割,因此同一输入文件每次生成的代码都会不同。变量的命名格式为"var_tfm{数字}",因此,如果原始代码中存在具有此类名称的变量,应在混淆阶段之前更改它们。
示例
以下是一些使用示例:
显示帮助菜单
python main.py -h
python main.py --help
显示工具版本号
python main.py -v
python main.py --version
生成使用变量插入混淆的反射绕过
python main.py -m bypass -t reflection -f insertion
生成Paul Laîné的绕过并更改输出文件名
python main.py -m bypass -t scan_buffer_laine -o "output_name.ps1"
使用字符串串联方法混淆文件
python main.py -m obfuscate -t concatenation -i "input_required.ps1"