Skip to content
This repository was archived by the owner on Sep 5, 2025. It is now read-only.

Commit 52ea4e0

Browse files
committed
[功能] 花指令数添加简单的控制流
1 parent 325780f commit 52ea4e0

File tree

2 files changed

+28
-9
lines changed

2 files changed

+28
-9
lines changed

CHANGELOG.MD

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
更新日志:
66

7+
- [功能] 花指令数添加简单的控制流
8+
- [功能] 花指令从单 `int` 类型拓展到更多
79
- [功能] 花指令支持添加无意义的垃圾方法
810
- [优化] 优化命令行输出的信息
911
- [其他]`CI` 增加 `Gitleaks` 检查

src/main/java/me/n1ar4/jar/obfuscator/asm/JunkCodeChanger.java

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import me.n1ar4.jar.obfuscator.config.BaseConfig;
55
import me.n1ar4.jar.obfuscator.utils.JunkUtil;
66
import me.n1ar4.jar.obfuscator.utils.RandomUtil;
7+
import me.n1ar4.jrandom.core.JRandom;
78
import me.n1ar4.log.LogManager;
89
import me.n1ar4.log.Logger;
910
import org.objectweb.asm.*;
@@ -126,17 +127,28 @@ public void visitMethodInsn(int opcode, String owner, String name, String descri
126127
return;
127128
}
128129

129-
mv.visitLdcInsn((int) (Math.random() * 100));
130+
mv.visitTypeInsn(Opcodes.NEW, "java/lang/String");
130131
mv.visitInsn(Opcodes.DUP);
131-
mv.visitInsn(RandomUtil.genICONSTOpcode());
132-
mv.visitInsn(Opcodes.IADD);
133-
mv.visitInsn(RandomUtil.genICONSTOpcode());
134-
mv.visitInsn(Opcodes.ISUB);
135-
mv.visitInsn(Opcodes.DUP_X1);
136-
mv.visitInsn(Opcodes.SWAP);
137-
mv.visitInsn(Opcodes.POP);
138-
mv.visitInsn(Opcodes.POP);
132+
mv.visitLdcInsn(JRandom.getInstance().randomString(16));
133+
mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/String", "<init>",
134+
"(Ljava/lang/String;)V", false);
139135
mv.visitInsn(Opcodes.POP);
136+
137+
Label ifLabel = new Label();
138+
Label endLabel = new Label();
139+
140+
mv.visitInsn(Opcodes.ICONST_1);
141+
mv.visitJumpInsn(Opcodes.IFNE, endLabel);
142+
143+
mv.visitLabel(ifLabel);
144+
mv.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/System",
145+
"out", "Ljava/io/PrintStream;");
146+
mv.visitLdcInsn(JRandom.getInstance().randomString(16));
147+
mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/io/PrintStream",
148+
"println", "(Ljava/lang/String;)V", false);
149+
mv.visitJumpInsn(Opcodes.GOTO, endLabel);
150+
mv.visitLabel(endLabel);
151+
mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
140152
}
141153
super.visitMethodInsn(opcode, owner, name, descriptor, isInterface);
142154
}
@@ -176,6 +188,11 @@ public void visitTypeInsn(int opcode, String type) {
176188
}
177189
mv.visitInsn(Opcodes.NOP);
178190
mv.visitInsn(Opcodes.NOP);
191+
mv.visitTypeInsn(Opcodes.NEW, "java/util/ArrayList");
192+
mv.visitInsn(Opcodes.DUP);
193+
mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/util/ArrayList",
194+
"<init>", "()V", false);
195+
mv.visitInsn(Opcodes.POP);
179196
mv.visitInsn(Opcodes.NOP);
180197
}
181198
super.visitTypeInsn(opcode, type);

0 commit comments

Comments
 (0)