Skip to content

Commit 2353d6e

Browse files
committed
chore(obfuscator): converted string encryption to instance methodology
1 parent 289d469 commit 2353d6e

4 files changed

Lines changed: 39 additions & 20 deletions

File tree

dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/transform/impl/string/StringTransformer.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import dev.skidfuscator.obfuscator.skidasm.expr.SkidConstantExpr;
1010
import dev.skidfuscator.obfuscator.transform.AbstractTransformer;
1111
import dev.skidfuscator.obfuscator.transform.Transformer;
12+
import dev.skidfuscator.obfuscator.transform.impl.string.generator.BasicEncryptionGenerator;
1213
import dev.skidfuscator.obfuscator.util.RandomUtil;
1314
import org.mapleir.asm.ClassNode;
1415
import org.mapleir.ir.cfg.ControlFlowGraph;
@@ -21,7 +22,7 @@
2122
import java.util.stream.Collectors;
2223

2324
public class StringTransformer extends AbstractTransformer {
24-
private final Map<ClassNode, Integer[]> keyMap = new HashMap<>();
25+
private final Map<ClassNode, BasicEncryptionGenerator> keyMap = new HashMap<>();
2526
private final Set<String> INJECTED = new HashSet<>();
2627

2728
public StringTransformer(Skidfuscator skidfuscator) {
@@ -49,25 +50,25 @@ void handle(final RunMethodTransformEvent event) {
4950

5051
final ClassNode parentNode = methodNode.getParent();
5152

52-
Integer[] keysT = keyMap.get(parentNode);
53+
BasicEncryptionGenerator generator = keyMap.get(parentNode);
5354

54-
if (keysT == null) {
55+
if (generator == null) {
5556
final int size = RandomUtil.nextInt(127) + 1;
56-
keysT = new Integer[size];
57+
final Integer[] keys = new Integer[size];
58+
5759
for (int i = 0; i < size; i++) {
58-
keysT[i] = RandomUtil.nextInt(127) + 1;
60+
keys[i] = RandomUtil.nextInt(127) + 1;
5961
}
6062

61-
keyMap.put(parentNode, keysT);
63+
keyMap.put(parentNode, (generator = new BasicEncryptionGenerator(keys)));
6264
}
6365

64-
final Integer[] keys = keysT;
65-
6666
if (!INJECTED.contains(parentNode.getName())) {
67-
BasicEncryptionGenerator.visit((SkidClassNode) methodNode.owner, BasicEncryptionGenerator.METHOD_NAME, keys);
67+
generator.visit((SkidClassNode) methodNode.owner, BasicEncryptionGenerator.METHOD_NAME);
6868
INJECTED.add(parentNode.getName());
6969
}
7070

71+
BasicEncryptionGenerator finalGenerator = generator;
7172
cfg.allExprStream()
7273
/*
7374
*
@@ -87,7 +88,7 @@ void handle(final RunMethodTransformEvent event) {
8788

8889
final String constant = (String) unit.getConstant();
8990
final int value = methodNode.getBlockPredicate((SkidBlock) unit.getBlock());
90-
final String encrypted = BasicEncryptionGenerator.encrypt(constant, value, keys);
91+
final String encrypted = finalGenerator.encrypt(constant, value);
9192

9293
final ConstantExpr encryptedExpr = new ConstantExpr(encrypted);
9394
final Expr loadExpr = methodNode.getFlowPredicate().getGetter().get(unit.getBlock());

dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/transform/impl/string/BasicEncryptionGenerator.java renamed to dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/transform/impl/string/generator/BasicEncryptionGenerator.java

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package dev.skidfuscator.obfuscator.transform.impl.string;
1+
package dev.skidfuscator.obfuscator.transform.impl.string.generator;
22

33
import dev.skidfuscator.obfuscator.event.EventBus;
44
import dev.skidfuscator.obfuscator.event.impl.transform.method.InitMethodTransformEvent;
@@ -12,10 +12,16 @@
1212

1313
import static org.objectweb.asm.Opcodes.*;
1414

15-
public class BasicEncryptionGenerator {
15+
public class BasicEncryptionGenerator implements EncryptionGenerator {
1616
public static final String METHOD_NAME = "thisIsAInsaneEncryptionMethod";
17+
private final Integer[] keys;
1718

18-
public static String encrypt(String input, int key, Integer[] keys) {
19+
public BasicEncryptionGenerator(Integer[] keys) {
20+
this.keys = keys;
21+
}
22+
23+
@Override
24+
public String encrypt(String input, int key) {
1925
final byte[] encrypted = input.getBytes();
2026

2127
// Super simple converting our integer to string, and getting bytes.
@@ -31,7 +37,8 @@ public static String encrypt(String input, int key, Integer[] keys) {
3137
return Base64.getEncoder().encodeToString(encrypted);
3238
}
3339

34-
public static String decrypt(String input, int key, Integer[] keys) {
40+
@Override
41+
public String decrypt(String input, int key) {
3542
final byte[] decrypted = Base64.getDecoder().decode(input.getBytes());
3643

3744
// Super simple converting our integer to string, and getting bytes.
@@ -47,7 +54,8 @@ public static String decrypt(String input, int key, Integer[] keys) {
4754
return new String(decrypted);
4855
}
4956

50-
public static void visit(final SkidClassNode node, String name, Integer[] integerKeys) {
57+
@Override
58+
public void visit(final SkidClassNode node, String name) {
5159
// TODO: Fix the retardness and make it so that all
5260
// generated methods can be properly genned
5361
final SkidMethodNode skidMethodNode = node.createMethod()
@@ -77,13 +85,13 @@ public static void visit(final SkidClassNode node, String name, Integer[] intege
7785
Label label2 = new Label();
7886
methodVisitor.visitLabel(label2);
7987
methodVisitor.visitLineNumber(37, label2);
80-
methodVisitor.visitIntInsn(BIPUSH, integerKeys.length);
88+
methodVisitor.visitIntInsn(BIPUSH, keys.length);
8189
methodVisitor.visitIntInsn(NEWARRAY, T_BYTE);
8290

83-
for (int i = 0; i < integerKeys.length; i++) {
91+
for (int i = 0; i < keys.length; i++) {
8492
methodVisitor.visitInsn(DUP);
8593
methodVisitor.visitIntInsn(BIPUSH, i);
86-
methodVisitor.visitIntInsn(BIPUSH, integerKeys[i]);
94+
methodVisitor.visitIntInsn(BIPUSH, keys[i]);
8795
methodVisitor.visitInsn(BASTORE);
8896
}
8997

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package dev.skidfuscator.obfuscator.transform.impl.string.generator;
2+
3+
import dev.skidfuscator.obfuscator.skidasm.SkidClassNode;
4+
5+
public interface EncryptionGenerator {
6+
String encrypt(String input, int key);
7+
8+
String decrypt(String input, int key);
9+
10+
void visit(final SkidClassNode node, String name);
11+
}

dev.skidfuscator.obfuscator/src/test/java/dev/skidfuscator/test/EncryptionTest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
package dev.skidfuscator.test;
22

3-
import dev.skidfuscator.obfuscator.transform.impl.string.BasicEncryptionGenerator;
3+
import dev.skidfuscator.obfuscator.transform.impl.string.generator.BasicEncryptionGenerator;
44
import dev.skidfuscator.obfuscator.util.RandomUtil;
55
import org.junit.jupiter.api.Test;
6-
import org.junit.jupiter.api.TestInstance;
76

87
public class EncryptionTest {
98

0 commit comments

Comments
 (0)