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

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

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

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

工具目录

分类

查看所有分类
Loading categories
Revoke-Obfuscation — PowerShell 混淆检测框架 | Kitploit
工具/GitHubGitHub/danielbohannon/revoke-obfuscation
防御工具静态分析代码分析恶意软件分析威胁情报论文与研究学习与教育
GitHubdanielbohannon/revoke-obfuscation

Revoke-Obfuscation

PowerShell 混淆检测框架

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

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Revoke-Obfuscation v1.0

Revoke-Obfuscation 演示

Revoke-Obfuscation 截图

介绍

Revoke-Obfuscation 是一个 PowerShell v3.0+ 兼容的 PowerShell 混淆检测框架。

作者

Daniel Bohannon (@danielhbohannon) Lee Holmes (@Lee_Homes)

研究

博客文章:https://www.fireeye.com/blog/threat-research/2017/07/revoke-obfuscation-powershell.html

白皮书:https://www.fireeye.com/content/dam/fireeye-www/blog/pdfs/revoke-obfuscation-report.pdf

背景

2016 年秋季和 2017 年春季,Daniel Bohannon (@danielhbohannon) 发布了 Invoke-Obfuscation 和 Invoke-CradleCrafter,这两个开源的 PowerShell 混淆框架。这些研究及框架的目标是凸显纯粹基于签名的方法在检测攻击者使用 PowerShell 时的局限性。传递给防御者的核心信息是:除了已知的可疑语法外,还应着重检测混淆指标。

然而,Invoke-Obfuscation 和 Invoke-CradleCrafter 中极端的随机化程度,加上 PowerShell 脚本块日志中未被反混淆的令牌层混淆选项,使得防御者寻求一种新的、可扩展的方法来通用检测已知和未知的混淆技术。

在 Invoke-Obfuscation 发布几周后,Lee Holmes (@Lee_Homes) 撰写了一篇博客文章,标题为 更多检测混淆 PowerShell,其中他重点介绍了统计分析技术,用于检测高度混淆脚本中的异常特征,尤其是 Invoke-Obfuscation 生成的脚本。

自那次交流后,Daniel 和 Lee 成了好朋友,并分享了许多共同的兴趣 / 痴迷——即,对优质咖啡的热爱,以及追求创建彻底检测混淆 PowerShell 的新方法。

两位蓝队成员在研究及概念验证代码上花费的时间,粗略估算相当于几千杯 Chemex 手冲咖啡,假设以 4 分钟为目标冲泡时间(至少另一位咖啡爱好者会领会这个“手冲”双关语)。

Revoke-Obfuscation 是这些努力的最终手工成果。

目的

Revoke-Obfuscation 是一个开源的 PowerShell v3.0+ 框架,用于大规模检测混淆的 PowerShell 命令和脚本。它依赖 PowerShell 的 AST(抽象语法树)快速提取任意输入 PowerShell 脚本中的数千个特征,并将该特征向量与若干预定义的加权特征向量之一进行比较,这些加权特征向量是通过对 40.8 万多个 PowerShell 脚本的语料库进行自动学习计算得出的。完整语料库可从 https://aka.ms/PowerShellCorpus 下载。您可以在仓库的“DataScience”子目录中找到这项工作中数据科学方面的详细信息。

由于 Revoke-Obfuscation 依赖特征提取和比较,而非纯粹的 IOC 或正则表达式匹配,因此它在识别未知混淆技术时更为稳健,即使攻击者试图通过在混淆内容中填充未混淆的脚本内容来压制其混淆,以推翻像字符频率分析这样的基本检查。

Revoke-Obfuscation 可以轻松在 100-300 毫秒内测量大多数输入的 PowerShell 脚本。这种性能水平允许一个组织每小时至少测量 1.2 万个 PowerShell 脚本的混淆情况,而无需在 SIEM 中索引详细的 PowerShell 脚本块日志。

最后,Revoke-Obfuscation 支持便捷的白名单功能,并能摄取 PowerShell 操作事件日志记录,重新组装分布在多个脚本块 EID 4104 记录中的脚本块。它可以轻松成为摄取环境 PowerShell 操作事件日志、重新组装并去重这些日志中所有脚本、然后识别出值得手动检查的混淆 PowerShell 脚本的一站式工具。

安装

Revoke-Obfuscation 的源代码托管在 Github,您可以从此仓库(https://github.com/danielbohannon/Revoke-Obfuscation)下载、分叉和审查。请通过与此项目关联的 Github bug 跟踪器报告问题或功能请求。

安装(从 Github):

root@kitploit:~
Import-Module .\Revoke-Obfuscation.psd1

也可以直接从 PowerShell Gallery 安装源代码,通过以下命令:

安装(从 PowerShell Gallery):

root@kitploit:~
Install-Module Revoke-Obfuscation
Import-Module Revoke-Obfuscation

用法

Revoke-Obfuscation 将提供一个详细教程,以及一些其他有趣的小惊喜。但如果您不喜欢这些玩笑,可以直接运行 Get-Help Measure-RvoObfuscation 查看用法语法,或者继续阅读。

本框架中有两个主要函数:

  • Get-RvoScriptBlock — 从 EID 4104 脚本块日志中重新组装脚本
  • Measure-RvoObfuscation — 测量输入的脚本并返回混淆得分

如果您需要从 PowerShell 操作日志中重新组装并提取脚本块日志,那么 Get-RvoScriptBlock 是首选函数。它会自动仅返回唯一的脚本块,并排除某些被认为非恶意的默认脚本块值。可以通过 -Deep 开关覆盖此行为。

  • Get-RvoScriptBlock -Path 'C:\Windows\System32\Winevt\Logs\Microsoft-Windows-PowerShell%4Operational.evtx' -Verbose
  • Get-ChildItem .\Demo\demo.evtx | Get-RvoScriptBlock -Verbose
  • Get-WinEvent -LogName Microsoft-Windows-PowerShell/Operational | Get-RvoScriptBlock -Verbose

Get-RvoScriptBlock 还支持 MIR/HX 审计结果,以及通过 Matt Graeber (@mattifestation) 的 CimSweep 项目(https://github.com/PowerShellMafia/CimSweep)获取的 PowerShell 操作日志。对于 CimSweep,需要做一个小型的注册表调整,以欺骗 WMI 查询非经典事件日志。详细信息可在 Get-RvoScriptBlock 的 NOTES 部分找到。

  • Get-ChildItem C:\MirOrHxAuditFiles\*_w32eventlogs.xml | Get-RvoScriptBlock -Verbose
  • Get-CSEventLogEntry -LogName Microsoft-Windows-PowerShell/Operational | Get-RvoScriptBlock

针对 demo.evtx 中测试数据的完整示例如下:

root@kitploit:~
$obfResults = Get-WinEvent -Path .\Demo\demo.evtx | Get-RvoScriptBlock | Measure-RvoObfuscation -OutputToDisk -Verbose

针对本地和远程托管的测试脚本的完整示例如下:

  • Measure-RvoObfuscation -Url 'http://bit.ly/DBOdemo1' -Verbose -OutputToDisk
  • Get-Content .\Demo\DBOdemo*.ps1 | Measure-RvoObfuscation -Verbose -OutputToDisk
  • Get-ChildItem .\Demo\DBOdemo*.ps1 | Measure-RvoObfuscation -Verbose -OutputToDisk

-OutputToDisk 开关会自动将所有混淆脚本输出到 .\Results\Obfuscated\。无论如何,所有结果都将以 PSCustomObjects 形式返回,包含脚本内容以及元数据,如混淆得分、测量时间、白名单结果、所有提取的脚本特征等。

Revoke-Obfuscation 中有两种位置提供了三种白名单选项:

  1. 磁盘上(如果存在则自动应用):
    1. .\Whitelist\Scripts_To_Whitelist\ — 放置在此目录中的所有脚本都会被哈希处理,任何相同的脚本将被加入白名单。此白名单方法优先于以下两个选项。
    2. .\Whitelist\Strings_To_Whitelist.txt — 包含此文件中任意字符串的脚本将被加入白名单。语法:规则名称,白名单字符串
    3. .\Whitelist\Regex_To_Whitelist.txt — 包含此文件中任意正则表达式的脚本将被加入白名单。语法:规则名称,白名单正则表达式
  2. Measure-RvoObfuscation 的参数(在上述白名单选项之外额外应用):
    1. -WhitelistFile — -WhitelistFile .\files\*.ps1,.\more_files\*.ps1,.\one_more_file.ps1
    2. -WhitelistContent — -WhitelistContent 'string 1 to whitelist','string 2 to whitelist'
    3. -WhitelistRegex — -WhitelistRegex 'regex 1 to whitelist','regex 2 to whitelist'

如果您有兴趣创建自己的训练数据集并为 Measure-Vector 函数生成加权向量,则可以针对标记数据集运行 ModelTrainer.cs/ModelTrainer.exe。以下命令将从所有输入脚本中提取特征向量,并聚合到一个 CSV 文件中,用于此训练阶段:

root@kitploit:~
Get-ChildItem .\*.ps1 | ForEach-Object { [PSCustomObject](Get-RvoFeatureVector -Path $_.FullName) | Export-Csv .\all_features.csv -Append }

最后,如果您在寻找一个利用 PowerShell AST(抽象语法树)创建 IOC 的平台——我们强烈推荐用于识别未混淆的恶意 PowerShell 活动——那么 PS Script Analyzer 是一个专为此类任务设计的优秀框架。

许可

Revoke-Obfuscation 根据 Apache 2.0 许可发布。

发布说明

v1.0 - 2017-07-27 Black Hat USA 及 2017-07-30 DEF CON:Revoke-Obfuscation 公开发布。

下载工具