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 df4dd062e..5f9845e25 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 @@ -370,6 +370,28 @@ public class ActionDeobfuscator extends ActionDeobfuscatorSimple { break; } + if (action instanceof ActionGetVariable) { + if (stack.isEmpty()) { + return; + } + + if (stack.peek() instanceof DirectValueActionItem) { + // avoid dynamic variable names, for example: eval("item" add i); + break; + } + } + + if (action instanceof ActionSetVariable) { + if (stack.size() < 2) { + return; + } + + if (stack.peek(2) instanceof DirectValueActionItem) { + // avoid dynamic variable names, for example: set("item" add i, 1); + break; + } + } + if (action instanceof ActionPush) { ActionPush push = (ActionPush) action; boolean ok = true; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetVariable.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetVariable.java index cafbf3c10..4a53d0381 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetVariable.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetVariable.java @@ -22,6 +22,7 @@ import com.jpexs.decompiler.flash.action.model.DirectValueActionItem; import com.jpexs.decompiler.flash.action.model.EvalActionItem; import com.jpexs.decompiler.flash.action.model.GetVariableActionItem; import com.jpexs.decompiler.flash.action.model.GetVersionActionItem; +import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.decompiler.graph.model.LocalData; @@ -42,7 +43,13 @@ public class ActionGetVariable extends Action { @Override public void translate(TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem name = stack.pop(); - GraphTargetItem computedVal = variables.get(name.toStringNoQuotes(LocalData.empty)); + String nameStr; + if (name instanceof DirectValueActionItem) { + nameStr = name.toStringNoQuotes(LocalData.empty); + } else { + nameStr = EcmaScript.toString(name.getResult()); + } + GraphTargetItem computedVal = variables.get(nameStr); if (name instanceof DirectValueActionItem && ((DirectValueActionItem) name).value.equals("/:$version")) { stack.push(new GetVersionActionItem(this)); } else if (!(name instanceof DirectValueActionItem) && !(name instanceof GetVariableActionItem)) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionSetVariable.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionSetVariable.java index bfe7ca5ab..3ad7db214 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionSetVariable.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionSetVariable.java @@ -21,6 +21,7 @@ import com.jpexs.decompiler.flash.action.Action; import com.jpexs.decompiler.flash.action.StoreTypeAction; import com.jpexs.decompiler.flash.action.model.ConstantPool; import com.jpexs.decompiler.flash.action.model.DecrementActionItem; +import com.jpexs.decompiler.flash.action.model.DirectValueActionItem; import com.jpexs.decompiler.flash.action.model.GetVariableActionItem; import com.jpexs.decompiler.flash.action.model.IncrementActionItem; import com.jpexs.decompiler.flash.action.model.PostDecrementActionItem; @@ -30,6 +31,7 @@ import com.jpexs.decompiler.flash.action.model.StoreRegisterActionItem; import com.jpexs.decompiler.flash.action.model.TemporaryRegister; import com.jpexs.decompiler.flash.action.model.operations.PreDecrementActionItem; import com.jpexs.decompiler.flash.action.model.operations.PreIncrementActionItem; +import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.decompiler.graph.model.LocalData; @@ -51,7 +53,13 @@ public class ActionSetVariable extends Action implements StoreTypeAction { public void translate(TranslateStack stack, List output, HashMap regNames, HashMap variables, HashMap functions, int staticOperation, String path) { GraphTargetItem value = stack.pop().getThroughDuplicate(); GraphTargetItem name = stack.pop(); - variables.put(name.toStringNoQuotes(LocalData.empty), value); + String nameStr; + if (name instanceof DirectValueActionItem) { + nameStr = name.toStringNoQuotes(LocalData.empty); + } else { + nameStr = EcmaScript.toString(name.getResult()); + } + variables.put(nameStr, value); if (value instanceof IncrementActionItem) { GraphTargetItem obj = ((IncrementActionItem) value).object; if (!stack.isEmpty() && stack.peek().valueEquals(obj)) {