js-confuser
js-confuser copied to clipboard
feat: convert while loops to for loops
Is your feature request related to a problem? Please describe. Would make reverse engineering a tiny bit harder.
Describe the solution you'd like
// before
while(cond) { /* ... */ }
// after
for(;cond;) { /* ... */ }
// or with dead code, to make it less obvious
for(let _temp = 0; _temp >= 0 && cond; _temp+) { /* ... */ }
Hi this is already done with Control Flow Flattening
// Input
while(cond) { /* ... */ }
var filler1;
var filler2;
// Output
var C9ao9H = -657;
var jp6fQY = 409;
var CBsxum = 343;
var XAx1z8 = 40;
var vi13y9_ = {
'n': function () {
typeof (vi13y9_['a'] = cond, vi13y9_['h']());
return 'l';
},
'H': function () {
!(vi13y9_['a'] = cond, XAx1z8 += -70, vi13y9_['b'] = false);
return 'F';
},
'aj': -398,
'P': function (XAx1z8 = vi13y9_['K'] == -777) {
if (!XAx1z8) {
return C9ao9H == -2;
}
return C9ao9H += 57, jp6fQY += vi13y9_['O'], CBsxum += -92;
},
'Y': function (jp6fQY = CBsxum == -55) {
if (jp6fQY) {
return vi13y9_;
}
return C9ao9H += vi13y9_['Q'] == 67 ? vi13y9_['X'] : -57;
},
'J': 852,
'ab': 768,
'Q': 686,
't': function () {
return CBsxum *= 2, CBsxum -= 145;
},
'h': function (jp6fQY = XAx1z8 == vi13y9_['i']) {
if (jp6fQY) {
return 'j';
}
return C9ao9H += -50, vi13y9_['g'](), XAx1z8 += -70, vi13y9_['b'] = false;
},
'an': function () {
return CBsxum += 99;
},
'g': () => {
return CBsxum += jp6fQY == -56 ? 'e' : 99;
},
'u': function (jp6fQY = C9ao9H == 521) {
if (!jp6fQY) {
return vi13y9_['w']();
}
return CBsxum *= 2, CBsxum -= 435;
},
's': 37,
'ao': 429,
'af': function () {
return C9ao9H += 0;
},
'O': -105,
'i': -33,
'U': function () {
return CBsxum += -92;
},
'ap': 1033,
'z': function (Mp_d3Mm = vi13y9_['i'] == 343) {
if (Mp_d3Mm) {
return arguments;
}
if (XAx1z8 == C9ao9H + 667) {
void (C9ao9H += 1178, jp6fQY += C9ao9H + -1184, vi13y9_['u'](), XAx1z8 += -438);
return 'x';
}
C9ao9H += CBsxum + -306;
return 'x';
},
'K': -777,
'N': function () {
return XAx1z8 += CBsxum == 70 ? vi13y9_['M'] : 154;
},
'ai': () => {
return C9ao9H += jp6fQY == -21 ? 53 : -1235;
},
'd': () => {
return C9ao9H *= CBsxum + -237, C9ao9H -= -1661;
},
['aw']: function (vi13y9_, jp6fQY) {
return vi13y9_['c'] ? 231 : jp6fQY != -254 && jp6fQY - -466;
},
['ax']: function (vi13y9_) {
return vi13y9_['b'] ? -531 : 102;
},
['ay']: function (XAx1z8) {
return XAx1z8 - -95;
}
};
while (C9ao9H + jp6fQY + CBsxum + XAx1z8 != 15) {
switch (C9ao9H + jp6fQY + CBsxum + XAx1z8) {
case 118:
case 817:
case 905:
case 623:
var Mp_d3Mm;
typeof (vi13y9_['d'](), jp6fQY += -768, CBsxum += 12, XAx1z8 += -438);
break;
case 53:
case 177:
case 354:
void (C9ao9H += CBsxum + (jp6fQY + 314), XAx1z8 += -368, vi13y9_['c'] = false);
break;
case 353:
case 841:
case 23:
case 149:
vi13y9_['N']();
break;
case 980:
case C9ao9H - 441:
if (false) {
!(vi13y9_['af'](), jp6fQY += 0, CBsxum += 0, XAx1z8 += 0);
break;
}
typeof (jp6fQY = -105, vi13y9_['ai'](), jp6fQY += CBsxum + (vi13y9_['aj'] == -398 ? 452 : 18), vi13y9_['an'](), XAx1z8 += 438);
break;
case 166:
case 113:
default:
typeof (C9ao9H += -1141, jp6fQY += 777, XAx1z8 += 438);
break;
case 123:
if (vi13y9_['n']() == 'l') {
break;
}
case 172:
if (vi13y9_['H']() == 'F') {
break;
}
case 34:
case 798:
case 437:
void (vi13y9_ = undefined, CBsxum = 56, C9ao9H += -57, jp6fQY += XAx1z8 + vi13y9_['ao'], CBsxum *= 2, CBsxum -= XAx1z8 + (XAx1z8 + vi13y9_['ap']));
break;
case 36:
!(vi13y9_['a'] = vi13y9_['r'] = cond, C9ao9H += vi13y9_['s'], vi13y9_['t'](), XAx1z8 += -70, vi13y9_['b'] = false);
break;
case 212:
case 110:
case 369:
if (false) {
vi13y9_['P']();
break;
}
var sHhWPd;
vi13y9_['U']();
break;
case 342:
case 72:
case 584:
case 133:
!(C9ao9H = 109, vi13y9_['Y'](), jp6fQY += 105, CBsxum += 92);
break;
case 498:
case vi13y9_['ax'](vi13y9_):
if ((XAx1z8 == -30 ? vi13y9_ : undefined)['a']) {
void (C9ao9H += vi13y9_['J'], jp6fQY += vi13y9_['K'], XAx1z8 += -154);
break;
}
!(C9ao9H += 1141, jp6fQY += -663, XAx1z8 += -368);
break;
case 120:
case 117:
case 709:
var Mp_d3Mm;
jp6fQY += -105;
break;
case vi13y9_['ay'](XAx1z8):
delete vi13y9_['as'];
if (vi13y9_['z']() == 'x') {
break;
}
case 1:
case 92:
case 121:
case 65:
void (jp6fQY = -150, C9ao9H += -1198, jp6fQY += vi13y9_['ab'], CBsxum += CBsxum + -145, XAx1z8 += vi13y9_['s'] == 409 ? vi13y9_['ae'] : 368, vi13y9_['b'] = false);
break;
}
}
There is a requirement of 3 or more statements for Control Flow Flattening to apply. Maybe this could change?
Closing for now