0

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

Pash0002
  • 110
  • 2
  • 14
Snaks
  • 3
  • 4

0 Answers0