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

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
17 Ноя 2023
Сообщения
291
Реакции
3
Для начала что-бы написать наш мега обфускатор нужно скачать сурсы colonial: тык
Далее открываем папку transforms, видим пиздец который там написан на гпт, далее создаем новый класс StringEcn ( можете по другому ) далее туда переноситеосновной StringEncryption, далее его нужно пофиксить что-бы он не ломал наш чит, пишем примерно это:

StringEnc:
Expand Collapse Copy
package colonialobfuscator.transforms;

import org.objectweb.asm.*;
import org.objectweb.asm.tree.*;
import colonialobfuscator.utils.*;

import java.util.Random;

public class StringEnc implements ClassModifier {

    [USER=1367676]@override[/USER]
    public void modify(ClassNode node) {
        if ((node.access & Opcodes.ACC_INTERFACE) != 0) return;
               //if (node.name.startsWith("ЕСЛИ СУРС 2.0 ИМЕННО NEWCODE СЮДА ПУТЬ ДО ( если ты это увидел значит ты читаешь код йоу и это нахуй не надо или надо я не помню) "пон/чо-нить/control/user/")) return;

        String decryptorMethodName = "YouGameStr";
        String keyFieldName = "YouGameKey";
        String staticInitMethod = "YouGameEncryption";

        node.visitField(Opcodes.ACC_STATIC | Opcodes.ACC_PRIVATE, keyFieldName, "[C", null, null).visitEnd();

        for (MethodNode method : node.methods) {
            modifyMethod(method, node.name, decryptorMethodName);
        }

        addDecryptMethod(node, decryptorMethodName, keyFieldName);
        addStaticInitializer(node, keyFieldName, staticInitMethod);
    }

    private void modifyMethod(MethodNode method, String className, String decryptMethod) {
        InsnList instructions = method.instructions;
        if (instructions == null || instructions.size() == 0) return;
        for (AbstractInsnNode insn : instructions.toArray()) {
            if (insn instanceof LdcInsnNode) {
                LdcInsnNode ldc = (LdcInsnNode) insn;
                if (ldc.cst instanceof String) {
                    encryptString(instructions, ldc, className, decryptMethod);
                }
            }
        }
    }

    private void encryptString(InsnList instructions, LdcInsnNode ldc, String className, String decryptMethod) {
        String original = (String) ldc.cst;

        if (original.isEmpty()) return;

        String encrypted = simpleShiftEncrypt(original);

        InsnList newInstructions = new InsnList();
        newInstructions.add(new LdcInsnNode(encrypted));
        newInstructions.add(new MethodInsnNode(
                Opcodes.INVOKESTATIC,
                className,
                decryptMethod,
                "(Ljava/lang/String;)Ljava/lang/String;",
                false
        ));

        instructions.insertBefore(ldc, newInstructions);
        instructions.remove(ldc);
    }

    private static String simpleShiftEncrypt(String input) {
        char[] chars = input.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            chars[i] = (char) (chars[i] + 1);
        }
        return new String(chars);
    }

    private void addDecryptMethod(ClassNode node, String methodName, String keyField) {
        MethodNode decrypt = new MethodNode(
                Opcodes.ACC_PRIVATE | Opcodes.ACC_STATIC,
                methodName,
                "(Ljava/lang/String;)Ljava/lang/String;",
                null,
                null
        );

        decrypt.visitCode();
        decrypt.visitVarInsn(Opcodes.ALOAD, 0);
        decrypt.visitInsn(Opcodes.ICONST_1);
        decrypt.visitInsn(Opcodes.IADD);
        decrypt.visitInsn(Opcodes.I2C);
        decrypt.visitInsn(Opcodes.I2C);
        decrypt.visitInsn(Opcodes.ARETURN);

        decrypt.visitMaxs(2, 1);
        decrypt.visitEnd();
        node.methods.add(decrypt);
    }

    private void addStaticInitializer(ClassNode node, String keyField, String initMethod) {
        MethodNode clinit = NodeUtils.getOrCreateClinit(node);

        char[] key = new char[] {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p'};

        InsnList instructions = new InsnList();
        instructions.add(new LdcInsnNode(new String(key)));
        instructions.add(new MethodInsnNode(
                Opcodes.INVOKEVIRTUAL,
                "java/lang/String",
                "toCharArray",
                "()[C",
                false
        ));
        instructions.add(new FieldInsnNode(
                Opcodes.PUTSTATIC,
                node.name,
                keyField,
                "[C"
        ));

        if (clinit.instructions.size() == 0) {
            clinit.instructions.add(instructions);
            clinit.instructions.add(new InsnNode(Opcodes.RETURN));
        } else {
            clinit.instructions.insertBefore(clinit.instructions.getFirst(), instructions);
        }
    }
}

далее идем в класс ObfuscationPanel на 31 строке пишем public static JCheckBox StrEncBox;

далее идем на 71 строку и пишем это

Код:
Expand Collapse Copy
        StrEncBox = new JCheckBox("StrEnc");
        StrEncBox.setBackground(Color.WHITE);
        GridBagConstraints gbc_StrEncBox = new GridBagConstraints();
        gbc_StrEncBox.anchor = GridBagConstraints.WEST;
        gbc_StrEncBox.insets = new Insets(0, 0, 5, 0);
        gbc_StrEncBox.gridx = 1;
        gbc_StrEncBox.gridy = 1;
        add(StrEncBox, gbc_StrEncBox);

далее идем в OutputUtil и там на 41 строке пишем
if(ObfuscationPanel.StrEncBox.isSelected()) {
modifier.add(new StringEnc());
}

должно быть как то так
if(ObfuscationPanel.NumberObfuscationCheckBox.isSelected()) {
modifier.add(new ModifierNumbers());
}
if(ObfuscationPanel.StrEncBox.isSelected()) {
modifier.add(new StringEnc());
}
if(ObfuscationPanel.StringEcryptionCheckBox.isSelected()) {
modifier.add(new StringEncryption());
}


далее запускаем наше чудо и проверяем, вот что было:

Код:
Expand Collapse Copy
public class Main {
    public Main() {
    }

    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

и что стало (это пример если что но майнкрафт клиенты оно не сломает )

Код:
Expand Collapse Copy
public class Main {
    private static char[] YouGameKey = "abcdefghijklmnop".toCharArray();

    public Main() {
    }

    public static void main(String[] var0) {
        System.out.println(YouGameStr("Ifmmp-!Xpsme\""));
    }

    private static String YouGameStr(String var0) {
        return (char)((char)(var0 + 1));
    }
}

Делать 2 часть?:blush: (во 2 части все будет подробно описаны методы обфускации и мделаем болшуя работу)
 
Последнее редактирование:
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
у меня есть идея как портал к проте пастерам открыть
 
Полушарие пастеров гниет и они выкладывают колониал
 
Делать 2 часть?:blush: (во 2 части все будет подробно описаны методы обфускации и мделаем болшуя работу)
дерьмище тотальное, во первых пытаться переписать колониал уже пиздец
ame.startsWith("ЕСЛИ СУРС 2.0 ИМЕННО NEWCODE СЮДА ПУТЬ ДО ( если ты это увидел значит ты читаешь код йоу и это нахуй не надо или надо я не помню) "пон/чо-нить/control/user/")) return
во вторых что это за поебень
 
Назад
Сверху Снизу