Skip to content

Commit 1e41127

Browse files
committed
feat: major rework and optimisation
1 parent ff796d5 commit 1e41127

34 files changed

Lines changed: 400 additions & 80 deletions

dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/Skidfuscator.java

Lines changed: 55 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
import dev.skidfuscator.obfuscator.transform.impl.sdk.SdkInjectorTransformer;
6363
import dev.skidfuscator.obfuscator.transform.impl.string.StringEncryptionType;
6464
import dev.skidfuscator.obfuscator.transform.impl.string.StringTransformerV2;
65+
import dev.skidfuscator.obfuscator.transform.impl.vm.VmConditionTransformer;
6566
import dev.skidfuscator.obfuscator.util.ConsoleColors;
6667
import dev.skidfuscator.obfuscator.util.MapleJarUtil;
6768
import dev.skidfuscator.obfuscator.util.MiscUtil;
@@ -84,10 +85,8 @@
8485
import org.mapleir.deob.PassGroup;
8586
import org.mapleir.deob.dataflow.LiveDataFlowAnalysisImpl;
8687
import org.mapleir.ir.cfg.ControlFlowGraph;
87-
import org.matomo.java.tracking.MatomoTracker;
88-
import org.matomo.java.tracking.TrackerConfiguration;
88+
import org.matomo.java.tracking.*;
8989
import org.objectweb.asm.Opcodes;
90-
import org.matomo.java.tracking.MatomoRequest;
9190
import org.topdank.byteengineer.commons.data.JarClassData;
9291
import org.topdank.byteengineer.commons.data.JarContents;
9392

@@ -114,6 +113,7 @@ public class Skidfuscator {
114113
public static boolean CLOUD = false;
115114

116115
public static final String VERSION = "2.1.0";
116+
public static final Double VERSION_DOUBLE = 2.1;
117117

118118
private final SkidfuscatorSession session;
119119

@@ -383,36 +383,62 @@ public void run() {
383383
}
384384

385385
private void _runAnalytics() {
386-
final MatomoTracker tracker = new MatomoTracker(
386+
final String sessionId = UUID.randomUUID().toString();
387+
try (MatomoTracker tracker = new MatomoTracker(
387388
TrackerConfiguration
388389
.builder()
389390
.apiEndpoint(URI.create("https://analytics.ghast.dev/matomo.php"))
390391
.build()
391-
);
392-
final MatomoRequest request = MatomoRequest.request()
393-
.siteId(1)
394-
.actionUrl("https://app.skidfuscator.dev")
395-
.actionName("skidfuscator/launch")
396-
.campaignName("community")
397-
.campaignKeyword("launch")
398-
.pluginJava(true)
399-
.userId(MiscUtil.getHwid())
400-
.additionalParameters(Map.of(
401-
"version", VERSION,
402-
"java_version", String.valueOf(MiscUtil.getJavaVersion()),
403-
"os", System.getProperty("os.name"),
404-
"os_version", System.getProperty("os.version"),
405-
"os_arch", System.getProperty("os.arch")
406-
))
407-
.serverTime(System.currentTimeMillis())
408-
.customAction(true)
409-
.apiVersion(VERSION)
410-
.eventAction("launch")
411-
.eventCategory("skidfuscator/community")
412-
.eventName("Java")
413-
.eventValue((double) MiscUtil.getJavaVersion())
414-
.build();
415-
tracker.sendRequestAsync(request);
392+
)) {
393+
final MatomoRequest versionRequest = MatomoRequests
394+
.event("skidfuscator", "version", VERSION, null)
395+
.userId(MiscUtil.getHwid())
396+
.siteId(1)
397+
.pluginJava(true)
398+
.campaignName("community")
399+
.campaignKeyword("launch")
400+
.sessionId(sessionId)
401+
.build();
402+
final MatomoRequest javaRequest = MatomoRequests
403+
.event("skidfuscator", "java_version", null, (double) MiscUtil.getJavaVersion())
404+
.userId(MiscUtil.getHwid())
405+
.siteId(1)
406+
.pluginJava(true)
407+
.campaignName("community")
408+
.campaignKeyword("launch")
409+
.sessionId(sessionId)
410+
.build();
411+
final MatomoRequest osRequest = MatomoRequests
412+
.event("skidfuscator", "os", System.getProperty("os.name"), null)
413+
.userId(MiscUtil.getHwid())
414+
.siteId(1)
415+
.pluginJava(true)
416+
.campaignName("community")
417+
.campaignKeyword("launch")
418+
.sessionId(sessionId)
419+
.build();
420+
final MatomoRequest osVersionRequest = MatomoRequests
421+
.event("skidfuscator", "os_version", System.getProperty("os.version"), null)
422+
.userId(MiscUtil.getHwid())
423+
.siteId(1)
424+
.pluginJava(true)
425+
.campaignName("community")
426+
.campaignKeyword("launch")
427+
.sessionId(sessionId)
428+
.build();
429+
final MatomoRequest osArchRequest = MatomoRequests
430+
.event("skidfuscator", "os_arch", System.getProperty("os.arch"), null)
431+
.userId(MiscUtil.getHwid())
432+
.siteId(1)
433+
.pluginJava(true)
434+
.campaignName("community")
435+
.campaignKeyword("launch")
436+
.sessionId(sessionId)
437+
.build();
438+
tracker.sendBulkRequestAsync(versionRequest, javaRequest, osRequest, osVersionRequest, osArchRequest);
439+
} catch (Exception e) {
440+
LOGGER.warn("Failed to send analytics request");
441+
}
416442
}
417443

418444
protected void _verifyEnvironment() {

org.mapleir.parent/org.mapleir.ir/src/main/java/org/mapleir/ir/TypeUtils.java

Lines changed: 36 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
import java.util.Map;
1010
import java.util.Set;
1111

12+
import com.google.gson.internal.bind.ArrayTypeAdapter;
13+
import lombok.Getter;
1214
import org.mapleir.app.service.ApplicationClassSource;
1315
import org.mapleir.app.service.ClassTree;
1416
import org.objectweb.asm.Opcodes;
@@ -32,50 +34,55 @@ private static Set<Type> __getIntrinsicErrors() {
3234
public static final Type CLASS = Type.getType(Class.class);
3335
public static final Type STRING_TYPE = Type.getType(String.class);
3436
public static final Type OBJECT_TYPE = Type.getType(Object.class);
37+
public static final Type OBJECT_ARRAY_TYPE = Type.getType(Object[].class);
3538
public static final Type CLONEABLE_TYPE = Type.getType(Cloneable.class);
3639
public static final Type SERIALIZABLE_TYPE = Type.getType(Serializable.class);
3740
public static final Type THROWABLE = Type.getType(Throwable.class);
3841
public static final Type NULL_TYPE = Type.getType(Null.class);
3942
public static final Type UNDEFINED_TYPE = Type.getType(Undefined.class);
4043
public static final Type UNINITIALIZED_TYPE = Type.getType(Uninitialized.class);
4144

45+
public static final Type INT_ARRAY_TYPE = Type.getType(int[].class);
46+
public static final Type LONG_ARRAY_TYPE = Type.getType(long[].class);
47+
public static final Type DOUBLE_ARRAY_TYPE = Type.getType(double[].class);
48+
public static final Type FLOAT_ARRAY_TYPE = Type.getType(float[].class);
4249

4350
// TODO: remove
4451
public static final Type ANY = Type.getType("L<any>;");
4552

46-
47-
public enum ArrayType {
48-
INT(Type.INT_TYPE, 0),
49-
LONG(Type.LONG_TYPE, 1),
50-
FLOAT(Type.FLOAT_TYPE, 2),
51-
DOUBLE(Type.DOUBLE_TYPE, 3),
52-
OBJECT(OBJECT_TYPE, 4),
53-
BYTE(Type.BYTE_TYPE, 5),
54-
CHAR(Type.CHAR_TYPE, 6),
55-
SHORT(Type.SHORT_TYPE, 7);
53+
public static ArrayType arrayTypeOfObject(final Type type) {
54+
return ArrayType.ofObj(type);
55+
}
56+
57+
@Getter
58+
public static class ArrayType {
59+
public static ArrayType INT = new ArrayType(Type.INT_TYPE, 0);
60+
public static ArrayType LONG = new ArrayType(Type.LONG_TYPE, 1);
61+
public static ArrayType FLOAT = new ArrayType(Type.FLOAT_TYPE, 2);
62+
public static ArrayType DOUBLE = new ArrayType(Type.DOUBLE_TYPE, 3);
63+
public static ArrayType OBJECT = new ArrayType(OBJECT_TYPE, 4);
64+
public static ArrayType BYTE = new ArrayType(Type.BYTE_TYPE, 5);
65+
public static ArrayType CHAR = new ArrayType(Type.CHAR_TYPE, 6);
66+
public static ArrayType SHORT = new ArrayType(Type.SHORT_TYPE, 7);
5667

5768
private final Type type;
5869
private final int loadOpcode, storeOpcode;
70+
71+
private static final ArrayType[] VALUES = new ArrayType[] {
72+
INT, LONG, FLOAT, DOUBLE, OBJECT, BYTE, CHAR, SHORT
73+
};
74+
75+
public static ArrayType[] values() {
76+
return VALUES;
77+
}
5978

60-
private ArrayType(Type type, int offset) {
79+
public ArrayType(Type type, int offset) {
6180
this.type = type;
6281
loadOpcode = IALOAD + offset;
6382
storeOpcode = IASTORE + offset;
6483
}
65-
66-
public Type getType() {
67-
return type;
68-
}
69-
70-
public int getLoadOpcode() {
71-
return loadOpcode;
72-
}
73-
74-
public int getStoreOpcode() {
75-
return storeOpcode;
76-
}
77-
78-
public static ArrayType resolve(int opcode) {
84+
85+
public static ArrayType resolve(int opcode) {
7986
if(opcode >= IALOAD && opcode <= SALOAD) {
8087
return values()[opcode - IALOAD];
8188
} else if(opcode >= IASTORE && opcode <= SASTORE) {
@@ -84,6 +91,10 @@ public static ArrayType resolve(int opcode) {
8491
throw new UnsupportedOperationException(Printer.OPCODES[opcode]);
8592
}
8693
}
94+
95+
public static ArrayType ofObj(final Type objectType) {
96+
return new ArrayType(objectType, 4);
97+
}
8798
}
8899

89100
public static final Type[] OPCODE_TYPE_TABLE = new Type[] { Type.INT_TYPE, Type.LONG_TYPE, Type.FLOAT_TYPE, Type.DOUBLE_TYPE, OBJECT_TYPE, Type.BYTE_TYPE, Type.CHAR_TYPE,

org.mapleir.parent/org.mapleir.ir/src/main/java/org/mapleir/ir/cfg/BasicBlock.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,11 @@ public Stmt set(int index, Stmt stmt) {
210210
return statements.set(index, stmt);
211211
}
212212

213+
public void replace(final Stmt o, final Stmt n) {
214+
statements.add(indexOf(o), n);
215+
statements.remove(o);
216+
}
217+
213218
@Override
214219
public int size() {
215220
return statements.size();

org.mapleir.parent/org.mapleir.ir/src/main/java/org/mapleir/ir/cfg/ControlFlowGraph.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,12 @@ public int makeBlockId() {
6161
return blockCounter++;
6262
}
6363

64+
public Stream<CodeUnit> traverse() {
65+
return vertices().stream().flatMap(Collection::stream)
66+
.map(Stmt::traverse)
67+
.flatMap(Streams::stream);
68+
}
69+
6470
public Stream<CodeUnit> allExprStream() {
6571
return vertices().stream().flatMap(Collection::stream).map(Stmt::enumerateWithSelf).flatMap(Streams::stream);
6672
}

org.mapleir.parent/org.mapleir.ir/src/main/java/org/mapleir/ir/cfg/builder/ControlFlowGraphBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public class ControlFlowGraphBuilder {
2121

2222
public final MethodNode method;
2323
protected final SSAFactory factory;
24-
protected final ControlFlowGraph graph;
24+
public final ControlFlowGraph graph;
2525
protected final Set<Local> locals;
2626
protected final NullPermeableHashMap<Local, Set<BasicBlock>> assigns;
2727
protected BasicBlock head;

org.mapleir.parent/org.mapleir.ir/src/main/java/org/mapleir/ir/code/CodeUnit.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,7 @@
88
import org.mapleir.stdlib.util.TabbedStringWriter;
99
import org.objectweb.asm.MethodVisitor;
1010

11-
import java.util.ArrayList;
12-
import java.util.HashSet;
13-
import java.util.List;
14-
import java.util.Set;
11+
import java.util.*;
1512

1613
/**
1714
* This is the shared base between the {@link Stmt} and {@link Expr} classes,
@@ -406,6 +403,10 @@ public static String print(CodeUnit node) {
406403
return printer.toString();
407404
}
408405

406+
public List<CodeUnit> traverse() {
407+
return Collections.emptyList();
408+
}
409+
409410
@Override
410411
public boolean equals(Object o) {
411412
if (this == o)

org.mapleir.parent/org.mapleir.ir/src/main/java/org/mapleir/ir/code/expr/AllocObjectExpr.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
import org.objectweb.asm.Opcodes;
99
import org.objectweb.asm.Type;
1010

11+
import java.util.Collections;
12+
import java.util.List;
13+
1114
public class AllocObjectExpr extends Expr {
1215

1316
private Type type;
@@ -60,4 +63,9 @@ public boolean canChangeFlow() {
6063
public boolean equivalent(CodeUnit s) {
6164
return s instanceof AllocObjectExpr && type.equals(((AllocObjectExpr) s).type);
6265
}
66+
67+
@Override
68+
public List<CodeUnit> traverse() {
69+
return List.of(this);
70+
}
6371
}

org.mapleir.parent/org.mapleir.ir/src/main/java/org/mapleir/ir/code/expr/ArithmeticExpr.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99
import org.objectweb.asm.Type;
1010
import org.objectweb.asm.util.Printer;
1111

12+
import java.util.ArrayList;
13+
import java.util.Arrays;
14+
import java.util.List;
15+
1216
import static org.objectweb.asm.Opcodes.*;
1317

1418
public class ArithmeticExpr extends Expr {
@@ -301,4 +305,15 @@ public void overwrite(Expr previous, Expr newest) {
301305
// // TODO Auto-generated method stub
302306
// return 0;
303307
// }
308+
309+
310+
@Override
311+
public List<CodeUnit> traverse() {
312+
final List<CodeUnit> self = new ArrayList<>();
313+
self.add(this);
314+
self.addAll(left.traverse());
315+
self.addAll(right.traverse());
316+
317+
return self;
318+
}
304319
}

org.mapleir.parent/org.mapleir.ir/src/main/java/org/mapleir/ir/code/expr/ArrayLengthExpr.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
import org.objectweb.asm.Opcodes;
99
import org.objectweb.asm.Type;
1010

11+
import java.util.ArrayList;
12+
import java.util.List;
13+
1114
public class ArrayLengthExpr extends Expr {
1215

1316
private Expr expression;
@@ -85,4 +88,11 @@ public void overwrite(Expr previous, Expr newest) {
8588
public boolean equivalent(CodeUnit s) {
8689
return (s instanceof ArrayLengthExpr) && expression.equivalent(((ArrayLengthExpr)s).expression);
8790
}
91+
92+
@Override
93+
public List<CodeUnit> traverse() {
94+
final List<CodeUnit> self = new ArrayList<>(List.of(this));
95+
self.addAll(expression.traverse());
96+
return self;
97+
}
8898
}

org.mapleir.parent/org.mapleir.ir/src/main/java/org/mapleir/ir/code/expr/ArrayLoadExpr.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
import org.objectweb.asm.MethodVisitor;
1010
import org.objectweb.asm.Type;
1111

12+
import java.util.ArrayList;
13+
import java.util.List;
14+
1215
public class ArrayLoadExpr extends Expr {
1316

1417
private Expr arrayExpression;
@@ -53,7 +56,9 @@ public Expr copy() {
5356

5457
@Override
5558
public Type getType() {
56-
return type.getType();
59+
return arrayExpression.getType().getSort() == Type.ARRAY
60+
? arrayExpression.getType().getElementType()
61+
: type.getType();
5762
}
5863

5964
@Override
@@ -125,4 +130,12 @@ public boolean equivalent(CodeUnit s) {
125130
}
126131
return false;
127132
}
133+
134+
@Override
135+
public List<CodeUnit> traverse() {
136+
final List<CodeUnit> self = new ArrayList<>(List.of(this));
137+
self.addAll(arrayExpression.traverse());
138+
self.addAll(indexExpression.traverse());
139+
return self;
140+
}
128141
}

0 commit comments

Comments
 (0)