From e8e598dc6c6441feacdd4c0b71fd292a87e77b1d Mon Sep 17 00:00:00 2001 From: MultiplyByZer0 Date: Tue, 28 Feb 2017 15:49:21 -0500 Subject: [PATCH] Correct deobfuscation for labels The deobfuscator will no longer incorrectly remove the following code: pushtrue label1:pop --- .../flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimple.java | 2 ++ .../abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java | 3 +++ 2 files changed, 5 insertions(+) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimple.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimple.java index a900c705b..145c51fa3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimple.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimple.java @@ -155,9 +155,11 @@ public class AVM2DeobfuscatorSimple extends SWFDecompilerAdapter { boolean result = false; // Deliberately skip over instruction zero for(int i = 1; i < code.code.size(); i++) { + Set offsets = code.getImportantOffsets(body, true); AVM2Instruction ins1 = code.code.get(i - 1); AVM2Instruction ins2 = code.code.get(i); if(ins2.definition instanceof PopIns && + !offsets.contains(ins2.getAddress()) && (ins1.definition instanceof PushByteIns || ins1.definition instanceof PushDoubleIns || ins1.definition instanceof PushFalseIns || diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java index 1052b5e81..1e8e925d2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java @@ -105,6 +105,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; /** * @@ -210,9 +211,11 @@ public class AVM2DeobfuscatorSimpleOld extends SWFDecompilerAdapter { boolean result = false; // Deliberately skip over instruction zero for(int i = 1; i < code.code.size(); i++) { + Set offsets = code.getImportantOffsets(body, true); AVM2Instruction ins1 = code.code.get(i - 1); AVM2Instruction ins2 = code.code.get(i); if(ins2.definition instanceof PopIns && + !offsets.contains(ins2.getAddress()) && (ins1.definition instanceof PushByteIns || ins1.definition instanceof PushDoubleIns || ins1.definition instanceof PushFalseIns ||