Гайд Пишем "свой" обфускатор для майнкрафт | any base #2

Начинающий
Статус
Оффлайн
Регистрация
6 Янв 2025
Сообщения
39
Реакции[?]
0
Поинты[?]
0
АХАХАХХАХАХАХАХАХ скачал я значит твой мега деобфускатор ну вот что осталось
Пожалуйста, авторизуйтесь для просмотра ссылки.
(noad ни риклама честна)

я для югейма такое написал, я в своем обфускаторе норм код писал и обфускацию йоу

Крч я посморел порядка 20 классов, он даже числа не вернул АХХАХАХАХАХАХ а про иероглифы китайские и эмодзи я уж вообще молчу xdxdxdxdxdxdxdxdxdxdxd лучше бы не писал данное сообщение xdxdxddxdxdx
А нахуй мне твои ебаные строчки спрятанные, если я их твоего когда буду логику пиздить. Я по случае просто туда свои стринги ебануть. Он у тебя логику не прячет
package aether.ru.

Ну в целом судя по тому что у тебя пакейдж нахуй развернут :bayan:
 
Начинающий
Статус
Оффлайн
Регистрация
30 Дек 2024
Сообщения
37
Реакции[?]
0
Поинты[?]
0
Так-как многие просили а точнее никто делаю 2 часть
1.FlowObfuscation - этот метод обфускации просто добавляет если просто говоря то мусорный код вот пример:
До:
Код:
public class Main {
    public static int result(int a, int b) {
        return a + b;
    }

    public static void main(String[] args) {
        int result = sumOfTwoNumbers(3, 5);
        System.out.println(result);
    }
}
После:

Код:
public class Main{
    public static int a1(int x, int y) {
        if (x > y) {
            return x + y;
        } else {
            return y + x;
        }
    }

    public static int a2() {
        return 5;
    }

    public static int a3() {
        return 3;
    }

    public static int sumOfTwoNumbers(int a, int b) {
        int temp = a1(a, b);
        temp = a2() + temp;
        return temp;
    }

    public static void main(String[] args) {
        int result = sumOfTwoNumbers(a3(), a2());
        System.out.println(result);
    }
}
Вот как выглядитего код обфускации ( примерный ):
Код:
@Override
    public void modify(ClassNode node) {
        for (MethodNode method : node.methods) {
            if (!method.name.startsWith("<")) {
                for (AbstractInsnNode insnNode : method.instructions.toArray()) {
                    
                    if (shouldObfuscate(insnNode)) {
                        int insertCount = 1 + RANDOM.nextInt(5);
                        for (int i = 0; i < insertCount; i++) {
                            insertRandomOperations(method, insnNode);
                        }
                    }
                    
                    if (insnNode.getOpcode() == Opcodes.DUP) {
                        obfuscateDupMethod(method);
                    }
                }
            }
        }
private void obfuscateDupMethod(MethodNode method) {
        method.instructions.insert(new InsnNode(Opcodes.POP2));
        method.instructions.insert(new LdcInsnNode(NameGen.String(1)));
        method.instructions.insert(new InsnNode(Opcodes.POP));

        if (RANDOM.nextBoolean()) {
            for (int i = 0; i < 2 + RANDOM.nextInt(5); i++) {
                method.instructions.insert(new InsnNode(Opcodes.SWAP));
            }
        }

        if (RANDOM.nextBoolean()) {
            method.instructions.insert(new InsnNode(Opcodes.POP));
        } else {
            method.instructions.insert(new InsnNode(Opcodes.DUP));
            method.instructions.insert(new InsnNode(Opcodes.POP2));
        }

        method.instructions.insert(new LdcInsnNode(NameGen.String(1)));
        method.instructions.insert(new LdcInsnNode(NameGen.String(1)));
        method.instructions.insert(new LdcInsnNode(NameGen.String(1)));
    }
}
2.NumbersModifier - меняет числа все и добавляет лишнее вот пример обфусцированый ( это моя версия переписаная в обычном колониал он другой)

Код:
public class Main {
    public static void main(String[] args) {
        long key = -164701876253981L;
        int varIndex = 1; 


        long value1 = -2078941969276575294L;
        long value2 = key ^ value1;
        int value1X = (int) value2;

        int a = 5;
        int b = 10;
        int c = a + b;

        int xorValue1 = 2026340751;
        int xorValue2 = 485239483;   
        c = c ^ xorValue1;
        c = c ^ xorValue2;

        System.out.println("Result: " + c);
    }
}
3. LocalVariables - меняет название локальных переменных и тд йоу пример обфусцированого кода не нужен
Теперь зная все это приступим к написани, код своего обф я вам не дам но вот что я написал за +- час

LocalVariables:
package colonialobfuscator.transforms;

import static colonialobfuscator.guis.SettingsPanel.namesLenghtField;

import colonialobfuscator.utils.OutputUtil;
import org.objectweb.asm.tree.ClassNode;
import org.objectweb.asm.tree.LocalVariableNode;
import org.objectweb.asm.tree.MethodNode;
import org.objectweb.asm.tree.ParameterNode;

import colonialobfuscator.utils.NameGen;

import java.util.Random;

public class LocalVariables implements ClassModifier {

    private static final Random RANDOM = new Random();

    [USER=1367676]@override[/USER]
    public void modify(ClassNode node) {
        for (MethodNode method : node.methods) {
            if (method.localVariables != null && method.localVariables.size() > 0) {
                for (LocalVariableNode var : method.localVariables) {
                    String newName = NameGen.colonial() + NameGen.String(OutputUtil.namesLenght);
                    var.name = newName;

                    if (RANDOM.nextBoolean()) {
                        String alias = NameGen.colonial() + NameGen.String(OutputUtil.namesLenght);
                        var.name += "_" + alias;
                    }

                    if (RANDOM.nextBoolean()) {
                        swapLocalVariables(method);
                    }
                }
            }

            if (method.parameters != null && method.parameters.size() > 0) {
                for (ParameterNode param : method.parameters) {
                    // Генерация нового имени для параметра
                    String newName = NameGen.colonial() + NameGen.String(OutputUtil.namesLenght);
                    param.name = newName;

                    if (RANDOM.nextBoolean()) {
                        insertHiddenParameter(method);
                    }
                }
            }
        }
    }

    private void swapLocalVariables(MethodNode method) {
        if (method.localVariables.size() > 1) {
            int index1 = RANDOM.nextInt(method.localVariables.size());
            int index2 = RANDOM.nextInt(method.localVariables.size());

            LocalVariableNode var1 = method.localVariables.get(index1);
            LocalVariableNode var2 = method.localVariables.get(index2);

            String tempName = var1.name;
            var1.name = var2.name;
            var2.name = tempName;
        }
    }

    private void insertHiddenParameter(MethodNode method) {
        String hiddenName = NameGen.colonial() + NameGen.String(OutputUtil.namesLenght);
        String none = "";
        ParameterNode hiddenParam = new ParameterNode(none,1);
        hiddenParam.name = hiddenName;
        
        method.parameters.add(0, hiddenParam);
    }
}

ObfNumber:
package colonialobfuscator.transforms;

import java.util.Random;

import org.objectweb.asm.Opcodes;
import org.objectweb.asm.tree.AbstractInsnNode;
import org.objectweb.asm.tree.ClassNode;
import org.objectweb.asm.tree.InsnList;
import org.objectweb.asm.tree.InsnNode;
import org.objectweb.asm.tree.IntInsnNode;
import org.objectweb.asm.tree.LdcInsnNode;
import org.objectweb.asm.tree.VarInsnNode;

public class ModifierNumbers implements ClassModifier {

    private static final Random RANDOM = new Random();

    [USER=1367676]@override[/USER]
    public void modify(ClassNode classNode) {
        classNode.methods.stream().forEach(mn -> {
            long key = new Random().nextLong();
            int varIndex = mn.maxLocals;
            mn.maxLocals++;

            InsnList keyStore = new InsnList();
            keyStore.add(new LdcInsnNode(key));
            keyStore.add(new VarInsnNode(LSTORE, varIndex));
            mn.instructions.insertBefore(mn.instructions.getFirst(), keyStore);

            for (AbstractInsnNode insn : mn.instructions.toArray()) {
                if (isIntInsn(insn)) {
                    try {
                        int originalNum = getIntegerFromInsn(insn);
                        int value1 = RANDOM.nextInt();
                        int value2 = originalNum ^ value1;

                        InsnList insnList = new InsnList();
                        insnList.add(new LdcInsnNode(value1));
                        insnList.add(new LdcInsnNode(value2));
                        insnList.add(new InsnNode(IXOR));
                        insnList.add(new InsnNode(IXOR));
                        insnList.add(new LdcInsnNode(0));

                        mn.instructions.insertBefore(insn, insnList);
                        mn.instructions.remove(insn);
                        
                        mn.instructions.insertBefore(insn, new InsnNode(Opcodes.POP));
                        mn.instructions.insertBefore(insn, new LdcInsnNode(0));
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                } else if (isLongInsn(insn)) {
                    try {
                        long originalNum = getLongFromInsn(insn);
                        long value1 = new Random().nextLong();
                        long value2 = originalNum ^ value1;

                        InsnList insnList = new InsnList();
                        insnList.add(new LdcInsnNode(value1));
                        insnList.add(new LdcInsnNode(value2));
                        insnList.add(new InsnNode(LXOR));
                        insnList.add(new LdcInsnNode(0));

                        mn.instructions.insertBefore(insn, insnList);
                        mn.instructions.remove(insn);
                        
                        mn.instructions.insertBefore(insn, new InsnNode(Opcodes.POP2));
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                } else if (isFloatInsn(insn)) {
                    try {
                        float originalNum = getFloatFromInsn(insn);
                        int value1 = Float.floatToIntBits(originalNum);
                        int value2 = new Random().nextInt();

                        InsnList insnList = new InsnList();
                        insnList.add(new LdcInsnNode(value1));
                        insnList.add(new LdcInsnNode(value2));
                        insnList.add(new InsnNode(IXOR));
                        insnList.add(new InsnNode(I2F));
                        insnList.add(new LdcInsnNode(0.0f));

                        mn.instructions.insertBefore(insn, insnList);
                        mn.instructions.remove(insn);
                        
                        mn.instructions.insertBefore(insn, new InsnNode(Opcodes.POP));
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        });
    }

    public static boolean isIntInsn(AbstractInsnNode insn) {
        if (insn == null) {
            return false;
        }
        int opcode = insn.getOpcode();
        return ((opcode >= Opcodes.ICONST_M1 && opcode <= Opcodes.ICONST_5)
                || opcode == Opcodes.BIPUSH
                || opcode == Opcodes.SIPUSH
                || (insn instanceof LdcInsnNode && ((LdcInsnNode) insn).cst instanceof Integer));
    }

    public static boolean isLongInsn(AbstractInsnNode insn) {
        int opcode = insn.getOpcode();
        return (opcode == Opcodes.LCONST_0
                || opcode == Opcodes.LCONST_1
                || (insn instanceof LdcInsnNode && ((LdcInsnNode) insn).cst instanceof Long));
    }

    public static boolean isFloatInsn(AbstractInsnNode insn) {
        int opcode = insn.getOpcode();
        return (opcode >= Opcodes.FCONST_0 && opcode <= Opcodes.FCONST_2)
                || (insn instanceof LdcInsnNode && ((LdcInsnNode) insn).cst instanceof Float);
    }

    public static int getIntegerFromInsn(AbstractInsnNode insn) throws Exception {
        int opcode = insn.getOpcode();

        if (opcode >= Opcodes.ICONST_M1 && opcode <= Opcodes.ICONST_5) {
            return opcode - 3;
        } else if (insn instanceof IntInsnNode && insn.getOpcode() != Opcodes.NEWARRAY) {
            return ((IntInsnNode) insn).operand;
        } else if (insn instanceof LdcInsnNode && ((LdcInsnNode) insn).cst instanceof Integer) {
            return (Integer) ((LdcInsnNode) insn).cst;
        }

        throw new Exception("Unexpected instruction");
    }

    public static long getLongFromInsn(AbstractInsnNode insn) throws Exception {
        int opcode = insn.getOpcode();

        if (opcode >= Opcodes.LCONST_0 && opcode <= Opcodes.LCONST_1) {
            return opcode - 9;
        } else if (insn instanceof LdcInsnNode && ((LdcInsnNode) insn).cst instanceof Long) {
            return (Long) ((LdcInsnNode) insn).cst;
        }

        throw new Exception("Unexpected instruction");
    }

    public static float getFloatFromInsn(AbstractInsnNode insn) throws Exception {
        int opcode = insn.getOpcode();

        if (opcode >= Opcodes.FCONST_0 && opcode <= Opcodes.FCONST_2) {
            return opcode - 11;
        } else if (insn instanceof LdcInsnNode && ((LdcInsnNode) insn).cst instanceof Float) {
            return (Float) ((LdcInsnNode) insn).cst;
        }

        throw new Exception("Unexpected instruction");
    }
}
Ну все йоу топавая обф майнкрафт 228 йоу написана класс ремап в 3 туториале будет йоууу
чат гпт тоже самое напишет а то и лучше
 
Начинающий
Статус
Оффлайн
Регистрация
17 Ноя 2023
Сообщения
249
Реакции[?]
2
Поинты[?]
3K
чат гпт тоже самое напишет а то и лучше
Пиздец что вам не нравится я это писал чисто для югейма что бы была не прота нурсултан альфа 228 42 а просто прота которую обычными деобф не снимешь а насчет что гпт лучше напишет ну и похуй
 
Начинающий
Статус
Онлайн
Регистрация
19 Фев 2024
Сообщения
370
Реакции[?]
3
Поинты[?]
2K
Пиздец что вам не нравится я это писал чисто для югейма что бы была не прота нурсултан альфа 228 42 а просто прота которую обычными деобф не снимешь а насчет что гпт лучше напишет ну и похуй
По стрингам похожую хрень юзал раньше теперь кое что другое по лучше а твои стринги снимаются парсом ключей и тд
 
MetalHead
EXCLUSIVE
Статус
Оффлайн
Регистрация
20 Фев 2025
Сообщения
30
Реакции[?]
3
Поинты[?]
3K
Пиздец что вам не нравится я это писал чисто для югейма что бы была не прота нурсултан альфа 228 42 а просто прота которую обычными деобф не снимешь а насчет что гпт лучше напишет ну и похуй
Очередное оправдание своего обсёра из разряда - "Да чуваки вы что, это не я нихуя не умею. Это я просто для форума писал. Так то я в 100 раз умнее."
 
Сверху Снизу