Control Flow Flattening / Switch Obfuscation
Влияние на механику Minecraft
Линейное выполнение методов разбивается на блоки и помещается в бесконечный цикл while(true), управляемый конечным автоматом на основе инструкций switch.
Анализируемые функции и API
tableswitch / lookupswitch
Инструкции ветвления байткода JVM.
Реализация в моде (Исходный код)
// Obfuscated Control Flow
int state = 0;
while (true) {
switch (state) {
case 0: doStepA(); state = 2; break;
case 1: doStepC(); return;
case 2: doStepB(); state = 1; break;
}
}
Декомпилированный вид (Vineflower)
// Decompiled with Vineflower 1.12
int state = 0;
while(true) {
switch (state) {
case 0:
doStepA();
state = 2;
break;
case 1:
doStepC();
return;
case 2:
doStepB();
state = 1;
}
}
Сигнатура байткода и статический детект
Высокая плотность инструкций switch (>0.08), зацикленных на переменную состояния.