PowerShell Pro Obfuscator 通过重命名、多态字符串和整数加密、控制流平坦化、有限状态自动机(FSA)、VM 引擎、自防御完整性检查、保护链接器和反调试探针来保护专有的 .ps1 脚本。
通过 GUI、CLI、在线工具或 API,对 PowerShell .ps1 脚本进行混淆、虚拟化与保护,支持多态字符串加密、VM 引擎、有限状态自动机变换、自完整性及反调试检查。
更多技术细节、下载和文档,请访问:
https://www.pelock.com/products/powershell-pro-obfuscator

支持 Windows 和 Linux:
提供多种编程 API:
在线混淆界面:
脚本通常以纯文本 .ps1 文件形式分发,或嵌入到模块中。这种便利性意味着任何能访问文件的人都可以读取完整逻辑、在字符串中搜寻凭据或 API 密钥,并窃取你的算法——除非你采取额外措施来隐藏意图。
PowerShell 是一种基于 .NET 的跨平台 Shell 和脚本语言。它广泛用于 Windows 和 Linux 上的自动化、配置、DevOps 流水线和端点管理。
PowerShell Pro Obfuscator 提供了许多高级混淆、虚拟化和保护策略。你可以轻松地在保护强度与体积和性能之间进行权衡。

强大的混淆PowerShell Pro Obfuscator 使用最先进的混淆策略,如多态字符串加密、整数和浮点数加密以及诱饵噪声。结果在隐藏字面量和结构的同时,保持了经过验证的运行时行为。
代码虚拟化选定的语句被提升到随机生成的 VM 引擎操作码中,带有打乱的 switch 分支、诱饵操作码和混淆的分发器循环。分析人员必须解读虚拟机,而不是阅读纯文本 PowerShell。
有限状态自动机(FSA)有限状态自动机(FSA)混淆将线性的 PowerShell 语句块重写为双状态自动机,带有不透明调度器和打乱的分发处理程序。分析人员无法从上到下阅读代码,而必须跟踪数字状态、转换表和诱饵路径来重建原始顺序。
反调试反调试保护插入多态探针,用于检测附加的调试器、PowerShell 断点、调试偏好和跟踪模式以及相关的主机信号。当检查触发时,混淆后的脚本会静默退出,而不是在交互式分析下泄露受保护的逻辑。
自完整性检查引导探针验证磁盘上脚本的形态(函数计数和完整性令牌),并在文件不再匹配混淆构建时设置篡改密钥。字符串解密器会使用该密钥,因此被修补的脚本返回的是垃圾数据而不是明文。这种自防御层提高了随意反混淆和文件编辑的成本。
保护链接器一个后期处理阶段会接入蜜罐解析器、带随机参数的虚假辅助调用以及仅在引导完成前保持活动的浅栈绊线。提取的代码片段保留了看起来在静态审查下真实的嘈杂调用面。在成功完整性检查后的正常执行保持不变。
看看这个例子——同一个脚本在混淆后变得难以一眼读懂。
function Get-Greeting {
param([string]$Name)
Write-Host "Hello World from $Name!"
}
Get-Greeting "PowerShell Pro Obfuscator"
$script:_HnJTskg = 0
$jwNTQ = 297 * 400 + 36
$x4e8bfda = [Math]::Abs($jwNTQ - 8074)
$_EvKocNn = [Math]::Max($jwNTQ, $x4e8bfda) - [Math]::Min($jwNTQ, $x4e8bfda)
[void]$_EvKocNn
$script:_jUoXkBYh = 0
function gnJjzMCN3V8P {
param([int]$slot, [int]$salt, [int]$guard)
if (-not ((Get-Variable -Name _HnJTskg -Scope Script -ErrorAction SilentlyContinue).Value)) { return '' }
@('JFE', 'm0ao', 'R8Ysw') | ForEach-Object { $_.ToUpper() } | Out-Null
if ((((($slot * 31) + $salt) -band 65535) -ne $guard)) { return '' }
$tk = (Get-Variable -Name _jUoXkBYh -Scope Script -ErrorAction SilentlyContinue).Value
$IEm39CSpDOEFp = @{ 'Ouj1' = 455; 'vjzO' = 170; 'IQNV' = 291 }
$IEm39CSpDOEFp['R5LrM'] = $IEm39CSpDOEFp['Ouj1'] + $IEm39CSpDOEFp['vjzO']
$YWxSO = ($IEm39CSpDOEFp.Values | Measure-Object -Sum).Sum
[void]$YWxSO
if ($null -eq $tk) { [long]$tk = 0 }
$v93a130f2e4 = 508
switch ($v93a130f2e4) {
524 { $_GYF7IA14Go = 'H1Vph' }
561 { $_GYF7IA14Go = 'HAWoB' }
default { $_GYF7IA14Go = $v93a130f2e4 * 2 }
}
[void]$_GYF7IA14Go
$dk = (Get-Variable -Name vb6a18ffee4 -Scope Script -ErrorAction SilentlyContinue).Value
try { $xgLN5KZyEusFo7 = [Math]::Sqrt(850) } finally { [void]$xgLN5KZyEusFo7 }
if ($null -eq $dk) { [long]$dk = 0 }
$d = @(46866, 46865)
if ((((-not 113))-and(([int](272 -ne 272) -eq 21)))-and(([Math]::Sign(-12) -eq 4))) { $w4iTzi2hooy1GW = @(711, 562, 665); $w4iTzi2hooy1GW = ($w4iTzi2hooy1GW | Measure-Object -Sum).Sum }
$r = ''
for ($s9qOSpiZzufQlVyV = 0; $s9qOSpiZzufQlVyV -lt $d.Length; $s9qOSpiZzufQlVyV++) {
[long]$v = [long]$d[$s9qOSpiZzufQlVyV]
for ($jL9gL7PEtQeIS = 2; $jL9gL7PEtQeIS -ge 0; $jL9gL7PEtQeIS--) {
for ($PsbomDHxAy = 2; $PsbomDHxAy -ge 0; $PsbomDHxAy--) {
[long]$v = [long]$v + ([long](https://github.com/pelock/powershell-pro-obfuscator-python/blob/main/230))
}
}
for ($zhH33vzxjIzegl9 = 0; $zhH33vzxjIzegl9 -ge 0; $zhH33vzxjIzegl9--) {
[long]$v = [long]$v + ([long]([int]((((((236 + (-3 * $s9qOSpiZzufQlVyV) + (3 * $zhH33vzxjIzegl9))) % 256) + 256) % 256))))
[long]$v = [long]$v -bxor ([long](https://github.com/pelock/powershell-pro-obfuscator-python/blob/main/53766))
}
[long]$v = [long]$v - ([long]($salt + $slot + $tk + $dk + 0))
if ([long]$v -ge 0 -and [long]$v -le 0xFFFF) { $r += [char][int][long]$v }
elseif ([long]$v -ge 0x10000 -and [long]$v -le 0x10FFFF) { $r += [System.Char]::ConvertFromUtf32([int][long]$v) }
}
return $r
}
and more...
如果你只有混淆后的文本而没有原始脚本副本,你还能认出原始意图吗?

引擎将 PowerShell 源码解析为 AST 树,然后应用可选择的变换:标识符重命名、控制流平坦化、有限状态自动机(FSA)、VM 虚拟化、多态字符串和整数加密、噪声和诱饵插入、自防御完整性探针、保护链接器以及反调试检查。许多技术是该产品特有的;部分思路与我们的其他保护工具共享。

当所有处理阶段完成后,引擎会生成一个新的 .ps1 文件。PowerShell 语法和宿主环境中的边界情况意味着你应该始终在目标运行时中测试输出。
不要冒险,使用 PowerShell Pro Obfuscator 来混淆、虚拟化和保护你的 PowerShell 脚本和算法。
我们在混淆技术和代码混淆器方面有着悠久的历史(参见我们的 x86 Assembly、AutoIt 和 Java 混淆器)。
我们积极修复 bug、研究并开发新的混淆策略。
你可以信赖我们在这一领域的专业知识和支持。
WebApi 接口的首选安装方式是通过 pip。
运行:
pip install powershell-pro-obfuscator
或
python3 -m pip install powershell-pro-obfuscator
然后在你的源代码中添加以下导入:
from powershellproobfuscator import PowerShellProObfuscator
安装包可在 https://pypi.org/project/powershell-pro-obfuscator/ 获取。
#!/usr/bin/env python