From 731d7bcb73f83495087798d655350f1900350e0c Mon Sep 17 00:00:00 2001 From: de4dot Date: Fri, 10 Aug 2012 17:00:55 +0200 Subject: [PATCH] Support Confuser 1.7 r74021 constants encrypter (dynamic mode) --- .../Confuser/ConstantsDecrypterBase.cs | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/de4dot.code/deobfuscators/Confuser/ConstantsDecrypterBase.cs b/de4dot.code/deobfuscators/Confuser/ConstantsDecrypterBase.cs index b575f449..a835fc26 100644 --- a/de4dot.code/deobfuscators/Confuser/ConstantsDecrypterBase.cs +++ b/de4dot.code/deobfuscators/Confuser/ConstantsDecrypterBase.cs @@ -331,19 +331,27 @@ namespace de4dot.code.deobfuscators.Confuser { static int getDynamicEndIndex_v17_r73740(MethodDefinition method, VariableDefinition local) { var instrs = method.Body.Instructions; for (int i = 0; i < instrs.Count - 5; i++) { - var stloc = instrs[i]; + int index = i; + var stloc = instrs[index++]; if (!DotNetUtils.isStloc(stloc) || DotNetUtils.getLocalVar(method.Body.Variables, stloc) != local) continue; - if (!DotNetUtils.isLdloc(instrs[i + 1])) + if (!DotNetUtils.isLdloc(instrs[index++])) continue; - if (!DotNetUtils.isLdloc(instrs[i + 2])) + if (instrs[index].OpCode.Code == Code.Call) { + if (i + 7 >= instrs.Count) + continue; + index++; + if (!DotNetUtils.isLdloc(instrs[index++])) + continue; + } + if (!DotNetUtils.isLdloc(instrs[index++])) continue; - var ldloc = instrs[i + 3]; + var ldloc = instrs[index++]; if (!DotNetUtils.isLdloc(ldloc) || DotNetUtils.getLocalVar(method.Body.Variables, ldloc) != local) continue; - if (instrs[i + 4].OpCode.Code != Code.Conv_U1) + if (instrs[index++].OpCode.Code != Code.Conv_U1) continue; - if (instrs[i + 5].OpCode.Code != Code.Stelem_I1) + if (instrs[index++].OpCode.Code != Code.Stelem_I1) continue; return i;