Skip to content

Commit f45d172

Browse files
committed
workaround very yes yes :D
1 parent 98d9271 commit f45d172

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

deobfuscator-transformers/src/main/java/uwu/narumi/deobfuscator/core/other/impl/universal/number/InlineConstantValuesTransformer.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package uwu.narumi.deobfuscator.core.other.impl.universal.number;
22

33
import org.objectweb.asm.tree.AbstractInsnNode;
4+
import org.objectweb.asm.tree.LabelNode;
45
import org.objectweb.asm.tree.analysis.OriginalSourceValue;
56
import uwu.narumi.deobfuscator.api.asm.InsnContext;
67
import uwu.narumi.deobfuscator.api.asm.MethodContext;
@@ -17,6 +18,16 @@ public class InlineConstantValuesTransformer extends Transformer {
1718
@Override
1819
protected void transform() throws Exception {
1920
scopedClasses().parallelStream().forEach(classWrapper -> classWrapper.methods().parallelStream().forEach(methodNode -> {
21+
// Very good workaround for inlining constants, yes yes :D
22+
// By placing labels before each instruction, we ensure that the analyzer
23+
// does not merge frames and we get more accurate stack values
24+
Set<LabelNode> tempLabels = new HashSet<>();
25+
for (AbstractInsnNode insn : methodNode.instructions.toArray()) {
26+
LabelNode labelNode = new LabelNode();
27+
tempLabels.add(labelNode);
28+
methodNode.instructions.insert(insn, labelNode);
29+
}
30+
2031
MethodContext methodContext = MethodContext.of(classWrapper, methodNode);
2132

2233
Set<AbstractInsnNode> poppedInsns = new HashSet<>();
@@ -54,6 +65,9 @@ protected void transform() throws Exception {
5465
}
5566
}
5667
}
68+
69+
// Remove temp labels
70+
tempLabels.forEach(labelNode -> methodNode.instructions.remove(labelNode));
5771
}));
5872
}
5973
}

testData/results/custom-classes/qprotect/sample3/fastcode/IlllIIlIIlllIIIl.dec

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ public class IlllIIlIIlllIIIl {
107107
char[] var3 = IlIIlIlIIIIIlll[var2].toCharArray();
108108
int var14 = var3[0];
109109

110-
int var4 = switch ((~var14 | 0xFF) - ~var14) {
110+
short var4 = switch ((~var14 | 0xFF) - ~var14) {
111111
case 0 -> 55;
112112
case 1 -> 95;
113113
case 2 -> 0;
@@ -363,7 +363,7 @@ public class IlllIIlIIlllIIIl {
363363
case 252 -> 232;
364364
case 253 -> 181;
365365
case 254 -> 134;
366-
default -> 29907 - 29696;
366+
default -> 211;
367367
};
368368
int var15 = (short)var1;
369369
int var5 = (~var15 | 0xFF) - ~var15 + ~var4 + 1;

0 commit comments

Comments
 (0)