Иконка ресурса

Обфускация имён в Minecraft

necauqua

когда-то был anti344
Администратор
1,216
27
172
necauqua добавил(а) новый ресурс:

Обфускация имён в Minecraft - Коротко о разных названиях методов, полей и классов в разных местах, и что такое маппинги

Итак, для экономии места, запутывания моддеров, и по прочим причинам, после финальной компиляции игры, её классы обфусцируются.

Как вы скорее всего знаете, обфускация - процесс переименовывания длинных читабельных названий в короткие - виртуальная машина спокойно себе с ними работает, а вот нам мешкам с костями, уже посложнее.

Итак, в игре и в моддинге всего существует три типа именований.
  • Notch names - все те aa, ab, aj, которые вы можете увидеть...

Узнать больше об этом ресурсе...
 

necauqua

когда-то был anti344
Администратор
1,216
27
172
Не, не, он тупой, и ты ему просто даёшь несколько вариантов имени (обычно mcp и srg) и он просто по очереди пытается достать такое поле/метод
 

necauqua

когда-то был anti344
Администратор
1,216
27
172
Ну я глянул, ObfuscationReflectionHelper просто вызывает ReflectionHelper и ещё чуть-чуть логгирует при ошибке.
Фигово значит определили чуваки из MCP, как назвать класс, хызы
 

tox1cozZ

aka Agravaine
8,454
598
2,890
Там есть такой метод и он вызывается для переданных строк, только он вот не пашет чего-то, либо я криворукий)
Java:
public static String[] remapFieldNames(String className, String... fieldNames)
    {
        String internalClassName = FMLDeobfuscatingRemapper.INSTANCE.unmap(className.replace('.', '/'));
        String[] mappedNames = new String[fieldNames.length];
        int i = 0;
        for (String fName : fieldNames)
        {
            mappedNames[i++] = FMLDeobfuscatingRemapper.INSTANCE.mapFieldName(internalClassName, fName, null);
        }
        return mappedNames;
    }
 
5,018
47
783
Есть вопрос в тему: можно ли декомпилировать майн, а потом все эти декомпилированные функции и переменные вернуть в вид, чтобы все работало прям сразу... Просто один модик надо доделать, а сурцы утрачены :(
А вручную кучу классов с именами не хочется переделывать.
 

necauqua

когда-то был anti344
Администратор
1,216
27
172
@Agravaine
Ага, увидел.
Оно действительно может работать, если есть путь к маппингу в системной проперти "net.minecraftforge.gradle.GradleStart.srg.srg-mcp"
То бишь в IDE даже будет работать, но вот готовые моды не знают откуда взять маппинг.
Ну, насколько я понял

Я тут вообще пытаюсь сделать хитрый gradle task, который будет особые строковые константы маппить (в гредле при билде там есть откуда достать маппинги).
Типа ты пишешь там шото вроде getField("@mcp:thePlayer:2") или какой другой уникальный шаблон (это я про часть с @mcp: ) и оно само реплейснет строку на второй srg для строки thePlayer (ну прост в разных классах есть переменные с одинаковым названием, а SRG названия уникальны, потому есть маппинг SRG->MCP но не наоборот).
 

necauqua

когда-то был anti344
Администратор
1,216
27
172
Есть вопрос в тему: можно ли декомпилировать майн, а потом все эти декомпилированные функции и переменные вернуть в вид, чтобы все работало прям сразу... Просто один модик надо доделать, а сурцы утрачены :(
А вручную кучу классов с именами не хочется переделывать.
Я не помню как там работает BON (утилита для маппингов вроде от ChickenBones, но что она там конкретно делает не помню), но можно просто наговнокодить скриптик, который по fields.csv и methods.csv тупо прореплейсит все встречающиеся field_1232_g и так далее, на то они и уникальные.
 
5,018
47
783
Как называется?
 
5,018
47
783
Чтот не очень понял, чем особо он от бонато отличается?
 

necauqua

когда-то был anti344
Администратор
1,216
27
172
По скринам выглядит точно так же, как BON
 
Сверху