反汇编本机代码和托管代码。
Get-CSDisassembly使用 Capstone Engine 反汇编框架对字节数组进行反汇编。
Get-ILDisassembly对从 MethodInfo 对象传入的原始 MSIL 字节数组进行反汇编,方式类似于 Ildasm。
执行恶意软件分析时的实用工具。
New-FunctionDelegate为 X86 或 X86_64 函数提供可执行包装器。
Invoke-LoadLibrary将 DLL 加载到当前 PowerShell 进程中。
New-DllExportFunction围绕非托管导出函数创建可执行包装委托。
Get-HostsFile解析 HOSTS 文件。
New-HostsFileEntry替换或追加条目到 HOSTS 文件。
Remove-HostsFileEntry从 HOSTS 文件中删除一个或一系列条目。
Get-AssemblyStrings输出 .NET 可执行文件中的所有字符串。
Get-AssemblyResources从 .NET 程序集中提取托管资源。
Remove-AssemblySuppressIldasmAttribute从 .NET 程序集中移除 SuppressIldasmAttribute 属性。
Get-AssemblyImplementedMethods返回程序集中以 MSIL 实现的所有方法。
检查和分析进程内存
Get-ProcessStrings输出进程用户模式内存中的所有可打印字符串。
Get-VirtualMemoryInfokernel32!VirtualQueryEx 的包装器。
Get-ProcessMemoryInfo检索用户内存中每个唯一页面集的虚拟内存信息。此函数类似于 WinDbg 的 !vadump 命令。
Get-StructFromMemory将任意进程的非托管内存块中的数据封送到新分配的指定类型托管对象。
解析文件格式和内存结构。
Get-PE磁盘和内存中的 PE 解析器及进程转储器。
Find-ProcessPEs在内存中查找可移植可执行文件,无论它们是否以合法方式加载。
Get-LibSymbols显示 Windows LIB 文件中的符号信息。
Get-ObjDump显示 Windows 目标 (OBJ) 文件的信息。
获取和分析底层 Windows 操作系统信息。
Get-NtSystemInformation调用并解析 ntdll!NtQuerySystemInformation 函数输出的实用工具。可用于查询通常对用户不可见的内部操作系统信息。
Get-PEB返回进程的进程环境块 (PEB)。
Register-ProcessModuleTrace启动已加载进程模块的跟踪。
Get-ProcessModuleTrace显示自调用 Register-ProcessModuleTrace 以来加载的进程模块。
Unregister-ProcessModuleTrace停止正在运行的进程模块跟踪。
Get-SystemInfokernel32!GetSystemInfo 的包装器。
杂项辅助函数
Get-Member用于扩展内置 Get-Member cmdlet 的代理函数。它添加了 '-Private' 参数,允许您显示非公共的 .NET 成员。
Get-Strings从文件中转储 Unicode 和 Ascii 字符串。此 cmdlet 复制了 Sysinternals 中 strings.exe 的功能。
ConvertTo-String将文件的字节转换为与文件原始字节具有一一对应关系的字符串。ConvertTo-String 对于执行二进制正则表达式非常有用。
Get-Entropy计算文件或字节数组的熵。
某些 RE 函数所需的库。
CapstoneCapstone 反汇编引擎 C# 绑定。
De4dot强大的 .NET 反混淆和 .NET PE 解析库。
PSReflect用于轻松定义内存中枚举、结构和 Win32 函数的模块。
Formatters用于格式化各种 PowerShellArsenal 函数输出的 ps1xml 文件。
除非另有明确说明,否则 PowerShellArsenal 模块和所有单独的脚本均受 BSD 3-Clause 许可证 保护。
有关详细的使用信息,请参考每个独立脚本中基于注释的帮助。
要安装此模块,请将整个 PowerShellArsenal 文件夹放入您的模块目录之一。默认的 PowerShell 模块路径列在 $Env:PSModulePath 环境变量中。
默认的用户级模块路径是:"$Env:HomeDrive$Env:HOMEPATH\Documents\WindowsPowerShell\Modules" 默认的计算机级模块路径是:"$Env:windir\System32\WindowsPowerShell\v1.0\Modules"
要使用该模块,请键入 Import-Module PowerShellArsenal
要查看导入的命令,请键入 Get-Command -Module PowerShellArsenal
如果您正在运行 PowerShell v3 并且想要移除烦人的“是否确实要运行从 Internet 下载的脚本”警告,在将 PowerShellArsenal 放入模块路径后,运行以下单行命令:
$Env:PSModulePath.Split(';') | % { if ( Test-Path (Join-Path $_ PowerShellArsenal) ) {Get-ChildItem $_ -Recurse | Unblock-File} }
对于每个单独命令的帮助,请使用 Get-Help。
注意:此模块中包含的工具都设计为可独立运行。将它们包含在模块中仅仅是为了提高可移植性。
对于所有 PowerShellArsenal 的贡献者和未来贡献者,我要求您在编写脚本/模块时遵循此样式指南。
绝对避免使用 Write-Host。PowerShell 函数/cmdlet 不是命令行实用程序!包含使用 Write-Host 代码的拉取请求将不予考虑。您应该改为输出自定义对象。有关创建自定义对象的更多信息,请阅读以下文章:
如果您想要在屏幕上显示相关的调试信息,请使用 Write-Verbose。用户始终可以添加 '-Verbose'。
为每个脚本提供描述性的、基于注释的帮助。同时,请务必包含您的姓名和 BSD 3-Clause 许可证(除非存在阻止应用 BSD 许可证的例外情况)。
确保所有函数遵循正确的 PowerShell 动词-名词约定。使用 Get-Verb 列出 PowerShell 使用的默认动词。对支持的动词的例外情况将逐案考虑。
我倾向于变量名大写并尽量具有描述性。
在代码之间提供逻辑间距。缩进您的代码以使其更具可读性。
如果您发现自己重复代码,请编写一个函数。
捕获所有预期的错误并提供有意义的输出。如果某个错误应停止脚本执行,请使用 'Throw'。如果某个错误不需要停止执行,请使用 Write-Error。
如果您正在编写与 Win32 API 交互的脚本,请尽量避免使用 Add-Type 内联编译 C#。如果可能,请尝试使用 PSReflect 模块。
不要使用硬编码路径。脚本应该开箱即用。除非他们愿意,否则任何人都不必修改代码。
强烈希望与 PowerShell v2 兼容。
使用位置参数,并在有意义时将参数设为必需。例如,我希望看到类似以下内容:
[Parameter(Position = 0, Mandatory = $True)]除非是为了接收管道输入,否则不要使用任何别名。它们会使对特定别名不熟悉的人更难以阅读代码。
尽量不让命令运行太长。例如,管道是换行的自然位置。
不要过度使用内联注释。仅在代码的某些方面可能让读者感到困惑时才使用它们。
与其使用 Out-Null 来抑制不需要/不相关的输出,不如将不需要的输出保存到 $null。这样做可以略微提升性能。
在合理的情况下为参数使用默认值。理想情况下,您希望脚本在不需要任何参数的情况下也能工作。
在函数的基于注释的帮助中明确说明所有必需和可选的依赖项。所有库依赖项应位于 'Lib' 文件夹中。
如果脚本创建复杂的自定义对象,请包含一个 ps1xml 文件以正确格式化该对象的输出。ps1xml 文件存储在 Lib\Formatters 中。