Aplanamiento del flujo de control
controlFlowFlattening
~1.5x slower
Transforma la estructura del código para ocultar el flujo original del programa. Hace que el análisis manual sea mucho más difícil al convertir el código lineal en una máquina de estados con una sentencia switch.
// Before
function process() {
step1();
step2();
step3();
}
// After (flattened)
function process() {
var state = '0|1|2'.split('|'), i = 0;
while (true) {
switch (state[i++]) {
case '0': step1(); continue;
case '1': step2(); continue;
case '2': step3(); continue;
}
break;
}
}
El aplanamiento del flujo de control se combina bien con otras opciones básicas y con la ofuscación VM: la máquina de estados aplanada se transforma además en bytecode cuando la VM está activada.
