From 21f5d548cfda28ee09ac4fc96c7431dd7806c579 Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Fri, 25 Sep 2015 18:20:27 +0200 Subject: [PATCH] action deobfuscator improved again --- .../flash/action/deobfuscation/ActionDeobfuscator.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/deobfuscation/ActionDeobfuscator.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/deobfuscation/ActionDeobfuscator.java index 085971a7f..249dba5ed 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/deobfuscation/ActionDeobfuscator.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/deobfuscation/ActionDeobfuscator.java @@ -160,7 +160,9 @@ public class ActionDeobfuscator extends ActionDeobfuscatorSimple { } ExecutionResult result = new ExecutionResult(); - executeActions(actions, i, idx, cPool, result, fakeFunctions); + + // allow uninitialized variables only when the code is execuded from the first line + executeActions(actions, i, idx, cPool, result, fakeFunctions, i == 0); if (result.idx != -1 && result.resultValue == null) { int newIstructionCount = 1; // jump @@ -253,7 +255,7 @@ public class ActionDeobfuscator extends ActionDeobfuscatorSimple { return cPool; } - private void executeActions(ActionList actions, int idx, int endIdx, ActionConstantPool constantPool, ExecutionResult result, Map fakeFunctions) throws InterruptedException { + private void executeActions(ActionList actions, int idx, int endIdx, ActionConstantPool constantPool, ExecutionResult result, Map fakeFunctions, boolean allowGetUninitializedVariables) throws InterruptedException { List output = new ArrayList<>(); ActionLocalData localData = new ActionLocalData(); FixItemCounterTranslateStack stack = new FixItemCounterTranslateStack(""); @@ -306,7 +308,7 @@ public class ActionDeobfuscator extends ActionDeobfuscatorSimple { } String variableName = variableNameObj.getResult().toString(); - if (!localData.variables.containsKey(variableName)) { + if (!localData.variables.containsKey(variableName) && !allowGetUninitializedVariables) { break; } } @@ -500,7 +502,7 @@ public class ActionDeobfuscator extends ActionDeobfuscatorSimple { ExecutionResult result = new ExecutionResult(); List lastActions = actions.getContainerLastActions(action); int lastActionIdx = actions.getIndexByAction(lastActions.get(0)); - executeActions(actions, i + 1, lastActionIdx, null, result, null); + executeActions(actions, i + 1, lastActionIdx, null, result, null, false); if (result.resultValue != null) { results.put(def.functionName, result.resultValue); for (int j = i; j <= lastActionIdx; j++) {