hey i write e java Obfuscator and build it using IntelliJ IDEA Artifact but when I enter arguments for obf file, the console outputs:
Error: Could not find or load main class JavaCodeObfuscator Caused by: java.lang.ClassNotFoundException: JavaCodeObfuscator
Console Argument : java JavaCodeObfuscator hello.java
code:
import java.io.*;
import java.util.*;
public class JavaCodeObfuscator {
private static final int MIN_NAME_LENGTH = 4;
private static final int MAX_NAME_LENGTH = 8;
private static final int NAME_CHAR_SET_SIZE = 26;
private static final Random RANDOM = new Random();
public static void main(String[] args) {
if (args.length < 1) {
return;
}
String inputFile = args[0];
try {
String sourceCode = readSourceCode(inputFile);
String obfuscatedCode = obfuscate(sourceCode);
String outputFilePath = getOutputFilePath(inputFile);
writeObfuscatedCode(obfuscatedCode, outputFilePath);
} catch (IOException e) {
System.err.println("Error: " + e.getMessage());
}
}
private static String readSourceCode(String inputFile) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader(inputFile));
StringBuilder sourceCodeBuilder = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
sourceCodeBuilder.append(line).append("\n");
}
reader.close();
return sourceCodeBuilder.toString();
}
private static String obfuscate(String sourceCode) {
Map<String, String> nameMap = new HashMap<>();
StringBuilder obfuscatedCodeBuilder = new StringBuilder();
int nameCounter = 0;
for (int i = 0; i < sourceCode.length(); i++) {
char c = sourceCode.charAt(i);
if (Character.isJavaIdentifierStart(c)) {
StringBuilder nameBuilder = new StringBuilder();
nameBuilder.append(c);
while (i < sourceCode.length() - 1 && Character.isJavaIdentifierPart(c = sourceCode.charAt(++i))) {
nameBuilder.append(c);
}
String name = nameBuilder.toString();
String obfuscatedName = nameMap.get(name);
if (obfuscatedName == null) {
obfuscatedName = generateName(nameCounter++);
nameMap.put(name, obfuscatedName);
}
obfuscatedCodeBuilder.append(obfuscatedName);
i--;
} else {
obfuscatedCodeBuilder.append(c);
}
}
return obfuscatedCodeBuilder.toString();
}
private static String generateName(int index) {
StringBuilder nameBuilder = new StringBuilder();
int nameLength = MIN_NAME_LENGTH + RANDOM.nextInt(MAX_NAME_LENGTH - MIN_NAME_LENGTH + 1);
for (int i = 0; i < nameLength; i++) {
char c = (char) ('a' + RANDOM.nextInt(NAME_CHAR_SET_SIZE));
nameBuilder.append(c);
}
return nameBuilder.toString();
}
private static String getOutputFilePath(String inputFile) {
int dotIndex = inputFile.lastIndexOf('.');
String extension = dotIndex >= 0 ? inputFile.substring(dotIndex) : "";
String outputFileName = inputFile.substring(0, inputFile.length() - extension.length()) + "_obfuscated" + extension;
return outputFileName;
}
private static void writeObfuscatedCode(String obfuscatedCode, String outputFilePath) throws IOException {
PrintWriter writer = new PrintWriter(new FileWriter(outputFilePath));
writer.print(obfuscatedCode);
writer.close();
System.out.println("Protected");
}
}
Yes, I'm new to programming and maybe I did something wrong when building the original jar file