From 70e421ec06a6df3e022d37cc6fb550aa909f77cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sun, 24 Jan 2021 21:15:19 +0100 Subject: [PATCH] deobfuscation fix try..return --- .../decompiler/flash/abc/AVM2LocalData.java | 11 +++++ .../decompiler/flash/abc/avm2/AVM2Code.java | 2 +- .../flash/abc/avm2/graph/AVM2Graph.java | 32 ++++++++++--- .../instructions/InstructionDefinition.java | 2 +- .../localregs/GetLocalTypeIns.java | 2 +- .../localregs/SetLocalTypeIns.java | 4 ++ .../decompiler/graph/model/DuplicateItem.java | 6 +-- .../flashdevelop/bin/flashdevelop.swf | Bin 19276 -> 19652 bytes .../testdata/flashdevelop/src/Main.as | 1 + .../flashdevelop/src/tests/TestTryReturn2.as | 42 ++++++++++++++++++ 10 files changed, 90 insertions(+), 12 deletions(-) create mode 100644 libsrc/ffdec_lib/testdata/flashdevelop/src/tests/TestTryReturn2.as diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/AVM2LocalData.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/AVM2LocalData.java index aaebe4a1a..879c317d7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/AVM2LocalData.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/AVM2LocalData.java @@ -29,6 +29,7 @@ import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.ScopeStack; import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -81,6 +82,16 @@ public class AVM2LocalData extends BaseLocalData { } + public Set getSetLocalUsages(int setLocalPos) { + if (setLocalPosToGetLocalPos == null) { + return new HashSet<>(); + } + if (!setLocalPosToGetLocalPos.containsKey(setLocalPos)) { + return new HashSet<>(); + } + return setLocalPosToGetLocalPos.get(setLocalPos); + } + public AVM2LocalData(AVM2LocalData localData) { isStatic = localData.isStatic; classIndex = localData.classIndex; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java index c95d45579..62eb0cc44 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java @@ -1602,7 +1602,7 @@ public class AVM2Code implements Cloneable { }*/ if ((ins.definition instanceof SetLocalTypeIns) && (ip + 1 <= end)) { // set_local_x,get_local_x.. no other local_x get AVM2Instruction insAfter = code.get(ip + 1); - Set usages = setLocalPosToGetLocalPos.get(ip); + Set usages = setLocalPosToGetLocalPos.containsKey(ip) ? setLocalPosToGetLocalPos.get(ip) : new HashSet<>(); if (usages.size() == 1 && (usages.iterator().next().equals(ip + 1)) && (insAfter.definition instanceof GetLocalTypeIns) && (((GetLocalTypeIns) insAfter.definition).getRegisterId(insAfter) == ((SetLocalTypeIns) ins.definition).getRegisterId(ins))) { ip += 2; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java index 5325b622d..b4883c4d4 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java @@ -1055,7 +1055,7 @@ public class AVM2Graph extends Graph { SetLocalAVM2Item setLocal = (SetLocalAVM2Item) output.get(i); if (setLocal.regIndex == objRegIndex) { int setLocalIp = aLocalData.code.adr2pos(setLocal.getSrc().getAddress()); - Set objUsages = new HashSet<>(aLocalData.setLocalPosToGetLocalPos.get(setLocalIp)); + Set objUsages = new HashSet<>(aLocalData.getSetLocalUsages(setLocalIp)); int hnUsageIp = aLocalData.code.adr2pos(hn.getSrc().getAddress()); objUsages.remove(hnUsageIp); @@ -1097,7 +1097,7 @@ public class AVM2Graph extends Graph { SetLocalAVM2Item setLocal = (SetLocalAVM2Item) output.get(i); if (setLocal.regIndex == indexRegIndex) { int setLocalIp = aLocalData.code.adr2pos(setLocal.getSrc().getAddress()); - Set objUsages = new HashSet<>(aLocalData.setLocalPosToGetLocalPos.get(setLocalIp)); + Set objUsages = new HashSet<>(aLocalData.getSetLocalUsages(setLocalIp)); int hnUsageIp = aLocalData.code.adr2pos(hn.getSrc().getAddress()); objUsages.remove(hnUsageIp); @@ -1191,7 +1191,29 @@ public class AVM2Graph extends Graph { continue; } } - if (usages.size() <= 1) { + //if (usages.size() <= 1) + { + if (i + 1 < list.size()) { + if ((list.get(i + 1) instanceof ReturnValueAVM2Item) + && (list.get(i + 1).value instanceof LocalRegAVM2Item) + && (((LocalRegAVM2Item) list.get(i + 1).value).regIndex == ri.regIndex)) { + ReturnValueAVM2Item r = (ReturnValueAVM2Item) list.get(i + 1); + r.value = ri.value; + list.remove(i); + i--; + continue; + } + if ((list.get(i + 1) instanceof ThrowAVM2Item) + && (list.get(i + 1).value instanceof LocalRegAVM2Item) + && (((LocalRegAVM2Item) list.get(i + 1).value).regIndex == ri.regIndex)) { + ThrowAVM2Item t = (ThrowAVM2Item) list.get(i + 2); + t.value = ri.value; + list.remove(i); + i--; + continue; + } + } + if (i + 2 < list.size()) { if ((list.get(i + 1) instanceof IntegerValueAVM2Item) && (list.get(i + 2) instanceof ReturnValueAVM2Item) && (list.get(i + 2).value instanceof LocalRegAVM2Item) @@ -1211,7 +1233,7 @@ public class AVM2Graph extends Graph { list.remove(i + 1); list.remove(i); i--; - //continue; + continue; } } else if (i + 1 < list.size() && usages.isEmpty()) { if (list.get(i + 1) instanceof IntegerValueAVM2Item) { @@ -1304,7 +1326,7 @@ public class AVM2Graph extends Graph { AVM2LocalData avm2LocalData = (AVM2LocalData) localData; SetLocalAVM2Item setLocal = (SetLocalAVM2Item) output.get(output.size() - 1); int setLocalIp = InstructionDefinition.getItemIp(avm2LocalData, setLocal);; - Set allUsages = new HashSet<>(avm2LocalData.setLocalPosToGetLocalPos.get(setLocalIp)); + Set allUsages = new HashSet<>(avm2LocalData.getSetLocalUsages(setLocalIp)); for (GraphTargetItem otherSide : otherSides.values()) { if (otherSide instanceof LocalRegAVM2Item) { LocalRegAVM2Item otherLog = (LocalRegAVM2Item) otherSide; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/InstructionDefinition.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/InstructionDefinition.java index 723f40d07..49d79b4b8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/InstructionDefinition.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/InstructionDefinition.java @@ -328,7 +328,7 @@ public abstract class InstructionDefinition implements Serializable { SetLocalAVM2Item setLocal = (SetLocalAVM2Item) output.get(i); if (setLocal.regIndex == reg.regIndex) { int setLocalIp = getItemIp(localData, setLocal); - Set usages = localData.setLocalPosToGetLocalPos.get(setLocalIp); + Set usages = localData.getSetLocalUsages(setLocalIp); int usageIp = getItemIp(localData, reg); if (usages.size() == 1 && usages.iterator().next().equals(usageIp)) { output.remove(i); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/GetLocalTypeIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/GetLocalTypeIns.java index f9f6abba9..7cba66b9f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/GetLocalTypeIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/GetLocalTypeIns.java @@ -96,7 +96,7 @@ public abstract class GetLocalTypeIns extends InstructionDefinition { int setLocalIp = getItemIp(localData, setLocal); int getLocalIp = localData.code.adr2pos(ins.getAddress()); - Set usages = localData.setLocalPosToGetLocalPos.get(setLocalIp); + Set usages = localData.getSetLocalUsages(setLocalIp); if (usages.size() == 1 && usages.iterator().next().equals(getLocalIp)) { output.remove(output.size() - 1); output.remove(output.size() - 1); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/SetLocalTypeIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/SetLocalTypeIns.java index 8514ba51b..78ddfe132 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/SetLocalTypeIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/SetLocalTypeIns.java @@ -37,6 +37,7 @@ import com.jpexs.decompiler.flash.abc.types.MethodBody; import com.jpexs.decompiler.graph.DottedChain; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.TranslateStack; +import com.jpexs.decompiler.graph.model.DuplicateItem; import com.jpexs.decompiler.graph.model.PopItem; import java.util.HashMap; import java.util.List; @@ -128,6 +129,9 @@ public abstract class SetLocalTypeIns extends InstructionDefinition implements S } } + if (localData.getSetLocalUsages(localData.code.adr2pos(ins.getAddress())).isEmpty() && (value instanceof DuplicateItem)) { + return; + } GraphTargetItem result = new SetLocalAVM2Item(ins, localData.lineStartInstruction, regId, value); output.add(result); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/DuplicateItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/DuplicateItem.java index 81be012b7..3843e4885 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/DuplicateItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/DuplicateItem.java @@ -49,10 +49,8 @@ public class DuplicateItem extends GraphTargetItem implements SimpleValue { @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { - if (!Configuration.displayDupInstructions.get()) { - if (((value instanceof SimpleValue) && (((SimpleValue) value).isSimpleValue())) || !Configuration.displayDupInstructions.get()) { - return value.appendTry(writer, localData); - } + if (((value instanceof SimpleValue) && (((SimpleValue) value).isSimpleValue())) || !Configuration.displayDupInstructions.get()) { + return value.appendTry(writer, localData); } writer.append("§§dup("); value.appendTry(writer, localData); diff --git a/libsrc/ffdec_lib/testdata/flashdevelop/bin/flashdevelop.swf b/libsrc/ffdec_lib/testdata/flashdevelop/bin/flashdevelop.swf index 95d9333cdd5fc7cb9f02085eea883dfaeca996e7..fb526fa78d9a13a670bfbf964ccd5d5f696a7771 100644 GIT binary patch literal 19652 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 diff --git a/libsrc/ffdec_lib/testdata/flashdevelop/src/Main.as b/libsrc/ffdec_lib/testdata/flashdevelop/src/Main.as index 0d65a2786..ba8a5c618 100644 --- a/libsrc/ffdec_lib/testdata/flashdevelop/src/Main.as +++ b/libsrc/ffdec_lib/testdata/flashdevelop/src/Main.as @@ -76,6 +76,7 @@ package TestTernarOperator; TestTry; TestTryReturn; + TestTryReturn2; TestVector; TestVector2; TestWhileAnd; diff --git a/libsrc/ffdec_lib/testdata/flashdevelop/src/tests/TestTryReturn2.as b/libsrc/ffdec_lib/testdata/flashdevelop/src/tests/TestTryReturn2.as new file mode 100644 index 000000000..708a22ba9 --- /dev/null +++ b/libsrc/ffdec_lib/testdata/flashdevelop/src/tests/TestTryReturn2.as @@ -0,0 +1,42 @@ +package tests +{ + public class TestTryReturn2 + { + + public function run() : String + { + trace("before"); + var a:Boolean = true; + var b:Boolean = false; + var c:Boolean = true; + var d:Boolean = false; + try + { + if (a) + { + return "A"; + } + if (b) + { + return "B"; + } + } + catch (e:Error) + { + if (d){ + return "D"; + } + } + finally + { + if (c) { + return "C"; + } + } + trace("after"); + return "X"; + } + + } + +} \ No newline at end of file