Module refinery.lib.scripts.vba.deobfuscation
VBA AST deobfuscation transforms.
Expand source code Browse git
"""
VBA AST deobfuscation transforms.
"""
from __future__ import annotations
from refinery.lib.scripts.pipeline import DeobfuscationPipeline, TransformerGroup
from refinery.lib.scripts.vba.deobfuscation.constants import VbaConstantInlining
from refinery.lib.scripts.vba.deobfuscation.deadcode import VbaDeadVariableRemoval
from refinery.lib.scripts.vba.deobfuscation.emulator import VbaFunctionEvaluator
from refinery.lib.scripts.vba.deobfuscation.simplify import VbaSimplifications
from refinery.lib.scripts.vba.model import VbaModule
_pipeline = DeobfuscationPipeline(
groups=[
TransformerGroup(
'fold',
VbaSimplifications,
VbaConstantInlining,
VbaDeadVariableRemoval,
),
TransformerGroup(
'evaluate',
VbaFunctionEvaluator,
),
],
dependencies={
'evaluate': {'fold'},
},
)
def deobfuscate(ast: VbaModule, max_steps: int = 0) -> int:
"""
Apply all available deobfuscators to the input.
"""
return _pipeline.run(ast, max_steps=max_steps)
Sub-modules
refinery.lib.scripts.vba.deobfuscation.builtins-
VBA built-in numeric constants …
refinery.lib.scripts.vba.deobfuscation.constants-
VBA constant inlining: substitutes single-assignment constant variableswith their literal values.
refinery.lib.scripts.vba.deobfuscation.deadcode-
VBA dead variable removal: removes assignments to variables that are never read, provided the right-hand side has no side effects.
refinery.lib.scripts.vba.deobfuscation.emulator-
Evaluate user-defined VBA functions called with constant arguments.
refinery.lib.scripts.vba.deobfuscation.simplify-
VBA expression simplification and constant folding transforms.
Functions
def deobfuscate(ast, max_steps=0)-
Apply all available deobfuscators to the input.
Expand source code Browse git
def deobfuscate(ast: VbaModule, max_steps: int = 0) -> int: """ Apply all available deobfuscators to the input. """ return _pipeline.run(ast, max_steps=max_steps)