From 1abcbc5ac3e7f8e6194bce790f4bd3419296881b Mon Sep 17 00:00:00 2001 From: echo094 <20028238+echo094@users.noreply.github.com> Date: Sat, 1 Feb 2025 16:42:01 +0800 Subject: [PATCH] fix bug --- src/visitor/jsconfuser/global-concealing.js | 17 ++++++++++++++--- src/visitor/jsconfuser/stack.js | 2 +- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/visitor/jsconfuser/global-concealing.js b/src/visitor/jsconfuser/global-concealing.js index b0078cd..c8d6f16 100644 --- a/src/visitor/jsconfuser/global-concealing.js +++ b/src/visitor/jsconfuser/global-concealing.js @@ -56,7 +56,13 @@ function getGlobalConcealingNames(glo_fn_path) { const obj = {} glo_fn_path.traverse({ SwitchCase(path) { - const key = parseInt(generator(path.node.test).code) + const code = generator(path.node.test).code + const key = parseInt(code) + if (Number.isNaN(key)) { + console.error(`[GlobalConcealing] concealed key: ${code}`) + obj['invalid'] = true + return + } let consequent = path.node.consequent[0] if (t.isReturnStatement(consequent)) { obj[key] = consequent.argument.property.value @@ -113,15 +119,20 @@ const deGlobalConcealing = { const glo_vars = getGlobalConcealingNames(obj.glo_fn_path) console.log(`[GlobalConcealing] globalFn: ${obj.glo_fn_name}`) let binding = obj.glo_fn_path.parentPath.scope.getBinding(obj.glo_fn_name) + let remain = false for (const ref of binding.referencePaths) { const repl_path = ref.parentPath if (ref.key !== 'callee' || !repl_path.isCallExpression()) { continue } const key = parseInt(generator(repl_path.node.arguments[0]).code) - repl_path.replaceWith(t.identifier(glo_vars[key])) + if (glo_vars[key]) { + repl_path.replaceWith(t.identifier(glo_vars[key])) + } else { + remain = true + } } - if (safeDeleteNode(obj.glo_fn_name, obj.glo_fn_path)) { + if (!remain && safeDeleteNode(obj.glo_fn_name, obj.glo_fn_path)) { obj.tmp_path.remove() } }, diff --git a/src/visitor/jsconfuser/stack.js b/src/visitor/jsconfuser/stack.js index 298e8f7..33b09d2 100644 --- a/src/visitor/jsconfuser/stack.js +++ b/src/visitor/jsconfuser/stack.js @@ -293,7 +293,7 @@ function processStackParam(path, len) { while (changed) { checkStackInvalid(path, invalid) if (!checkChangeValid(invalid, used)) { - path.replaceWith(parse(orig_code)) + path.replaceWith(parse(orig_code).program.body[0]) used = {} } changed = tryStackReplace(path, len, invalid, used)