diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/DeobfuscationLevel.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/DeobfuscationLevel.java index d55ccde43..734b8c74f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/DeobfuscationLevel.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/DeobfuscationLevel.java @@ -16,6 +16,19 @@ public enum DeobfuscationLevel { return level; } + public static DeobfuscationLevel getByLevel(int level) { + switch (level) { + case 1: + return LEVEL_REMOVE_DEAD_CODE; + case 2: + return LEVEL_REMOVE_TRAPS; + case 3: + return LEVEL_RESTORE_CONTROL_FLOW; + } + + return null; + } + DeobfuscationLevel(int level) { this.level = level; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/helpers/CancellableWorker.java b/libsrc/ffdec_lib/src/com/jpexs/helpers/CancellableWorker.java index abc518be1..abde1897e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/helpers/CancellableWorker.java +++ b/libsrc/ffdec_lib/src/com/jpexs/helpers/CancellableWorker.java @@ -73,6 +73,7 @@ public abstract class CancellableWorker implements RunnableFuture { } public final void execute() { + onStart(); THREAD_POOL.execute(this); } diff --git a/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/src/com/jpexs/decompiler/flash/gui/MainPanel.java index 921981203..5b4f39b51 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/MainPanel.java @@ -2295,6 +2295,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se public void deobfuscate() { DeobfuscationDialog deobfuscationDialog = new DeobfuscationDialog(); + DeobfuscationLevel level = DeobfuscationLevel.getByLevel(deobfuscationDialog.codeProcessingLevel.getValue()); if (deobfuscationDialog.showDialog() == AppDialog.OK_OPTION) { new CancellableWorker() { @Override @@ -2302,16 +2303,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se try { ABCPanel abcPanel = getABCPanel(); if (deobfuscationDialog.processAllCheckbox.isSelected()) { - for (ABCContainerTag tag : abcPanel.getAbcList()) { - if (deobfuscationDialog.codeProcessingLevel.getValue() == DeobfuscationLevel.LEVEL_REMOVE_DEAD_CODE.getLevel()) { - tag.getABC().removeDeadCode(); - } else if (deobfuscationDialog.codeProcessingLevel.getValue() == DeobfuscationLevel.LEVEL_REMOVE_TRAPS.getLevel()) { - tag.getABC().removeTraps(); - } else if (deobfuscationDialog.codeProcessingLevel.getValue() == DeobfuscationLevel.LEVEL_RESTORE_CONTROL_FLOW.getLevel()) { - tag.getABC().removeTraps(); - tag.getABC().restoreControlFlow(); - } - } + SWF swf = abcPanel.getSwf(); + swf.deobfuscate(level); } else { int bi = abcPanel.detailPanel.methodTraitPanel.methodCodePanel.getBodyIndex(); DecompiledEditorPane decompiledTextArea = abcPanel.decompiledTextArea;