Начинающий
- Статус
- Оффлайн
- Регистрация
- 17 Ноя 2023
- Сообщения
- 291
- Реакции
- 3
Для начала что-бы написать наш мега обфускатор нужно скачать сурсы colonial: тык
Далее открываем папку transforms, видим пиздец который там написан на гпт, далее создаем новый класс StringEcn ( можете по другому ) далее туда переноситеосновной StringEncryption, далее его нужно пофиксить что-бы он не ломал наш чит, пишем примерно это:
далее идем в класс ObfuscationPanel на 31 строке пишем public static JCheckBox StrEncBox;
далее идем на 71 строку и пишем это
далее идем в 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());
}
далее запускаем наше чудо и проверяем, вот что было:
и что стало (это пример если что но майнкрафт клиенты оно не сломает )
Делать 2 часть?:blush: (во 2 части все будет подробно описаны методы обфускации и мделаем болшуя работу)
Далее открываем папку transforms, видим пиздец который там написан на гпт, далее создаем новый класс StringEcn ( можете по другому ) далее туда переноситеосновной StringEncryption, далее его нужно пофиксить что-бы он не ломал наш чит, пишем примерно это:
StringEnc:
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 строку и пишем это
Код:
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());
}
далее запускаем наше чудо и проверяем, вот что было:
Код:
public class Main {
public Main() {
}
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
и что стало (это пример если что но майнкрафт клиенты оно не сломает )
Код:
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 части все будет подробно описаны методы обфускации и мделаем болшуя работу)
Последнее редактирование: