Module refinery.lib.scripts.js.deobfuscation
JavaScript AST deobfuscation transforms.
Expand source code Browse git
"""
JavaScript AST deobfuscation transforms.
"""
from __future__ import annotations
from refinery.lib.scripts.js.deobfuscation.antidbg import JsRemoveReDoS
from refinery.lib.scripts.js.deobfuscation.cff import JsControlFlowUnflattening
from refinery.lib.scripts.js.deobfuscation.constants import JsConstantInlining
from refinery.lib.scripts.js.deobfuscation.deadcode import JsDeadCodeElimination
from refinery.lib.scripts.js.deobfuscation.objectfold import JsObjectFold
from refinery.lib.scripts.js.deobfuscation.simplify import JsSimplifications
from refinery.lib.scripts.js.deobfuscation.stringarray import JsStringArrayResolver
from refinery.lib.scripts.js.deobfuscation.wrappers import JsCallWrapperInliner
from refinery.lib.scripts.js.model import JsScript
from refinery.lib.scripts.pipeline import DeobfuscationPipeline, TransformerGroup
_pipeline = DeobfuscationPipeline(
groups=[
TransformerGroup(
'normalize',
JsSimplifications,
JsDeadCodeElimination,
),
TransformerGroup(
'fold',
JsCallWrapperInliner,
JsObjectFold,
JsControlFlowUnflattening,
JsConstantInlining,
),
TransformerGroup(
'resolve',
JsStringArrayResolver,
),
TransformerGroup(
'cleanup',
JsRemoveReDoS,
),
],
dependencies={
'fold': {'normalize'},
'resolve': {'fold'},
'cleanup': {'fold'},
},
invalidators={
'normalize': {'fold', 'resolve'},
'fold': {'normalize', 'resolve'},
'resolve': {'normalize', 'fold'},
'cleanup': set(),
},
)
def deobfuscate(ast: JsScript, 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.js.deobfuscation.antidbg-
Remove the self-defending ReDoS anti-tamper pattern injected by javascript-obfuscator …
refinery.lib.scripts.js.deobfuscation.cff-
Recover sequential code from control-flow-flattened dispatchers. The obfuscator replaces a sequence of statements with a dispatcher loop: …
refinery.lib.scripts.js.deobfuscation.constants-
Inline constant variable references in JavaScript.
refinery.lib.scripts.js.deobfuscation.deadcode-
Eliminate dead code branches guarded by constant conditions …
refinery.lib.scripts.js.deobfuscation.helpers-
Shared utilities for JavaScript deobfuscation transforms.
refinery.lib.scripts.js.deobfuscation.objectfold-
Inline properties of locally-defined constant object literals …
refinery.lib.scripts.js.deobfuscation.simplify-
JavaScript syntax normalization transforms.
refinery.lib.scripts.js.deobfuscation.stringarray-
Resolve the string-array rotation pattern produced by popular JavaScript obfuscators …
refinery.lib.scripts.js.deobfuscation.wrappers-
Inline trivial function call wrappers …
Functions
def deobfuscate(ast, max_steps=0)-
Apply all available deobfuscators to the input.
Expand source code Browse git
def deobfuscate(ast: JsScript, max_steps: int = 0) -> int: """ Apply all available deobfuscators to the input. """ return _pipeline.run(ast, max_steps=max_steps)