Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/cfalta/powershellarmoury
加密/解密工具Payload生成脚本与自动化渗透测试实用工具与框架红队Archived
GitHubcfalta/powershellarmoury

PowerShellArmoury

面向安全人员的 PowerShell 武器库

查看仓库
4706932年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

[!IMPORTANT]
此仓库现已归档。虽然这是一段有趣的旅程,但我认为 PSArmoury 已不再有用。


PowerShellArmoury

PowerShell Armoury 专为渗透测试人员、红/蓝/紫队成员以及所有在参与行动时使用各种 PowerShell 工具的人设计。它允许您在一个经过混淆的文件中下载并存储您所有喜爱的 PowerShell 脚本。

您无需再手动更新 Rubeus、PowerView 等。只需创建一次配置文件,或使用工具附带的默认配置。从现在开始,在开始下一次行动前,您只需运行 "New-PSArmoury" 即可。 此外,PSArmoury 会对您的代码进行混淆,并包含一个内置的 AMSI 绕过。模块化设计使您可以轻松更改规避或混淆代码,以防检测。



总体结构

当前版本的 PSArmoury 采用模块化设计。

root@kitploit:~
 New-PSArmoury.ps1
 PSArmoury.json
 utilities
    ConvertTo-Powershell.ps1
    Invoke-Shuffle.ps1
 modules
    evasion.ps1
    obfuscation.ps1

代码分为一个主生成脚本 New-PSArmoury.ps1(您执行它)和存储在 modules 目录下独立 .ps1 文件中的规避、混淆与反混淆代码。这些独立文件由主脚本调用,应使您更容易更改特定功能(例如 AMSI 绕过)。 除了 modules 目录外,还有 utilities 目录。这里存放着在特定场景下可能有用的独立脚本。

modules 目录

modules 目录的默认路径是 .\modules,其中点代表您 shell 的当前工作目录。您可以通过 New-PSArmoury 的 -ModulesDirectory 参数更改模块目录的路径。 然而,脚本文件本身的名称在主脚本中是硬编码的,始终预期为:

  • evasion.ps1
  • obfuscation.ps1

我们来仔细看看这两个文件。

evasion.ps1

此脚本应包含您意图绕过的任何检测代码。默认情况下,它包含一个知名的 AMSI 绕过(感谢 amsi.fail)。 请注意:

  • 此处的代码在所有其他代码(例如反混淆)之前运行。
  • 绝对没有任何验证!您放在这里的所有内容都会按原样通过管道传递给 IEX。

obfuscation.ps1

此脚本应包含用于混淆和反混淆的代码。默认的 obfuscation.ps1 使用 RC2 加密。可用的示例:

  • TEMPLATE_obfuscation_RC2.ps1 --> 这是默认文件
  • TEMPLATE_obfuscation_byte_convert.ps1
  • TEMPLATE_obfuscation_empty.ps1

请注意,TEMPLATE_obfuscation_empty.ps1 实际上什么也不做,只是作为您构建自己函数的模板。

如果您想使用其中任何一个,只需将其重命名为 "obfuscation.ps1" 并删除默认文件。

如果您想创建自定义版本,在混淆方面请注意以下几点:

  • 函数名称必须始终为 "Get-PSArmouryObfuscation",并带有一个名为 "Code" 的字符串参数,因为主脚本会对您要放入 armoury 的每个项调用此函数。
  • 函数应再次将混淆后的代码作为单个字符串值返回。脚本主体代码还会额外运行一个 base64 编解码循环,以确保也能处理您放入的其他内容,但如果能直接返回字符串会更简单。
  • 相应的反混淆函数必须能理解您返回的任何内容。主脚本只负责传递结果——这里不会发生任何魔法。

在反混淆方面,务必记住以下几点:

  • 函数名称必须始终为 Get-PSArmouryDeObfuscation,无参数,因为它会遍历一个固定的全局变量。
  • 函数必须再次将反混淆后的代码作为单个字符串值返回,并准备好执行。我们只是将您返回的所有内容通过管道传递给 IEX,其余由您决定。

utilities 目录

utilities 目录包含有用的独立脚本。

  • ConvertTo-Powershell.ps1
    • 将控制台 C# 应用程序转换为 PowerShell 脚本。更多详情,请参见相应的博客文章。
  • Invoke-Shuffle.ps1
    • 一个简单的混淆脚本,将一行代码转换为多个变量,这些变量保存原始字符串的部分,然后在执行时合并并调用。

配置参考

配置文件必须是有效的 JSON,由一个包含一个或多个对象的数组组成,每个对象被解释为一个脚本源。每个对象具有以下属性:

Name(必填)

您选择的名称,用于标识此对象中包含的脚本。仅供您自己参考。

URL(必填)

获取脚本内容的位置。可以是 Web 资源的 URL(https://)、本地路径(C:\)或网络资源(\...)。URL 分别由 Net.Webclient 或 PowerShell 的 Get-Item 处理。因此,这两个默认能处理的任何格式通常都能工作。

Type(必填)

向 armoury 创建者提供脚本位置的提示。有三种有效类型:

  • GitHub
    • 将提示输入凭据,以便我们可针对 GitHub API 进行身份验证。还会尝试区分直接指向文件的“raw”URL 和指向存储库的 URL。如果 URL 指向存储库,脚本将自动搜索该存储库中的所有 PowerShell 文件并包含它们。例如 "https://github.com/cfalta/PoshRandom"
  • WebDownloadSimple
    • 表示无需身份验证即可通过 HTTP GET 下载的文件,例如 "http://mywebserver.com/file.ps1"
  • LocalFile
    • 磁盘上的文件,如 "C:\temp\test.ps1"。如果路径指向目录,则将包括所有扩展名为 ".ps1" 的文件(递归)。

FileInclusionFilter(可选)

仅对类型为 "GitHub" 的对象生效。将使用 PowerShell 的 "like" 比较运算符与完整文件名进行匹配,因此请记住您需要自己包含通配符。如果要匹配文件名的一部分,不要忘记包含星号(*)。"*.ps1" 表示所有以 ".ps1" 结尾的文件,但 ".ps1" 仅表示 ".ps1"。

您不必包含过滤器,但如果您包含,则必须使用它。空的 InclusionFilter 表示没有文件。

FileExclusionFilter(可选)

与 InclusionFilter 类似,但方向相反。排除优先级更高。

参数

更多详情请参阅内联 PowerShell 帮助(man -full New-PSArmoury)。

-Path

新 armoury 文件的路径。默认为 ".\MyArmoury.ps1"

-FromFile

直接从本地文件夹或文件加载您的 PowerShell 脚本,无需提供配置文件。

-Config

JSON 配置文件的路径。请参阅本脚本附带的示例以获取灵感。

-ModulesDirectory

模块目录的路径。默认为 ".\modules"。 如果使用了 ModulesDirectory,则不能使用 EvasionPath 和 ObfuscationPath 参数。

-EvasionPath

规避脚本的路径。如果使用了 EvasionPath 和 ObfuscationPath,则不能使用 ModulesDirectory 参数。

-ObfuscationPath

混淆脚本的路径。如果使用了 EvasionPath 和 ObfuscationPath,则不能使用 ModulesDirectory 参数。

-ValidateOnly

与 "-Config" 一起使用,让脚本验证 JSON 配置文件的基本语法而不执行它。

-GithubCredentials

将 GitHub 用户名和访问令牌作为凭据对象传递,这样脚本就不会提示输入。如果您重复测试创建 armoury,这很有用。

使用方法如下:

root@kitploit:~
$c = get-credential
New-PSArmoury -GithubCredentials $c

Github 访问令牌

您必须提供有效的 GitHub 用户名和个人访问令牌,以便脚本正确使用 GitHub API。不要使用用户名/密码,因为如果您启用了 MFA(您应该启用 MFA),这将无法工作。此外,使用基本用户名/密码访问 API 已被弃用。

按照此指南创建个人访问令牌。

请注意:访问令牌所需的唯一权限是 repo 部分中的 public_repo。

这是因为您只需要这个令牌,以便 GitHub 在您解析较大的存储库(如 PowerSploit)以包含 .ps1 文件时不会阻止我们。

示例用法

示例 1 - 全部默认

如果您想使用默认设置创建 armoury(注意:除了 base64 编码之外,不会进行任何混淆),只需运行以下命令。

root@kitploit:~
. .\New-PSArmoury.ps1
New-PSArmoury

这将在当前工作目录下创建一个名为 "MyArmoury.ps1" 的 .ps1 文件,使用:

  • 默认配置 ".\PSArmoury.json"
  • 位于 ".\modules\evasion.ps1" 的默认 AMSI 绕过
  • 分别位于 ".\modules\obfuscation.ps1" 和 ".\modules\deobfuscation.ps1" 的默认混淆/反混淆(base64)

您可以通过以下命令将 armoury 加载到当前会话中:

root@kitploit:~
cat -raw .\MyArmoury.ps1 | iex

加载 armoury 会执行以下步骤:

  • 调用规避代码
  • 将控制权交给反混淆函数,该函数会执行:
    • 遍历每个混淆项并
      • 反混淆
      • 通过管道传递给 IEX

之后,您放入 armoury 的所有 PowerShell 代码都将可用。像平常一样调用 cmdlet:

root@kitploit:~
Invoke-Rubeus -Command "kerberoast /stats"
Get-DomainGroupMember -Identity "Domain Admins" -Recurse

如果您不记得 armoury 中放了什么,只需加载它并调用清单:

root@kitploit:~
Get-PSArmoury

示例 2 - 使用 PSArmoury 附带的字节转换/JSON 格式混淆技术以及不同的配置文件

像这样使用 -EvasionPath 和 -ObfuscationPath 参数启动 New-PSArmoury:

root@kitploit:~
New-PSArmoury -Config C:\myarmouryconfig.json -ObfuscationPath .\modules\TEMPLATE_obfuscation_byte_convert.ps1 -EvasionPath .\modules\evasion.ps1

示例 3 - 从包含 PowerShell 脚本的本地文件夹创建 armoury

注意:在这种情况下,由于我们提交的是文件夹路径,文件夹中的所有 .ps1 文件都将被添加。如果我们提交的是单个文件的路径,则只处理该文件。

root@kitploit:~
New-PSArmoury -FromFile C:\myscriptfolder
下载工具