From e86c35d8249926d5e06ead631bd12cc08c2b54c6 Mon Sep 17 00:00:00 2001 From: j4k0xb <55899582+j4k0xb@users.noreply.github.com> Date: Tue, 4 Jun 2024 20:46:27 +0200 Subject: [PATCH] fix: debug-protection outdated scope (#87) --- packages/webcrack/src/ast-utils/transform.ts | 3 +-- packages/webcrack/src/deobfuscate/debug-protection.ts | 4 ++-- packages/webcrack/src/index.ts | 9 ++++----- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/packages/webcrack/src/ast-utils/transform.ts b/packages/webcrack/src/ast-utils/transform.ts index f723a337..32e56477 100644 --- a/packages/webcrack/src/ast-utils/transform.ts +++ b/packages/webcrack/src/ast-utils/transform.ts @@ -24,7 +24,6 @@ export function applyTransform( ast: Node, transform: Transform, options?: TOptions, - noScopeOverride?: boolean, ): TransformState { logger(`${transform.name}: started`); const state: TransformState = { changes: 0 }; @@ -34,7 +33,7 @@ export function applyTransform( const visitor = transform.visitor( options, ) as TraverseOptions; - visitor.noScope = noScopeOverride || !transform.scope; + visitor.noScope = !transform.scope; traverse(ast, visitor, undefined, state); } diff --git a/packages/webcrack/src/deobfuscate/debug-protection.ts b/packages/webcrack/src/deobfuscate/debug-protection.ts index 50c80712..96adc6dc 100644 --- a/packages/webcrack/src/deobfuscate/debug-protection.ts +++ b/packages/webcrack/src/deobfuscate/debug-protection.ts @@ -90,9 +90,9 @@ export default { const binding = path.scope.getBinding( debugProtectionFunctionName.current!, - )!; + ); - binding.referencePaths.forEach((ref) => { + binding?.referencePaths.forEach((ref) => { if (intervalCall.match(ref.parent)) { findParent(ref, iife)?.remove(); } diff --git a/packages/webcrack/src/index.ts b/packages/webcrack/src/index.ts index 81f79b01..694bf126 100644 --- a/packages/webcrack/src/index.ts +++ b/packages/webcrack/src/index.ts @@ -137,14 +137,14 @@ export async function webcrack( const stages = [ () => { - return (ast = parse(code, { + ast = parse(code, { sourceType: 'unambiguous', allowReturnOutsideFunction: true, plugins: ['jsx'], - })); + }); }, () => { - return applyTransforms( + applyTransforms( ast, [blockStatements, sequence, splitVariableDeclarations, varFunctions], { name: 'prepare' }, @@ -160,14 +160,13 @@ export async function webcrack( // TODO: Also merge unminify visitor (breaks selfDefending/debugProtection atm) (options.deobfuscate || options.jsx) && (() => { - return applyTransforms( + applyTransforms( ast, [ // Have to run this after unminify to properly detect it options.deobfuscate ? [selfDefending, debugProtection] : [], options.jsx ? [jsx, jsxNew] : [], ].flat(), - { noScope: true }, ); }), options.deobfuscate && (() => applyTransform(ast, mergeObjectAssignments)),