Вопрос Создал прекрасный обфускатор, сливать?

  • Автор темы Автор темы r3z
  • Дата начала Дата начала
aka wqzxqz
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
24 Ноя 2024
Сообщения
671
Реакции
11

Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:

  • бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
  • маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
  • приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
  • обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.

Спасибо!

Сделал обфускатор который ломает класс и добавляет кастомный класслоадер и лаунчер главного класса. Нужно дофиксить: запуск обфусцированных читов, а также сделать нормальную обфускацию не через XOR.

Обфускатор сделан нейронкой, то есть полностью все коды от ИИ, но при этом на небольших джарках - работает. Как запускать джарки - разберетесь. Делаю 2 дня обфускатор и уже есть прогресс. В дальнейшем буду делать модификацию JVM и свою жвм для этого обфускатора в целом и ломание байткода по другому

Будет много людей, кому нужен обфускатор который хоть что то может - сливаю
 
Последнее редактирование:
Бля заебали со своими гптфускаторами, что толку от них? Ваши пасты это не спасет, все ваши кастом класс лоадеры дампятся нищим агент дампером, заебете

Да и все ваши обф на стринги и т.п без полезные, на все ваши флоу и подобная шалупень трансформер пишется проще чем посрать сходить
 
Бля заебали со своими гптфускаторами, что толку от них? Ваши пасты это не спасет, все ваши кастом класс лоадеры дампятся нищим агент дампером, заебете

Да и все ваши обф на стринги и т.п без полезные, на все ваши флоу и подобная шалупень трансформер пишется проще чем посрать сходить
каким дампером мне попробовать сдампить мою обфу?)))
 
Сделал обфускатор который ломает класс и добавляет кастомный класслоадер и лаунчер главного класса. Нужно дофиксить: запуск обфусцированных читов, а также сделать нормальную обфускацию не через XOR.

Обфускатор сделан нейронкой, то есть полностью все коды от ИИ, но при этом на небольших джарках - работает. Как запускать джарки - разберетесь. Делаю 2 дня обфускатор и уже есть прогресс. В дальнейшем буду делать модификацию JVM и свою жвм для этого обфускатора в целом и ломание байткода по другому

Будет много людей, кому нужен обфускатор который хоть что то может - сливаю
сливай
 
Сделал обфускатор который ломает класс и добавляет кастомный класслоадер и лаунчер главного класса. Нужно дофиксить: запуск обфусцированных читов, а также сделать нормальную обфускацию не через XOR.

Обфускатор сделан нейронкой, то есть полностью все коды от ИИ, но при этом на небольших джарках - работает. Как запускать джарки - разберетесь. Делаю 2 дня обфускатор и уже есть прогресс. В дальнейшем буду делать модификацию JVM и свою жвм для этого обфускатора в целом и ломание байткода по другому

Будет много людей, кому нужен обфускатор который хоть что то может - сливаю
жду с нетерпением)
 
Сделал обфускатор который ломает класс и добавляет кастомный класслоадер и лаунчер главного класса. Нужно дофиксить: запуск обфусцированных читов, а также сделать нормальную обфускацию не через XOR.

Обфускатор сделан нейронкой, то есть полностью все коды от ИИ, но при этом на небольших джарках - работает. Как запускать джарки - разберетесь. Делаю 2 дня обфускатор и уже есть прогресс. В дальнейшем буду делать модификацию JVM и свою жвм для этого обфускатора в целом и ломание байткода по другому

Будет много людей, кому нужен обфускатор который хоть что то может - сливаю
если чо в этом обфускаторе свой реверсер байткода, а также своя таблица ключей на уровень выше XOR'а. Деобф легко, но если постараетесь - будет тяжело дампить/деобфить. Скоро выложу
если чо в этом обфускаторе свой реверсер байткода, а также своя таблица ключей на уровень выше XOR'а. Деобф легко, но если постараетесь - будет тяжело дампить/деобфить. Скоро выложу
Вот код класслоадера который грузит ключи и байткод:


Java:
Expand Collapse Copy
package argentoz.protect;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.security.CodeSource;
import java.security.ProtectionDomain;
import java.security.cert.Certificate;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.Arrays;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.concurrent.ConcurrentHashMap;

public class SecureClassLoader extends ClassLoader {
    private static final byte[] KEY = {0x48, 0x2A, 0x7C, 0x3F, 0x12, 0x59, 0x6E, (byte) 0x8B, 0x4D, 0x77, 0x0F, 0x3C, (byte) 0x9A, (byte) 0xE3, 0x5D, 0x2B};
    private static final byte SIMPLE_KEY = 0x48;
    private static final byte[] MASTER_KEY = {
            0x48, 0x2A, 0x7C, 0x3F, 0x12, 0x59, 0x6E, (byte)0x8B,
            0x4D, 0x77, 0x0F, 0x3C, (byte)0x9A, (byte)0xE3, 0x5D, 0x2B,
            0x7F, 0x1D, 0x39, 0x62, (byte)0xA3, 0x27, 0x45, 0x53,
            0x69, 0x33, 0x18, (byte)0xD4, (byte)0xE7, 0x0B, 0x74, (byte)0xC9
    };
    private static final int[] ROTATION_TABLE = {
            7, 12, 17, 22, 5, 9, 14, 20, 4, 11, 16, 23, 6, 10, 15, 21
    };
    private static final byte[] SUBSTITUTION_BOX = {
            (byte)0xE2, 0x4F, (byte)0xA1, 0x35, (byte)0xB7, 0x6C, 0x1D, 0x29,
            0x58, (byte)0xF3, 0x07, (byte)0xD9, 0x4A, (byte)0x8E, 0x63, (byte)0xC5,
            0x3B, 0x72, (byte)0x91, 0x0F, (byte)0xE8, 0x55, (byte)0xCD, 0x36,
            (byte)0xA4, 0x2E, (byte)0xF7, 0x1B, 0x60, (byte)0x8C, 0x47, (byte)0xD2
    };
    private static final byte[] INVERSE_SUBSTITUTION_BOX = createInverseSBox(SUBSTITUTION_BOX); // Инверсная S-Box
    private final Map<String, byte[]> classData = new HashMap<>();
    private final Map<String, Class<?>> loadedClasses = new HashMap<>();
    private final Map<String, Integer> decryptionMethod = new ConcurrentHashMap<>();
    private final Set<String> problemClasses = new HashSet<>();
    private final String jarPath;
    private final URL codeBase;
    private static final String[] INITIAL_PROBLEM_CLASSES = {
            "mpp/venusfr/ui/mainmenu/MainScreen",
            "mpp/venusfr/scripts/lua/classes/EntityClass",
            "mpp/venusfr/utils/client/IMinecraft",
            "mpp/venusfr/events/TickEvent"
    };
    private static final Set<String> PARENT_LOADED_PACKAGES = new HashSet<>(Arrays.asList(
            "mpp.venusfr.scripts.lua.classes.",
            "mpp.venusfr.utils.client.",
            "mpp.venusfr.events.",
            "net.minecraft.",
            "net.optifine."
    ));
    private static final int NO_DECRYPT = 0;
    private static final int STANDARD_XOR = 1;
    private static final int SIMPLE_XOR = 2;
    private static final int ADVANCED_ENCRYPTION = 3;

    public SecureClassLoader(ClassLoader parent, String jarPath) {
        super(parent);
        this.jarPath = jarPath;
        this.codeBase = getCodeBaseURL();

        try {
            for (String problemClass : INITIAL_PROBLEM_CLASSES) {
                problemClasses.add(problemClass);
            }

            loadClassesFromJar();

            for (String problemClass : problemClasses) {
                decryptionMethod.put(problemClass, ADVANCED_ENCRYPTION); // Используем продвинутое шифрование по умолчанию
            }

            System.out.println("SecureClassLoader initialized with " + classData.size() + " classes");
        } catch (IOException e) {
            throw new RuntimeException("Failed to initialize secure class loader", e);
        }
    }

    private URL getCodeBaseURL() {
        try {
            return new URL("file:" + jarPath);
        } catch (Exception e) {
            return null;
        }
    }

    private void loadClassesFromJar() throws IOException {
        try (JarFile jarFile = new JarFile(jarPath)) {
            Enumeration<JarEntry> entries = jarFile.entries();

            while (entries.hasMoreElements()) {
                JarEntry entry = entries.nextElement();
                if (entry.getName().endsWith(".class") &&
                        !entry.getName().startsWith("argentoz/protect")) {
                    String className = entry.getName().replace('/', '.').replace(".class", "");
                    byte[] classBytes = readEntryData(jarFile, entry);
                    classData.put(className, classBytes);

                    if (isValidClassFile(classBytes)) {
                        decryptionMethod.put(entry.getName().replace(".class", ""), ADVANCED_ENCRYPTION); // По умолчанию продвинутое шифрование
                    }
                }
            }
        }
    }

    private byte[] readEntryData(JarFile jarFile, JarEntry entry) throws IOException {
        try (InputStream is = jarFile.getInputStream(entry)) {
            byte[] buffer = new byte[(int) entry.getSize()];
            int bytesRead = 0;
            int totalBytesRead = 0;

            while (totalBytesRead < buffer.length) {
                bytesRead = is.read(buffer, totalBytesRead, buffer.length - totalBytesRead);
                if (bytesRead == -1) break;
                totalBytesRead += bytesRead;
            }

            return buffer;
        }
    }

    @Override
    public Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
        Class<?> loadedClass = loadedClasses.get(name);
        if (loadedClass != null) {
            return loadedClass;
        }

        try {
            if (name.startsWith("argentoz.protect")) {
                return super.loadClass(name, resolve);
            }

            String classPath = name.replace('.', '/');

            if (problemClasses.contains(classPath)) {
                return super.loadClass(name, resolve);
            }

            for (String prefix : PARENT_LOADED_PACKAGES) {
                if (name.startsWith(prefix)) {
                    return super.loadClass(name, resolve);
                }
            }

            if (classData.containsKey(name)) {
                try {
                    return findClass(name);
                } catch (Exception e) {
                    problemClasses.add(classPath);
                    return super.loadClass(name, resolve);
                }
            }

            return super.loadClass(name, resolve);
        } catch (Exception e) {
            try {
                return super.loadClass(name, resolve);
            } catch (ClassNotFoundException cnfe) {
                throw cnfe;
            }
        }
    }

    @Override
    protected Class<?> findClass(String name) throws ClassNotFoundException {
        if (loadedClasses.containsKey(name)) {
            return loadedClasses.get(name);
        }

        byte[] rawClassData = classData.get(name);
        if (rawClassData != null) {
            String classPath = name.replace('.', '/');
            byte[] finalClassData = new byte[0];

            Integer method = decryptionMethod.get(classPath);

            if (method == null) {
                method = detectDecryptionMethod(rawClassData);
                decryptionMethod.put(classPath, method);
            }

            switch (method) {
                case NO_DECRYPT:
                    finalClassData = rawClassData;
                    break;
                case STANDARD_XOR:
                    finalClassData = standardDecrypt(rawClassData);
                    break;
                case SIMPLE_XOR:
                    finalClassData = simpleDecrypt(rawClassData);
                    break;
                case ADVANCED_ENCRYPTION:
                    finalClassData = customDecrypt(rawClassData); // Используем продвинутое дешифрование
                    break;
                default:
                    finalClassData = tryMultipleDecryptions(rawClassData, classPath);
            }

            if (!isValidClassFile(finalClassData)) {
                finalClassData = tryMultipleDecryptions(rawClassData, classPath);

                if (!isValidClassFile(finalClassData)) {
                    problemClasses.add(classPath);
                    return super.findClass(name);
                }
            }

            try {
                ProtectionDomain domain = new ProtectionDomain(
                        new CodeSource(codeBase, (Certificate[]) null),
                        null, this, null);

                Class<?> clazz = defineClass(name, finalClassData, 0, finalClassData.length, domain);
                loadedClasses.put(name, clazz);
                return clazz;
            } catch (Exception e) {
                problemClasses.add(classPath);
                return super.findClass(name);
            }
        }

        return super.findClass(name);
    }

    private int detectDecryptionMethod(byte[] data) {
        return ADVANCED_ENCRYPTION; // По умолчанию используем продвинутое дешифрование
    }

    private boolean isValidClassFile(byte[] data) {
        if (data.length < 8) return false;

        boolean validMagic = data[0] == (byte)0xCA &&
                data[1] == (byte)0xFE &&
                data[2] == (byte)0xBA &&
                data[3] == (byte)0xBE;

        if (!validMagic) return false;

        int major = ((data[6] & 0xFF) << 8) | (data[7] & 0xFF);
        return major > 0 && major <= 65;
    }

    private byte[] standardDecrypt(byte[] encryptedData) {
        return encryptedData; // Заглушка, если захотите использовать стандартный XOR
    }

    private byte[] simpleDecrypt(byte[] encryptedData) {
        return encryptedData; // Заглушка для простого XOR
    }

    private byte[] customDecrypt(byte[] encryptedData) {
        byte[] uniqueKey = generateUniqueKey(encryptedData); // Ключ генерируется на основе зашифрованных данных
        byte[] decryptedData = new byte[encryptedData.length];

        for (int i = encryptedData.length - 1; i >= 0; i--) { // Дешифрование в обратном порядке
            byte currentByte = encryptedData[i];

            // 1. Обратное вращение битов
            int rotation = ROTATION_TABLE[i % ROTATION_TABLE.length];
            currentByte = rotateRight(currentByte, rotation);

            // 2. Обратная подстановка (инверсная S-Box)
            currentByte = INVERSE_SUBSTITUTION_BOX[currentByte & 0xFF];

            // 3. XOR с уникальным ключом
            currentByte ^= uniqueKey[i % uniqueKey.length];

            decryptedData[i] = currentByte;
        }
        return decryptedData;
    }

    private byte[] decryptClassData(byte[] encryptedData) {
        return decryptClassData(encryptedData); // Больше не используется напрямую
    }

    private byte[] tryMultipleDecryptions(byte[] data, String classPath) {
        return data; // Заглушка для попыток разных дешифрований
    }

    @Override
    public URL getResource(String name) {
        if (classData.containsKey(name.replace('/', '.').replace(".class", ""))) {
            try {
                return new URL("jar:file:" + jarPath + "!/" + name);
            } catch (Exception e) {
                return null;
            }
        }
        return super.getResource(name);
    }

    @Override
    public InputStream getResourceAsStream(String name) {
        String className = name.replace('/', '.').replace(".class", "");
        if (classData.containsKey(className)) {
            String classPath = className.replace('.', '/');

            if (problemClasses.contains(classPath)) {
                return super.getResourceAsStream(name);
            }

            byte[] rawData = classData.get(className);
            Integer method = decryptionMethod.get(classPath);
            byte[] finalData;

            if (method != null) {
                switch (method) {
                    case NO_DECRYPT:
                        finalData = rawData;
                        break;
                    case STANDARD_XOR:
                        finalData = standardDecrypt(rawData);
                        break;
                    case SIMPLE_XOR:
                        finalData = simpleDecrypt(rawData);
                        break;
                    case ADVANCED_ENCRYPTION:
                        finalData = customDecrypt(rawData); // Используем продвинутое дешифрование
                        break;
                    default:
                        finalData = rawData;
                }
            } else {
                if (isValidClassFile(rawData)) {
                    finalData = rawData;
                    decryptionMethod.put(classPath, NO_DECRYPT);
                } else {
                    finalData = tryMultipleDecryptions(rawData, classPath);
                }
            }

            if (isValidClassFile(finalData)) {
                return new ByteArrayInputStream(finalData);
            } else {
                return super.getResourceAsStream(name);
            }
        }
        return super.getResourceAsStream(name);
    }

    private byte[] generateUniqueKey(byte[] classData) {
        byte[] expandedKey = new byte[Math.max(256, classData.length / 4)];

        for (int i = 0; i < MASTER_KEY.length && i < expandedKey.length; i++) {
            expandedKey[i] = MASTER_KEY[i];
        }

        int classSize = classData.length;
        for (int i = 0; i < expandedKey.length; i++) {
            expandedKey[i] ^= (byte)(classSize & 0xFF);
            classSize = (classSize >> 8) | (classSize << 24);

            int samplePos = (i * 17) % classData.length;
            expandedKey[i] ^= classData[samplePos];

            if (i > 0) expandedKey[i] ^= expandedKey[i-1];
            if (i > 3) expandedKey[i] ^= expandedKey[i-3];

            expandedKey[i] = (byte)((expandedKey[i] * 13) + 7);
        }

        return expandedKey;
    }

    private byte rotateRight(byte b, int shift) {
        return (byte) ((b & 0xFF) >>> shift | (b & 0xFF) << (8 - shift));
    }

    private static byte[] createInverseSBox(byte[] sBox) {
        byte[] inverseSBox = new byte[256];
        for (int i = 0; i < sBox.length; i++) {
            inverseSBox[sBox[i] & 0xFF] = (byte) i;
        }
        return inverseSBox;
    }
}
 
А нахуй вы разрешение на слив своего продукта просите. Вы может у мамы спрашиваете можно ли пк вам включить ?
 
А нахуй вы разрешение на слив своего продукта просите. Вы может у мамы спрашиваете можно ли пк вам включить ?
не ну а смысл сливать никому не нужную хуйню, я и спрашиваю - нужно кому то эта хуйня вот и все, это ж фри обф написанный под пивом
 
не ну а смысл сливать никому не нужную хуйню, я и спрашиваю - нужно кому то эта хуйня вот и все, это ж фри обф написанный под пивом
Слить сразу - X
Спросить у типов и даже если все ответят нет то все равно слить - V
 
это не чатгпт будет и не бигдик
да даже если обученная модель разницы нет
в твоем класслоадере константы MASTER_KEY, SUBSTITUTION_BOX и ROTATION_TABLE вытащить руками из будки можно и изначальный файл уже лежит в ногах
 
Слить сразу - X
Спросить у типов и даже если все ответят нет то все равно слить - V
Неее, 100% если ответят нет, то 100% не будет слива, раз написали нет, то и не надо.
все ваши кастом класс лоадеры дампятся нищим агент дампером
if(jvm_args.contains("javaagent") return;
 
Сделал обфускатор который ломает класс и добавляет кастомный класслоадер и лаунчер главного класса. Нужно дофиксить: запуск обфусцированных читов, а также сделать нормальную обфускацию не через XOR.

Обфускатор сделан нейронкой, то есть полностью все коды от ИИ, но при этом на небольших джарках - работает. Как запускать джарки - разберетесь. Делаю 2 дня обфускатор и уже есть прогресс. В дальнейшем буду делать модификацию JVM и свою жвм для этого обфускатора в целом и ломание байткода по другому

Будет много людей, кому нужен обфускатор который хоть что то может - сливаю
для каких-то фри читов пойдет а для премки проще уже купить проту у кого-то нежели брать твою обфу
 
Сделал обфускатор который ломает класс и добавляет кастомный класслоадер и лаунчер главного класса. Нужно дофиксить: запуск обфусцированных читов, а также сделать нормальную обфускацию не через XOR.

Обфускатор сделан нейронкой, то есть полностью все коды от ИИ, но при этом на небольших джарках - работает. Как запускать джарки - разберетесь. Делаю 2 дня обфускатор и уже есть прогресс. В дальнейшем буду делать модификацию JVM и свою жвм для этого обфускатора в целом и ломание байткода по другому

Будет много людей, кому нужен обфускатор который хоть что то может - сливаю
если кто то может помочь в дс напишите - scaredead

ошибка:

Bash:
Expand Collapse Copy
C:\Users\bnn31\Documents\Java\FluxGuard>java -jar input-obf.jar -аргумент1 -аргумент2
[FluxGuard] Initializing CustomClassLoader...
CustomClassLoader initialized with 1 obfuscated classes
[FluxGuard] Preloading obfuscated classes...
Preloading 1 obfuscated classes...
[FluxGuard] Could not load deobfuscated class ru.scaredead.JarObfuscator, trying original: Invalid superclass index 33 in class file ru/scaredead/JarObfuscator
Exception in thread "main" java.lang.NoClassDefFoundError: ru/scaredead/JarObfuscator is not a class because access_flag ACC_MODULE is set
        at java.base/java.lang.ClassLoader.defineClass1(Native Method)
        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1023)
        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:887)
        at fluxguard.reborn.CustomClassLoader.findClass(CustomClassLoader.java:107)
        at fluxguard.reborn.CustomClassLoader.preloadClasses(CustomClassLoader.java:64)
        at fluxguard.reborn.ClassReader.main(ClassReader.java:28)
 
если кто то может помочь в дс напишите - scaredead

ошибка:

Bash:
Expand Collapse Copy
C:\Users\bnn31\Documents\Java\FluxGuard>java -jar input-obf.jar -аргумент1 -аргумент2
[FluxGuard] Initializing CustomClassLoader...
CustomClassLoader initialized with 1 obfuscated classes
[FluxGuard] Preloading obfuscated classes...
Preloading 1 obfuscated classes...
[FluxGuard] Could not load deobfuscated class ru.scaredead.JarObfuscator, trying original: Invalid superclass index 33 in class file ru/scaredead/JarObfuscator
Exception in thread "main" java.lang.NoClassDefFoundError: ru/scaredead/JarObfuscator is not a class because access_flag ACC_MODULE is set
        at java.base/java.lang.ClassLoader.defineClass1(Native Method)
        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1023)
        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:887)
        at fluxguard.reborn.CustomClassLoader.findClass(CustomClassLoader.java:107)
        at fluxguard.reborn.CustomClassLoader.preloadClasses(CustomClassLoader.java:64)
        at fluxguard.reborn.ClassReader.main(ClassReader.java:28)
мне ток что нейронка выдала класс лоадер который без ошибок и рабочий... ты там сколько пишешь класс лоадер обьясни
 
Назад
Сверху Снизу