Skip to content

Commit ab23c74

Browse files
committed
Fixed SSA issue
1 parent 85e98a5 commit ab23c74

File tree

9 files changed

+50
-16
lines changed

9 files changed

+50
-16
lines changed

dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obf/SkidMethodRenderer.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,6 @@ public void render(final SkidSession skidSession) {
5050
projectPass.pass(skidSession);
5151
}
5252

53-
54-
5553
final List<ClassNode> nodeList = Streams.stream(skidSession.getClassSource().iterate())
5654
.parallel()
5755
.filter(e -> skidSession.getClassSource().isApplicationClass(e.getName()))
@@ -83,7 +81,7 @@ public void render(final SkidSession skidSession) {
8381
method = skidMethodMap.get(node);
8482
break;
8583
}
86-
if (node.node.instructions.size() > 6000) {
84+
if (node.node.instructions.size() > 3000) {
8785
bar.step();
8886

8987
for (MethodNode methodNode1 : hierarchy) {
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package dev.skidfuscator.obf.creator;
2+
3+
import org.mapleir.context.IRCache;
4+
5+
public class SkidCache extends IRCache {
6+
public SkidCache() {
7+
super(SkidFlowGraphBuilder::build);
8+
}
9+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package dev.skidfuscator.obf.creator;
2+
3+
import org.mapleir.asm.MethodNode;
4+
import org.mapleir.ir.algorithms.BoissinotDestructor;
5+
import org.mapleir.ir.algorithms.LocalsReallocator;
6+
import org.mapleir.ir.cfg.ControlFlowGraph;
7+
import org.mapleir.ir.cfg.builder.ControlFlowGraphBuilder;
8+
9+
public class SkidFlowGraphBuilder extends ControlFlowGraphBuilder {
10+
public SkidFlowGraphBuilder(MethodNode method) {
11+
super(method);
12+
}
13+
14+
public SkidFlowGraphBuilder(MethodNode method, boolean optimise) {
15+
super(method, optimise);
16+
}
17+
18+
public static ControlFlowGraph build(MethodNode method) {
19+
ControlFlowGraphBuilder builder = new ControlFlowGraphBuilder(method);
20+
final ControlFlowGraph cfg = builder.buildImpl();
21+
BoissinotDestructor.leaveSSA(cfg);
22+
LocalsReallocator.realloc(cfg);
23+
24+
return cfg;
25+
}
26+
}

dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obf/init/DefaultInitHandler.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ public SkidSession init(final File jar, final File output) {
5353

5454
System.out.println("Evaluating classes...");
5555

56-
5756
for(Map.Entry<MethodNode, ControlFlowGraph> e : session.getCxt().getIRCache().entrySet()) {
5857
MethodNode mn = e.getKey();
5958
ControlFlowGraph cfg = e.getValue();
@@ -62,17 +61,6 @@ public SkidSession init(final File jar, final File output) {
6261
} catch (Exception ex){
6362
ex.printStackTrace();
6463
}
65-
66-
67-
SreedharDestructor.leaveSSA(cfg);
68-
LocalsReallocator.realloc(cfg);
69-
70-
try {
71-
cfg.verify();
72-
} catch (Exception ex){
73-
ex.printStackTrace();
74-
}
75-
7664
}
7765

7866
final EntryPoint entryPoint = new MapleEntryPoint();

dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obf/init/SkidSession.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dev.skidfuscator.obf.init;
22

33
import com.google.common.collect.Streams;
4+
import dev.skidfuscator.obf.creator.SkidCache;
45
import dev.skidfuscator.obf.utils.Counter;
56
import dev.skidfuscator.obf.yggdrasil.method.DefaultMethodInvokerResolver;
67
import dev.skidfuscator.obf.yggdrasil.method.MethodInvokerResolver;
@@ -53,7 +54,7 @@ public SkidSession(ApplicationClassSource classSource, AbstractJarDownloader<Cla
5354
this.classSource = classSource;
5455
this.jarDownloader = jarDownloader;
5556
this.outputFile = outputFile;
56-
this.irFactory = new IRCache(ControlFlowGraphBuilder::build);
57+
this.irFactory = new SkidCache();
5758
this.cxt = new BasicAnalysisContext.BasicContextBuilder()
5859
.setApplication(classSource)
5960
.setInvocationResolver(new DefaultInvocationResolver(classSource))

dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obf/transform/impl/flow/ConditionMutatorPass.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ public void pass(SkidSession session, SkidMethod method) {
4747
if (parent.size() == 0)
4848
continue;
4949

50+
if (methodNode.getNode().node.instructions.size() > 10000)
51+
continue;
52+
5053
final Stmt stmt = parent.get(parent.size() - 1);
5154

5255
if (!(stmt instanceof ConditionalJumpStmt)) {

dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obf/transform/impl/flow/FakeJumpFlowPass.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ public void pass(SkidSession session, SkidMethod method) {
2525
if (methodNode.getNode().isAbstract() || methodNode.isInit())
2626
continue;
2727

28+
if (methodNode.getNode().node.instructions.size() > 10000)
29+
continue;
30+
2831
final ControlFlowGraph cfg = session.getCxt().getIRCache().get(methodNode.getNode());
2932

3033
if (cfg == null)

dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obf/transform/impl/flow/FakeTryCatchFlowPass.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ public void pass(SkidSession session, SkidMethod method) {
4444
if (methodNode.getNode().isAbstract())
4545
continue;
4646

47+
if (methodNode.getNode().node.instructions.size() > 10000)
48+
continue;
49+
4750
final ControlFlowGraph cfg = session.getCxt().getIRCache().get(methodNode.getNode());
4851

4952
if (cfg == null)

dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obf/transform/impl/flow/NumberMutatorPass.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ public void pass(SkidSession session, SkidMethod method) {
3030
if (methodNode.getNode().isAbstract() || methodNode.isInit())
3131
continue;
3232

33+
if (methodNode.getNode().node.instructions.size() > 10000)
34+
continue;
35+
3336
final ControlFlowGraph cfg = session.getCxt().getIRCache().get(methodNode.getNode());
3437

3538
if (cfg == null)

0 commit comments

Comments
 (0)