From cf30e3a38b6cee5e059714f025f9c54a76751dad Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Thu, 24 Sep 2015 10:06:03 +0200 Subject: [PATCH] action deobfuscator improved --- .../jpexs/decompiler/flash/action/ActionList.java | 14 ++++++++++---- .../action/deobfuscation/ActionDeobfuscator.java | 9 +++------ 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionList.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionList.java index 8c05bef43..7662e075e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionList.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionList.java @@ -342,17 +342,23 @@ public class ActionList extends ArrayList { return -1; } - public Action getContainer(int idx) { + public int getContainerIndex(int idx) { + Action action = get(idx); int i = idx - 1; while (i >= 0) { - if (get(i) instanceof GraphSourceItemContainer) { - return get(i); + Action a = get(i); + if (a instanceof GraphSourceItemContainer) { + List lastActions = getContainerLastActions(a); + Action lastAction = lastActions.get(lastActions.size() - 1); + if (lastAction.getAddress() >= action.getAddress()) { + return i; + } } i--; } - return null; + return -1; } public void saveToFile(String fileName) { 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 cc35b032e..ac3007fe3 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 @@ -154,12 +154,9 @@ public class ActionDeobfuscator extends ActionDeobfuscatorSimple { ActionConstantPool cPool = getConstantPool(actions); for (int i = 0; i < actions.size(); i++) { int idx = actions.size() - 1; - Action container = actions.getContainer(i); - if (container != null) { - List lastActions = actions.getContainerLastActions(container); - Action lastAction = lastActions.get(lastActions.size() - 1); - int idx2 = actions.getIndexByAddress(lastAction.getAddress()) - 1; - idx = Math.min(idx, idx2); + int containerIndex = actions.getContainerIndex(i); + if (containerIndex != -1) { + idx = Math.min(idx, containerIndex - 1); } ExecutionResult result = new ExecutionResult();