Module refinery.lib.scripts.ps1.deobfuscation
PowerShell AST deobfuscation transforms.
Expand source code Browse git
"""
PowerShell AST deobfuscation transforms.
"""
from refinery.lib.scripts.pipeline import DeobfuscationPipeline, TransformerGroup
from refinery.lib.scripts.ps1.deobfuscation.aliases import Ps1AliasInlining
from refinery.lib.scripts.ps1.deobfuscation.constants import Ps1ConstantInlining, Ps1NullVariableInlining
from refinery.lib.scripts.ps1.deobfuscation.deadcode import Ps1DeadCodeElimination
from refinery.lib.scripts.ps1.deobfuscation.emulator import Ps1ForEachPipeline, Ps1FunctionEvaluator
from refinery.lib.scripts.ps1.deobfuscation.expandable import Ps1ExpandableStringHoist
from refinery.lib.scripts.ps1.deobfuscation.folding import Ps1ConstantFolding
from refinery.lib.scripts.ps1.deobfuscation.iexinline import Ps1IexInlining
from refinery.lib.scripts.ps1.deobfuscation.securestring import Ps1SecureStringDecryptor
from refinery.lib.scripts.ps1.deobfuscation.simplify import Ps1Simplifications
from refinery.lib.scripts.ps1.deobfuscation.typecast import Ps1TypeCasts
from refinery.lib.scripts.ps1.deobfuscation.typenames import Ps1TypeSystemSimplifications
from refinery.lib.scripts.ps1.deobfuscation.wildcards import Ps1WildcardResolution
from refinery.lib.scripts.ps1.model import Ps1Script
_pipeline = DeobfuscationPipeline(
groups=[
TransformerGroup(
'normalize',
Ps1Simplifications,
Ps1AliasInlining,
Ps1WildcardResolution,
Ps1TypeSystemSimplifications,
),
TransformerGroup(
'fold',
Ps1ConstantFolding,
Ps1DeadCodeElimination,
Ps1ConstantInlining,
Ps1ExpandableStringHoist,
Ps1TypeCasts,
Ps1NullVariableInlining,
),
TransformerGroup(
'evaluate',
Ps1ForEachPipeline,
Ps1FunctionEvaluator,
),
TransformerGroup(
'finalize',
Ps1SecureStringDecryptor,
Ps1IexInlining,
),
],
dependencies={
'fold': {'normalize'},
'evaluate': {'fold'},
'finalize': {'evaluate'},
},
invalidates={
'normalize': set(),
'fold': {'normalize', 'evaluate', 'finalize'},
},
)
def deobfuscate(ast: Ps1Script, max_steps: int = 0) -> int:
"""
Apply all available deobfuscators to the input.
"""
Ps1NullVariableInlining.enabled = False
steps = _pipeline.run(ast, max_steps=max_steps)
Ps1NullVariableInlining.enabled = True
steps += _pipeline.run(ast, max_steps=max_steps)
return steps
Sub-modules
refinery.lib.scripts.ps1.deobfuscation.aliases-
Inline command aliases defined via Set-Alias / New-Alias.
refinery.lib.scripts.ps1.deobfuscation.constants-
Inline constant variable references in PowerShell scripts.
refinery.lib.scripts.ps1.deobfuscation.deadcode-
Eliminate dead code from PowerShell scripts after constant folding.
refinery.lib.scripts.ps1.deobfuscation.emulator-
Evaluate user-defined PowerShell functions called with constant arguments.
refinery.lib.scripts.ps1.deobfuscation.expandable-
Hoist void subexpressions out of expandable strings, replacing the expandable string with a plain string literal of its text parts. The hoisted …
refinery.lib.scripts.ps1.deobfuscation.folding-
PowerShell constant folding transforms.
refinery.lib.scripts.ps1.deobfuscation.iexinline-
Inline constant IEX (Invoke-Expression) and [scriptblock]::Create() calls by parsing the string argument …
refinery.lib.scripts.ps1.deobfuscation.securestring-
PowerShell SecureString decryption transformer.
refinery.lib.scripts.ps1.deobfuscation.simplify-
PowerShell syntax normalization transforms.
refinery.lib.scripts.ps1.deobfuscation.typecast-
PowerShell type cast simplification transforms.
refinery.lib.scripts.ps1.deobfuscation.typenames-
.NET type member database for PowerShell deobfuscation …
refinery.lib.scripts.ps1.deobfuscation.wildcards-
Resolve wildcard-based obfuscation patterns in PowerShell scripts …
Functions
def deobfuscate(ast, max_steps=0)-
Apply all available deobfuscators to the input.
Expand source code Browse git
def deobfuscate(ast: Ps1Script, max_steps: int = 0) -> int: """ Apply all available deobfuscators to the input. """ Ps1NullVariableInlining.enabled = False steps = _pipeline.run(ast, max_steps=max_steps) Ps1NullVariableInlining.enabled = True steps += _pipeline.run(ast, max_steps=max_steps) return steps