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

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

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

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

工具目录

分类

查看所有分类
Loading categories
Metamorph — 一款用 C 语言编写的 Windows 命令行工具,用于创建和配置持久的 Windows 事件跟踪 (ETW) AutoLogger 会话。 | Kitploit
工具/GitHubGitHub/synacktiv/metamorph
防御工具持久化机制信息收集后渗透利用恶意软件分析事件响应
GitHubsynacktiv/metamorph

Metamorph

一款用 C 语言编写的 Windows 命令行工具,用于创建和配置持久的 Windows 事件跟踪 (ETW) AutoLogger 会话。

查看仓库
82个月前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Metamorph

简介

该工具是一款用 C 语言编写的 Windows 命令行实用程序,用于创建和配置持久化的 Windows 事件跟踪(ETW)AutoLogger 会话。AutoLogger 会在系统启动时自动开始跟踪特定的 ETW 提供程序,这使得它们对于捕获启动早期发生的事件或进行持续监控场景非常有用。

该工具允许通过命令行参数选择与已知 EDR 相关的预定义 ETW 提供程序列表,并将其包含在 AutoLogger 会话中。如果同一提供程序包含在多个选定的列表中,它会合并配置,确保使用最高的日志级别,并适当组合关键字标志,以根据所选列表最大化事件覆盖范围。

功能特性

  • 通过注册表配置(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WMI\Autologger\Metamorph)创建持久化的 ETW AutoLogger 会话。
  • 在系统启动时自动启动。
  • 允许选择预定义的提供程序列表(-Defender、-Crowdstrike、-MDE、-Sentinelone、-Cortex)。
  • 可选择启用所有列表中的所有提供程序(-All)。
  • 可选择启用嘈杂的提供程序(其中一些会被自动删除,以避免在几秒钟内填满磁盘):(-noisy)
  • 合并重复的提供程序配置:
    • 对于某个提供程序,在所有重复项中保留指定的最高 Level。
    • 使用所有重复项(无论级别如何)中的 MatchAnyKeyword 标志进行按位或运算,以确保最广泛的关键字覆盖范围。
    • 使用提供最高级别的配置条目中的 MatchAllKeyword。
  • 可配置的会话名称和日志文件路径(在代码中定义为常量)。

编译

你需要一个 C 编译器,例如 Visual Studio 自带的那个。

  1. 打开 Metamorph.sln 文件
  2. 选择 "Release" 和你的目标架构(x64/x86)
  3. 编译并尽情使用

该项目没有任何非标准导入,因此使用 Cl 编译应该不会遇到太多麻烦。

使用指南

重要提示: 该工具会修改 Windows 注册表(HKEY_LOCAL_MACHINE),因此需要管理员权限才能正确运行。

  • 以管理员身份打开命令提示符或 PowerShell 窗口,然后在该窗口中运行可执行文件。
root@kitploit:~
.\Metamorph.exe <options>

# 仅启用 Defender 中的提供程序
.\Metamorph.exe -Defender

# 启用 Defender 和 MDE 中的提供程序,合并重复项
.\Metamorph.exe -Defender -MDE

# 启用所有引擎中的所有提供程序,合并重复项
.\Metamorph.exe -All

# 启用某个提供程序,同时也启用嘈杂的提供程序,毕竟为什么不填满磁盘空间呢?
.\Metamorph.exe -All -noisy

初始化之后,必须重启系统才能启动新注册的提供程序。

手动清理

要清理此提供程序,需要:

  1. 打开 regedit.exe
  2. 导航至(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WMI\Autologger\Metamorph)
  3. 右键单击并删除上述注册表项。
  4. 重启

利用结果

ETW 提供对运行时事件的深度可见性。这可用于检测潜在的可疑活动,这些活动可能表明存在恶意软件活动或混淆技术。 安装后,这些提供程序应提供与“被克隆的”EDR 相同级别的“事件日志”遥测数据。 这应当有助于研究内部工具可能留下的 IOC。

系统重启且相关应用程序运行完毕后,.etl 文件(例如,Metamorph.etl)将包含捕获的事件。

生成的文件(C:\Windows\System32\LogFiles\WMI\Metamorph.etl.00x)可以被多种公共工具摄取,例如:

  • 事件查看器本身
  • Perfview
  • 在此处插入你偏好的 ETW 工具

注意:Metamorph 使用循环日志文件,以避免在重启后意外丢失数据,但某些工具要求文件以 .etl 结尾,因此你需要在使用前移除后缀。

此外,还可以简单地将 .etl 文件转换为 CSV 文件,以便进行快速 grep:

root@kitploit:~
tracerpt MyKeywordMergedETWLogger.etl -o logdump.csv -of CSV

结合 PowerShell 与通过 Assembly.Load 加载的无文件 .NET 的实践示例

通过 Assembly.Load() 执行无文件二进制

假设我们有以下使用 Assembly.Load 加载文件的 PowerShell 程序:

root@kitploit:~
[Reflection.Assembly]:https://raw.githubusercontent.com/synacktiv/metamorph/HEAD/:Load(%5BSystem.Convert%5D::FromBase64String(%22TVqQAAMAAAAEAAAA/8AALgAAAAAAAAAQAAAAAA%5B...%5DAAAAAAAAAAAAA%22))


#Récupération du handle sur le process cible
    $ProcessDesiredAccess = 0x00000400
    $InheritHandle = 0
    $ProcessId = $PID
    $hProcess = [api32.run]::OpenProcess($ProcessDesiredAccess, $InheritHandle, $ProcessId)
    if($hProcess -eq 0){ Write-Output "OpenProcess Error" }

#Récupération du handle sur le token du process cible
    $hToken = [IntPtr]::Zero
    $TokenDesiredAccess = 0x00000006
    $Success = [api32.run]::OpenProcessToken($hProcess, $TokenDesiredAccess, [ref]$hToken)
    if(-not $Success){ Write-Output "OpenProcessToken Error" }
    
#Duplication du token
    $DesiredAccess = 0x10000000
    $SecurityAttribute = New-Object api32.run+_SECURITY_ATTRIBUTES
    $SecurityAttribute.lpSecurityDescriptor = [IntPtr]::Zero
    $SecurityAttribute.bInheritHandle = $true
    $ImpersonationLevel = 3
    $TokenType = 1
    $hDuplicatedToken = [IntPtr]::Zero
    $Success = [api32.run]::DuplicateTokenEx($hToken, $DesiredAccess,[ref]$SecurityAttribute, $ImpersonationLevel, $TokenType,[ref]$hDuplicatedToken)
    if(-not $Success) { Write-Debug "DuplicateTokenEx Error" }

#Creation du cmd avec le token dupliqué
    $LogonFlags = 0
    $ApplicationName = "cmd.exe"
    $CommandLine = "/K whoami /all"
    $CreationFlags = 0x00000010
    $Environnement = [IntPtr]::Zero
    $CurrentDirectory = "c:\windows\system32"
    $StartUpinformation = New-Object api32.run+STARTUPINFOA                                    
    $ProcessInformation = New-Object api32.run+_PROCESS_INFORMATION
    $Success = [api32.run]::CreateProcessWithTokenW($hDuplicatedToken, $LogonFlags,$ApplicationName, $CommandLine, $CreationFlags, $Environnement, $CurrentDirectory, [ref]$StartUpinformation,[ref]$ProcessInformation)
    if(-not $Success) { Write-Debug "CreateProcessWithTokenW Error" }

该脚本基本上执行了一种类似于 impersonate.exe 工具可能执行的攻击。

  1. 以管理员权限打开 PowerShell 提示符
  2. 运行 poc.ps1
  3. 等待几分钟,以确保所有 ETW 缓冲区都已刷新到 .etl 文件中

分析

  1. 以管理员权限打开 Perfview
  2. 通过仪表板加载你的 .etl 文件,然后双击事件以访问所有提供程序的数据

  1. 浏览提供程序列表,根据你所执行的操作调查数据

  1. 选择相关的提供程序进行检查(此处为 Microsoft-Windows-Powershell/Exécuterunecommandedistante)

  1. 检查 Microsoft-Windows-DotNETRuntime/Loader/AssemblyLoad

因此,最终 EDR 和分析人员有机会基于已知二进制的 AssemblyName 进行签名分析(例如:"Rubeus"),此外,他们还可能在事后分析中检索到 PowerShell 脚本(包括注释)。

参与贡献

如果你觉得这个工具很有用,你可以按照 CONTRIBUTING.md 中的说明添加你自己的(或其他人的)解决方案。我会尽量定期更新它,但由于它完全取决于在渗透测试中遇到的解决方案,如果你希望你的更改对所有人可用,请随时提交 PR。

下载工具