AST交互-三元表达式转switch语句
閱讀時間:全文 3563 字,預估用時 18 分鐘
創作日期:2022-08-16
下篇文章:AST交互-if语句转switch语句
BEGIN
这两年前端代码加密进化很大,为了在逆向过程中不那么累,我们需要使用babel修改网站源码,改成我们调试不那么累的代码,如将三元表达式语句代码改成switch语句代码。
我们找到网站实际代码如下:
if (_$j7 <= 63)
_$j7 <= 15 ? _$j7 <= 3 ? _$j7 <= 0 ? (_$kb = _$jA[--_$g3],
_$kb = _$jA[--_$g3] * _$kb,
_$jA[_$g3++] = _$kb) : _$j7 <= 1 ? (_$kb = _$jA[--_$g3],
_$kb = _$jA[--_$g3] & _$kb,
_$jA[_$g3++] = _$kb) : _$j7 <= 2 ? _$jA[_$g3++] = _$gD[_$gf[++_$f1]] : _$jA[_$g3++] = true : _$j7 <= 7 ? _$j7 <= 4 ? (_$fx = _$gf[++_$f1],
_$kb = _$jA[--_$g3],
!_$kb ? (_$f1 += _$fx,
++_$g3) : 0) : _$j7 <= 5 ? (_$kb = _$jA[--_$g3],
_$du(),
_$kb = _$cR[_$fx] |= _$kb) : _$j7 <= 6 ? _$jA[_$g3++] = _$aG[_$gf[++_$f1]] : (_$kb = _$jA[--_$g3],
_$kb = _$jA[--_$g3] !== _$kb,
_$jA[_$g3++] = _$kb) : _$j7 <= 11 ? _$j7 <= 8 ? (_$g3 -= 2,
_$kb = _$g3,
_$du(),
_$cR = _$cR[_$fx],
_$jA[_$g3++] = _$cR(_$jA[_$kb], _$jA[_$kb + 1])) : _$j7 <= 9 ? (_$g3--,
_$kb = _$g3,
_$du(),
_$cR = _$cR[_$fx],
_$jA[_$g3++] = _$cR(_$jA[_$kb])) : _$j7 <= 10 ? (_$ka = _$gf[++_$f1],
_$f1 += _$ka) : (_$kC = _$gf[++_$f1],
_$jA[_$g3++] = _$dz[_$kC][_$gf[++_$f1]]) : _$j7 <= 12 ? (_$kb = _$jA[--_$g3],
_$iv[4] = 1,
_$iv[5] = _$kb,
_$f1 = _$_0) : _$j7 <= 13 ? (_$g3 -= 3,
_$kb = _$g3,
_$du(),
_$cR = _$cR[_$fx],
_$kb = _$cR(_$jA[_$kb], _$jA[_$kb + 1], _$jA[_$kb + 2])) : _$j7 <= 14 ? (_$ka = _$gf[++_$f1],
_$f1 -= _$ka) : (_$kC = _$gf[++_$f1],
_$jA[_$g3++] = _$ko[_$kC][_$gf[++_$f1]]) : _$j7 <= 31 ? _$j7 <= 19 ? _$j7 <= 16 ? (_$g3--,
_$kb = _$g3,
_$du(),
_$kb = _$cR[_$fx](_$jA[_$kb])) : _$j7 <= 17 ? (_$g3--,
_$kb = _$g3,
_$du(),
_$jA[_$g3++] = _$cR[_$fx](_$jA[_$kb])) : _$j7 <= 18 ? (_$kb = _$jA[--_$g3],
_$kb = _$jA[--_$g3]in _$kb,
_$jA[_$g3++] = _$kb) : (_$kb = _$jA[--_$g3],
_$cR = _$jA[_$g3 - 1],
_$cR[_$j4[_$gf[++_$f1]]] = _$kb) : _$j7 <= 23 ? _$j7 <= 20 ? _$jA[_$g3++] = [] : _$j7 <= 21 ? (_$gf[_$f1] = 26,
_$fx = _$gf[++_$f1],
_$kb = _$j4[_$fx],
_$gf[_$f1] = _$kb,
_$jA[_$g3++] = _$kb) : _$j7 <= 22 ? (_$kb = _$jA[--_$g3],
_$du(),
_$kb = _$cR[_$fx] += _$kb) : _$jA[_$g3++] = _$cL[_$gf[++_$f1]] : _$j7 <= 27 ? _$j7 <= 24 ? (_$fx = _$jA[--_$g3],
_$cR = _$jA[--_$g3]) : _$j7 <= 25 ? (_$kb = _$jA[--_$g3],
_$du(),
_$cR[_$fx] = _$kb) : _$j7 <= 26 ? _$jA[_$g3++] = _$gf[++_$f1] : (_$kC = _$gf[++_$f1],
_$fx = _$gf[++_$f1],
_$cR = _$dz[_$kC]) : _$j7 <= 28 ? (_$du(),
_$jA[_$g3++] = _$cR[_$fx]()) : _$j7 <= 29 ? (_$g3 -= 2,
_$kb = _$g3,
_$du(),
_$jA[_$g3++] = _$cR[_$fx](_$jA[_$kb], _$jA[_$kb + 1])) : _$j7 <= 30 ? (_$kb = _$jA[--_$g3],
_$kb = _$jA[--_$g3] > _$kb,
_$jA[_$g3++] = _$kb) : (_$du(),
_$cR = _$cR[_$fx],
_$jA[_$g3++] = _$cR()) : _$j7 <= 47 ? _$j7 <= 35 ? _$j7 <= 32 ? (_$cG(_$$I, _$gf[++_$f1], _$gf[++_$f1], _$ka = _$gf[++_$f1], _$gf[++_$f1], _$f1 + 1, _$aG, _$iv),
_$iv[4] ? _$f1 = _$_0 : _$f1 += _$ka) : _$j7 <= 33 ? (_$fx = _$gf[++_$f1],
_$cR = _$gD) : _$j7 <= 34 ? (_$kb = _$jA[--_$g3],
_$kb = _$jA[--_$g3] != _$kb,
_$jA[_$g3++] = _$kb) : (_$du(),
_$cR = _$cR[_$fx],
_$kb = _$cR()) : _$j7 <= 39 ? _$j7 <= 36 ? (_$g3--,
_$kb = _$g3,
_$du(),
_$cR = _$cR[_$fx],
_$kb = _$cR(_$jA[_$kb])) : _$j7 <= 37 ? (_$gf[_$f1] = 92,
_$fx = _$f3[_$gf[++_$f1]],
_$gf[_$f1] = _$fx,
_$cR = _$jA[--_$g3]) : _$j7 <= 38 ? (_$kb = _$jA[--_$g3],
_$ka = _$gf[++_$f1],
_$kb ? 0 : _$f1 += _$ka) : (_$fx = _$gf[++_$f1],
_$kb = _$jA[--_$g3],
_$kb ? (_$f1 += _$fx,
++_$g3) : 0) : _$j7 <= 43 ? _$j7 <= 40 ? _$jA[_$g3++] = {} : _$j7 <= 41 ? (_$kb = _$jA[--_$g3],
_$kb = _$jA[--_$g3] == _$kb,
_$jA[_$g3++] = _$kb) : _$j7 <= 42 ? (_$kb = _$jA[--_$g3],
_$cR = _$jA[--_$g3],
_$jA[_$g3++] = _$cR[_$kb]) : (_$kb = _$jA[--_$g3],
_$kb = _$jA[--_$g3] < _$kb,
_$jA[_$g3++] = _$kb) : _$j7 <= 44 ? (_$kb = _$jA[--_$g3],
_$kb = _$jA[--_$g3] === _$kb,
_$jA[_$g3++] = _$kb) : _$j7 <= 45 ? _$jA[_$g3++] = _$fs[_$gf[++_$f1]] : _$j7 <= 46 ? (_$gf[_$f1] = 87,
_$fx = _$f3[_$gf[++_$f1]],
_$gf[_$f1] = _$fx,
_$kb = _$jA[--_$g3],
_$jA[_$g3++] = _$kb[_$fx]) : (_$g3 -= 2,
_$kb = _$g3,
_$du(),
_$cR = _$cR[_$fx],
_$kb = _$cR(_$jA[_$kb], _$jA[_$kb + 1])) : _$j7 <= 51 ? _$j7 <= 48 ? (_$fx = _$gf[++_$f1],
_$jA[_$g3++] = _$_w(_$$I._$hW[_$fx], _$iv)) : _$j7 <= 49 ? (_$g3 -= 2,
_$kb = _$g3,
_$du(),
_$kb = _$cR[_$fx](_$jA[_$kb], _$jA[_$kb + 1])) : _$j7 <= 50 ? (_$kb = typeof _$jA[--_$g3],
_$jA[_$g3++] = _$kb) : (_$ka = _$gf[++_$f1],
_$dV = _$jA.slice(_$g3 - _$ka, _$g3),
_$g3 -= _$ka,
_$du(),
_$jA[_$g3++] = _$fH(_$cR[_$fx], _$dV)) : _$j7 <= 55 ? _$j7 <= 52 ? (_$kb = _$jA[--_$g3],
_$cR = _$jA[_$g3 - 1],
_$cR[_$f3[_$gf[++_$f1]]] = _$kb) : _$j7 <= 53 ? (_$kb = _$jA[--_$g3],
_$jA[_$g3++] = !_$kb) : _$j7 <= 54 ? (_$fx = _$gf[++_$f1],
_$cR = _$cL) : _$kb = _$cR[_$fx]++ : _$j7 <= 59 ? _$j7 <= 56 ? (_$iv[4] = 2,
_$f1 = _$_0) : _$j7 <= 57 ? (_$kb = _$jA[--_$g3],
_$kb = _$jA[--_$g3] - _$kb,
_$jA[_$g3++] = _$kb) : _$j7 <= 58 ? _$jA[_$g3++] = false : (_$gf[_$f1] = 26,
_$fx = _$gf[++_$f1],
_$kb = _$kG[_$fx],
_$gf[_$f1] = _$kb,
_$jA[_$g3++] = _$kb) : _$j7 <= 60 ? (_$kb = _$jA[--_$g3],
_$kb = _$jA[--_$g3] + _$kb,
_$jA[_$g3++] = _$kb) : _$j7 <= 61 ? (_$kb = _$jA[--_$g3],
_$cR = _$jA[_$g3 - 1],
_$cR.push(_$kb)) : _$j7 <= 62 ? (_$fx = _$gf[++_$f1],
_$cR = _$fs) : (_$fx = _$gf[++_$f1],
_$cR = _$aG);
else if (_$j7 <= 79) {
if (_$j7 <= 67) {
if (_$j7 <= 64)
;
else
_$j7 <= 65 ? (_$gf[_$f1] = 87,
_$fx = _$j4[_$gf[++_$f1]],
_$gf[_$f1] = _$fx,
_$kb = _$jA[--_$g3],
_$jA[_$g3++] = _$kb[_$fx]) : _$j7 <= 66 ? _$jA[_$g3++] = null : (_$kb = _$jA[--_$g3],
_$kb = _$jA[--_$g3] << _$kb,
_$jA[_$g3++] = _$kb);
} else
_$j7 <= 71 ? _$j7 <= 68 ? (_$kb = _$jA[--_$g3],
_$kb = _$jA[--_$g3] + _$kb) : _$j7 <= 69 ? (_$g3 -= 5,
_$kb = _$g3,
_$du(),
_$jA[_$g3++] = _$cR[_$fx](_$jA[_$kb], _$jA[_$kb + 1], _$jA[_$kb + 2], _$jA[_$kb + 3], _$jA[_$kb + 4])) : _$j7 <= 70 ? _$jA[_$g3++] = _$cR[_$fx]++ : (_$ka = _$gf[++_$f1],
_$g3 -= _$ka,
_$dV = _$jA.slice(_$g3, _$g3 + _$ka),
_$du(),
_$kb = _$cR[_$fx].apply(_$cR, _$dV)) : _$j7 <= 75 ? _$j7 <= 72 ? (_$kb = _$jA[--_$g3],
_$kb = _$jA[--_$g3] % _$kb,
_$jA[_$g3++] = _$kb) : _$j7 <= 73 ? _$jA[_$g3++] = ++_$cR[_$fx] : _$j7 <= 74 ? (_$g3 -= 4,
_$kb = _$g3,
_$du(),
_$cR = _$cR[_$fx],
_$kb = _$cR(_$jA[_$kb], _$jA[_$kb + 1], _$jA[_$kb + 2], _$jA[_$kb + 3])) : (_$kb = _$jA[--_$g3],
_$kb = _$jA[--_$g3] >= _$kb,
_$jA[_$g3++] = _$kb) : _$j7 <= 76 ? _$kb = _$gf[++_$f1] : _$j7 <= 77 ? _$kb = _$cR[_$fx]-- : _$j7 <= 78 ? (_$fx = _$gf[++_$f1],
_$kb = _$kb[_$fx]) : (_$g3 -= 3,
_$kb = _$g3,
_$du(),
_$cR = _$cR[_$fx],
_$jA[_$g3++] = _$cR(_$jA[_$kb], _$jA[_$kb + 1], _$jA[_$kb + 2]));
} else if (_$j7 <= 95)
_$j7 <= 83 ? _$j7 <= 80 ? (_$fx = _$gf[++_$f1],
_$jA[_$g3++] = _$kb[_$fx]) : _$j7 <= 81 ? (_$g3 -= 4,
_$kb = _$g3,
_$du(),
_$jA[_$g3++] = _$cR[_$fx](_$jA[_$kb], _$jA[_$kb + 1], _$jA[_$kb + 2], _$jA[_$kb + 3])) : _$j7 <= 82 ? (_$kb = _$jA[--_$g3],
_$kb = _$jA[--_$g3] <= _$kb,
_$jA[_$g3++] = _$kb) : (_$fx = _$gf[++_$f1],
_$kb = _$jA[--_$g3],
!_$kb ? _$f1 += _$fx : 0) : _$j7 <= 87 ? _$j7 <= 84 ? (_$kb = _$jA[--_$g3],
_$fx = _$gf[++_$f1],
_$cR = _$ke[_$fx],
_$ka = _$cR[_$kb],
_$ka == _$an ? _$ka = _$gf[++_$f1] : ++_$f1,
_$f1 += _$ka) : _$j7 <= 85 ? (_$du(),
_$kb = _$cR[_$fx]()) : _$j7 <= 86 ? _$kb = delete _$cR[_$fx] : (_$fx = _$gf[++_$f1],
_$kb = _$jA[--_$g3],
_$jA[_$g3++] = _$kb[_$fx]) : _$j7 <= 91 ? _$j7 <= 88 ? (_$kb = _$jA[--_$g3],
_$jA[_$g3++] = ~_$kb) : _$j7 <= 89 ? (_$kb = -_$jA[--_$g3],
_$jA[_$g3++] = _$kb) : _$j7 <= 90 ? (_$kb = _$jA[--_$g3],
_$kb = _$jA[--_$g3] >>> _$kb,
_$jA[_$g3++] = _$kb) : (_$kb = _$jA[--_$g3],
_$du(),
_$kb = _$cR[_$fx] ^= _$kb) : _$j7 <= 92 ? (_$fx = _$gf[++_$f1],
_$cR = _$jA[--_$g3]) : _$j7 <= 93 ? (_$g3 -= 3,
_$kb = _$g3,
_$du(),
_$kb = _$cR[_$fx](_$jA[_$kb], _$jA[_$kb + 1], _$jA[_$kb + 2])) : _$j7 <= 94 ? (_$kb = _$jA[--_$g3],
_$kb = _$jA[--_$g3] / _$kb,
_$jA[_$g3++] = _$kb) : (_$g3 -= 3,
_$kb = _$g3,
_$du(),
_$jA[_$g3++] = _$cR[_$fx](_$jA[_$kb], _$jA[_$kb + 1], _$jA[_$kb + 2]));
else if (_$j7 <= 99)
_$j7 <= 96 ? (_$g3 -= 4,
_$kb = _$g3,
_$du(),
_$kb = _$cR[_$fx](_$jA[_$kb], _$jA[_$kb + 1], _$jA[_$kb + 2], _$jA[_$kb + 3])) : _$j7 <= 97 ? (_$kb = _$jA[--_$g3],
_$kb = _$jA[--_$g3]instanceof _$kb,
_$jA[_$g3++] = _$kb) : _$j7 <= 98 ? (_$kb = _$jA[--_$g3],
_$du(),
_$kb = _$cR[_$fx] &= _$kb) : (_$gf[_$f1] = 92,
_$fx = _$j4[_$gf[++_$f1]],
_$gf[_$f1] = _$fx,
_$cR = _$jA[--_$g3]);
else if (_$j7 <= 103) {
if (_$j7 <= 100)
(_$kb = _$jA[--_$g3],
_$kb = _$jA[--_$g3] | _$kb,
_$jA[_$g3++] = _$kb);
else if (_$j7 <= 101) {
_$ka = _$gf[++_$f1],
_$kb = _$jA[--_$g3],
_$f1++;
for (_$kC in _$kb) {
_$cR[_$fx] = _$kC,
_$bl(_$$I, _$f1, _$f1 + _$ka, _$iv);
if (_$iv[4]) {
_$f1 = _$_0;
break;
}
}
_$f1 += _$ka - 1;
} else
_$j7 <= 102 ? _$kb = ++_$cR[_$fx] : (_$kb = _$jA[--_$g3],
_$du(),
_$cR[_$fx] = _$kb,
_$jA[_$g3++] = _$kb);
} else
_$j7 <= 107 ? _$j7 <= 104 ? (_$kC = _$gf[++_$f1],
_$fx = _$gf[++_$f1],
_$cR = _$ko[_$kC]) : _$j7 <= 105 ? (_$fx = _$gf[++_$f1],
_$kb = _$jA[--_$g3],
_$kb = _$kb[_$fx]) : _$j7 <= 106 ? (_$g3 -= 4,
_$kb = _$g3,
_$du(),
_$cR = _$cR[_$fx],
_$jA[_$g3++] = _$cR(_$jA[_$kb], _$jA[_$kb + 1], _$jA[_$kb + 2], _$jA[_$kb + 3])) : _$jA[_$g3++] = --_$cR[_$fx] : _$j7 <= 108 ? (--_$g3,
_$cR = _$jA,
_$fx = _$g3) : _$j7 <= 109 ? (_$ka = _$gf[++_$f1],
_$dV = _$jA.slice(_$g3 - _$ka, _$g3),
_$g3 -= _$ka,
_$du(),
_$kb = _$fH(_$cR[_$fx], _$dV)) : _$j7 <= 110 ? (_$kb = _$jA[--_$g3],
_$du(),
_$kb = _$cR[_$fx] -= _$kb) : (_$kb = _$jA[--_$g3],
_$kb = _$jA[--_$g3] ^ _$kb,
_$jA[_$g3++] = _$kb);
处理后的代码如下:
switch (_$j7) {
case 0:
_$kb = _$jA[--_$g3];
_$kb = _$jA[--_$g3] * _$kb;
_$jA[_$g3++] = _$kb;
break;
case 1:
_$kb = _$jA[--_$g3];
_$kb = _$jA[--_$g3] & _$kb;
_$jA[_$g3++] = _$kb;
break;
case 2:
_$jA[_$g3++] = _$gD[_$gf[++_$f1]];
break;
case 3:
_$jA[_$g3++] = true;
break;
case 4:
_$fx = _$gf[++_$f1];
_$kb = _$jA[--_$g3];
!_$kb ? (_$f1 += _$fx, ++_$g3) : 0;
break;
case 5:
_$kb = _$jA[--_$g3];
_$du();
_$kb = _$cR[_$fx] |= _$kb;
break;
case 6:
_$jA[_$g3++] = _$aG[_$gf[++_$f1]];
break;
case 7:
_$kb = _$jA[--_$g3];
_$kb = _$jA[--_$g3] !== _$kb;
_$jA[_$g3++] = _$kb;
break;
case 8:
_$g3 -= 2;
_$kb = _$g3;
_$du();
_$cR = _$cR[_$fx];
_$jA[_$g3++] = _$cR(_$jA[_$kb], _$jA[_$kb + 1]);
break;
case 9:
_$g3--;
_$kb = _$g3;
_$du();
_$cR = _$cR[_$fx];
_$jA[_$g3++] = _$cR(_$jA[_$kb]);
break;
case 10:
_$ka = _$gf[++_$f1];
_$f1 += _$ka;
break;
case 11:
_$kC = _$gf[++_$f1];
_$jA[_$g3++] = _$dz[_$kC][_$gf[++_$f1]];
break;
case 12:
_$kb = _$jA[--_$g3];
_$iv[4] = 1;
_$iv[5] = _$kb;
_$f1 = _$_0;
break;
case 13:
_$g3 -= 3;
_$kb = _$g3;
_$du();
_$cR = _$cR[_$fx];
_$kb = _$cR(_$jA[_$kb], _$jA[_$kb + 1], _$jA[_$kb + 2]);
break;
case 14:
_$ka = _$gf[++_$f1];
_$f1 -= _$ka;
break;
case 15:
_$kC = _$gf[++_$f1];
_$jA[_$g3++] = _$ko[_$kC][_$gf[++_$f1]];
break;
case 16:
_$g3--;
_$kb = _$g3;
_$du();
_$kb = _$cR[_$fx](_$jA[_$kb]);
break;
case 17:
_$g3--;
_$kb = _$g3;
_$du();
_$jA[_$g3++] = _$cR[_$fx](_$jA[_$kb]);
break;
case 18:
_$kb = _$jA[--_$g3];
_$kb = _$jA[--_$g3] in _$kb;
_$jA[_$g3++] = _$kb;
break;
case 19:
_$kb = _$jA[--_$g3];
_$cR = _$jA[_$g3 - 1];
_$cR[_$j4[_$gf[++_$f1]]] = _$kb;
break;
case 20:
_$jA[_$g3++] = [];
break;
case 21:
_$gf[_$f1] = 26;
_$fx = _$gf[++_$f1];
_$kb = _$j4[_$fx];
_$gf[_$f1] = _$kb;
_$jA[_$g3++] = _$kb;
break;
case 22:
_$kb = _$jA[--_$g3];
_$du();
_$kb = _$cR[_$fx] += _$kb;
break;
case 23:
_$jA[_$g3++] = _$cL[_$gf[++_$f1]];
break;
case 24:
_$fx = _$jA[--_$g3];
_$cR = _$jA[--_$g3];
break;
case 25:
_$kb = _$jA[--_$g3];
_$du();
_$cR[_$fx] = _$kb;
break;
case 26:
_$jA[_$g3++] = _$gf[++_$f1];
break;
case 27:
_$kC = _$gf[++_$f1];
_$fx = _$gf[++_$f1];
_$cR = _$dz[_$kC];
break;
case 28:
_$du();
_$jA[_$g3++] = _$cR[_$fx]();
break;
case 29:
_$g3 -= 2;
_$kb = _$g3;
_$du();
_$jA[_$g3++] = _$cR[_$fx](_$jA[_$kb], _$jA[_$kb + 1]);
break;
case 30:
_$kb = _$jA[--_$g3];
_$kb = _$jA[--_$g3] > _$kb;
_$jA[_$g3++] = _$kb;
break;
case 31:
_$du();
_$cR = _$cR[_$fx];
_$jA[_$g3++] = _$cR();
break;
case 32:
_$cG(_$$I, _$gf[++_$f1], _$gf[++_$f1], _$ka = _$gf[++_$f1], _$gf[++_$f1], _$f1 + 1, _$aG, _$iv);
_$iv[4] ? _$f1 = _$_0 : _$f1 += _$ka;
break;
case 33:
_$fx = _$gf[++_$f1];
_$cR = _$gD;
break;
case 34:
_$kb = _$jA[--_$g3];
_$kb = _$jA[--_$g3] != _$kb;
_$jA[_$g3++] = _$kb;
break;
case 35:
_$du();
_$cR = _$cR[_$fx];
_$kb = _$cR();
break;
case 36:
_$g3--;
_$kb = _$g3;
_$du();
_$cR = _$cR[_$fx];
_$kb = _$cR(_$jA[_$kb]);
break;
case 37:
_$gf[_$f1] = 92;
_$fx = _$f3[_$gf[++_$f1]];
_$gf[_$f1] = _$fx;
_$cR = _$jA[--_$g3];
break;
case 38:
_$kb = _$jA[--_$g3];
_$ka = _$gf[++_$f1];
_$kb ? 0 : _$f1 += _$ka;
break;
case 39:
_$fx = _$gf[++_$f1];
_$kb = _$jA[--_$g3];
_$kb ? (_$f1 += _$fx, ++_$g3) : 0;
break;
case 40:
_$jA[_$g3++] = {};
break;
case 41:
_$kb = _$jA[--_$g3];
_$kb = _$jA[--_$g3] == _$kb;
_$jA[_$g3++] = _$kb;
break;
case 42:
_$kb = _$jA[--_$g3];
_$cR = _$jA[--_$g3];
_$jA[_$g3++] = _$cR[_$kb];
break;
case 43:
_$kb = _$jA[--_$g3];
_$kb = _$jA[--_$g3] < _$kb;
_$jA[_$g3++] = _$kb;
break;
case 44:
_$kb = _$jA[--_$g3];
_$kb = _$jA[--_$g3] === _$kb;
_$jA[_$g3++] = _$kb;
break;
case 45:
_$jA[_$g3++] = _$fs[_$gf[++_$f1]];
break;
case 46:
_$gf[_$f1] = 87;
_$fx = _$f3[_$gf[++_$f1]];
_$gf[_$f1] = _$fx;
_$kb = _$jA[--_$g3];
_$jA[_$g3++] = _$kb[_$fx];
break;
case 47:
_$g3 -= 2;
_$kb = _$g3;
_$du();
_$cR = _$cR[_$fx];
_$kb = _$cR(_$jA[_$kb], _$jA[_$kb + 1]);
break;
case 48:
_$fx = _$gf[++_$f1];
_$jA[_$g3++] = _$_w(_$$I._$hW[_$fx], _$iv);
break;
case 49:
_$g3 -= 2;
_$kb = _$g3;
_$du();
_$kb = _$cR[_$fx](_$jA[_$kb], _$jA[_$kb + 1]);
break;
case 50:
_$kb = typeof _$jA[--_$g3];
_$jA[_$g3++] = _$kb;
break;
case 51:
_$ka = _$gf[++_$f1];
_$dV = _$jA.slice(_$g3 - _$ka, _$g3);
_$g3 -= _$ka;
_$du();
_$jA[_$g3++] = _$fH(_$cR[_$fx], _$dV);
break;
case 52:
_$kb = _$jA[--_$g3];
_$cR = _$jA[_$g3 - 1];
_$cR[_$f3[_$gf[++_$f1]]] = _$kb;
break;
case 53:
_$kb = _$jA[--_$g3];
_$jA[_$g3++] = !_$kb;
break;
case 54:
_$fx = _$gf[++_$f1];
_$cR = _$cL;
break;
case 55:
_$kb = _$cR[_$fx]++;
break;
case 56:
_$iv[4] = 2;
_$f1 = _$_0;
break;
case 57:
_$kb = _$jA[--_$g3];
_$kb = _$jA[--_$g3] - _$kb;
_$jA[_$g3++] = _$kb;
break;
case 58:
_$jA[_$g3++] = false;
break;
case 59:
_$gf[_$f1] = 26;
_$fx = _$gf[++_$f1];
_$kb = _$kG[_$fx];
_$gf[_$f1] = _$kb;
_$jA[_$g3++] = _$kb;
break;
case 60:
_$kb = _$jA[--_$g3];
_$kb = _$jA[--_$g3] + _$kb;
_$jA[_$g3++] = _$kb;
break;
case 61:
_$kb = _$jA[--_$g3];
_$cR = _$jA[_$g3 - 1];
_$cR.push(_$kb);
break;
case 62:
_$fx = _$gf[++_$f1];
_$cR = _$fs;
break;
case 63:
_$fx = _$gf[++_$f1];
_$cR = _$aG;
break;
case 64:
;
break;
case 65:
_$gf[_$f1] = 87;
_$fx = _$j4[_$gf[++_$f1]];
_$gf[_$f1] = _$fx;
_$kb = _$jA[--_$g3];
_$jA[_$g3++] = _$kb[_$fx];
break;
case 66:
_$jA[_$g3++] = null;
break;
case 67:
_$kb = _$jA[--_$g3];
_$kb = _$jA[--_$g3] << _$kb;
_$jA[_$g3++] = _$kb;
break;
case 68:
_$kb = _$jA[--_$g3];
_$kb = _$jA[--_$g3] + _$kb;
break;
case 69:
_$g3 -= 5;
_$kb = _$g3;
_$du();
_$jA[_$g3++] = _$cR[_$fx](_$jA[_$kb], _$jA[_$kb + 1], _$jA[_$kb + 2], _$jA[_$kb + 3], _$jA[_$kb + 4]);
break;
case 70:
_$jA[_$g3++] = _$cR[_$fx]++;
break;
case 71:
_$ka = _$gf[++_$f1];
_$g3 -= _$ka;
_$dV = _$jA.slice(_$g3, _$g3 + _$ka);
_$du();
_$kb = _$cR[_$fx].apply(_$cR, _$dV);
break;
case 72:
_$kb = _$jA[--_$g3];
_$kb = _$jA[--_$g3] % _$kb;
_$jA[_$g3++] = _$kb;
break;
case 73:
_$jA[_$g3++] = ++_$cR[_$fx];
break;
case 74:
_$g3 -= 4;
_$kb = _$g3;
_$du();
_$cR = _$cR[_$fx];
_$kb = _$cR(_$jA[_$kb], _$jA[_$kb + 1], _$jA[_$kb + 2], _$jA[_$kb + 3]);
break;
case 75:
_$kb = _$jA[--_$g3];
_$kb = _$jA[--_$g3] >= _$kb;
_$jA[_$g3++] = _$kb;
break;
case 76:
_$kb = _$gf[++_$f1];
break;
case 77:
_$kb = _$cR[_$fx]--;
break;
case 78:
_$fx = _$gf[++_$f1];
_$kb = _$kb[_$fx];
break;
case 79:
_$g3 -= 3;
_$kb = _$g3;
_$du();
_$cR = _$cR[_$fx];
_$jA[_$g3++] = _$cR(_$jA[_$kb], _$jA[_$kb + 1], _$jA[_$kb + 2]);
break;
case 80:
_$fx = _$gf[++_$f1];
_$jA[_$g3++] = _$kb[_$fx];
break;
case 81:
_$g3 -= 4;
_$kb = _$g3;
_$du();
_$jA[_$g3++] = _$cR[_$fx](_$jA[_$kb], _$jA[_$kb + 1], _$jA[_$kb + 2], _$jA[_$kb + 3]);
break;
case 82:
_$kb = _$jA[--_$g3];
_$kb = _$jA[--_$g3] <= _$kb;
_$jA[_$g3++] = _$kb;
break;
case 83:
_$fx = _$gf[++_$f1];
_$kb = _$jA[--_$g3];
!_$kb ? _$f1 += _$fx : 0;
break;
case 84:
_$kb = _$jA[--_$g3];
_$fx = _$gf[++_$f1];
_$cR = _$ke[_$fx];
_$ka = _$cR[_$kb];
_$ka == _$an ? _$ka = _$gf[++_$f1] : ++_$f1;
_$f1 += _$ka;
break;
case 85:
_$du();
_$kb = _$cR[_$fx]();
break;
case 86:
_$kb = delete _$cR[_$fx];
break;
case 87:
_$fx = _$gf[++_$f1];
_$kb = _$jA[--_$g3];
_$jA[_$g3++] = _$kb[_$fx];
break;
case 88:
_$kb = _$jA[--_$g3];
_$jA[_$g3++] = ~_$kb;
break;
case 89:
_$kb = -_$jA[--_$g3];
_$jA[_$g3++] = _$kb;
break;
case 90:
_$kb = _$jA[--_$g3];
_$kb = _$jA[--_$g3] >>> _$kb;
_$jA[_$g3++] = _$kb;
break;
case 91:
_$kb = _$jA[--_$g3];
_$du();
_$kb = _$cR[_$fx] ^= _$kb;
break;
case 92:
_$fx = _$gf[++_$f1];
_$cR = _$jA[--_$g3];
break;
case 93:
_$g3 -= 3;
_$kb = _$g3;
_$du();
_$kb = _$cR[_$fx](_$jA[_$kb], _$jA[_$kb + 1], _$jA[_$kb + 2]);
break;
case 94:
_$kb = _$jA[--_$g3];
_$kb = _$jA[--_$g3] / _$kb;
_$jA[_$g3++] = _$kb;
break;
case 95:
_$g3 -= 3;
_$kb = _$g3;
_$du();
_$jA[_$g3++] = _$cR[_$fx](_$jA[_$kb], _$jA[_$kb + 1], _$jA[_$kb + 2]);
break;
case 96:
_$g3 -= 4;
_$kb = _$g3;
_$du();
_$kb = _$cR[_$fx](_$jA[_$kb], _$jA[_$kb + 1], _$jA[_$kb + 2], _$jA[_$kb + 3]);
break;
case 97:
_$kb = _$jA[--_$g3];
_$kb = _$jA[--_$g3] instanceof _$kb;
_$jA[_$g3++] = _$kb;
break;
case 98:
_$kb = _$jA[--_$g3];
_$du();
_$kb = _$cR[_$fx] &= _$kb;
break;
case 99:
_$gf[_$f1] = 92;
_$fx = _$j4[_$gf[++_$f1]];
_$gf[_$f1] = _$fx;
_$cR = _$jA[--_$g3];
break;
case 100:
_$kb = _$jA[--_$g3], _$kb = _$jA[--_$g3] | _$kb, _$jA[_$g3++] = _$kb;
break;
case 101:
_$ka = _$gf[++_$f1], _$kb = _$jA[--_$g3], _$f1++;
for (_$kC in _$kb) {
_$cR[_$fx] = _$kC, _$bl(_$$I, _$f1, _$f1 + _$ka, _$iv);
if (_$iv[4]) {
_$f1 = _$_0;
break;
}
}
_$f1 += _$ka - 1;
break;
case 102:
_$kb = ++_$cR[_$fx];
break;
case 103:
_$kb = _$jA[--_$g3];
_$du();
_$cR[_$fx] = _$kb;
_$jA[_$g3++] = _$kb;
break;
case 104:
_$kC = _$gf[++_$f1];
_$fx = _$gf[++_$f1];
_$cR = _$ko[_$kC];
break;
case 105:
_$fx = _$gf[++_$f1];
_$kb = _$jA[--_$g3];
_$kb = _$kb[_$fx];
break;
case 106:
_$g3 -= 4;
_$kb = _$g3;
_$du();
_$cR = _$cR[_$fx];
_$jA[_$g3++] = _$cR(_$jA[_$kb], _$jA[_$kb + 1], _$jA[_$kb + 2], _$jA[_$kb + 3]);
break;
case 107:
_$jA[_$g3++] = --_$cR[_$fx];
break;
case 108:
--_$g3;
_$cR = _$jA;
_$fx = _$g3;
break;
case 109:
_$ka = _$gf[++_$f1];
_$dV = _$jA.slice(_$g3 - _$ka, _$g3);
_$g3 -= _$ka;
_$du();
_$kb = _$fH(_$cR[_$fx], _$dV);
break;
case 110:
_$kb = _$jA[--_$g3];
_$du();
_$kb = _$cR[_$fx] -= _$kb;
break;
case 111:
_$kb = _$jA[--_$g3];
_$kb = _$jA[--_$g3] ^ _$kb;
_$jA[_$g3++] = _$kb;
break;
}
这里贴上处理代码(这段代码由博主个人原创,转载请注明出处)
该原创代码改自前两天写的if语句转switch语句的代码,因此if转switch也是支持的
const fs = require('fs');
const parser = require("@babel/parser");
const generate = require("@babel/generator").default
const traverse = require("@babel/traverse").default
const t = require('@babel/types');
const code = getCode()
const ast = parser.parse(code, { allowReturnOutsideFunction: true })
function valueHandle(operator, value) {
switch(operator) {
case '<':
return value - 1
case '==':
case '===':
return value
case '<=':
return value
}
}
function getIfTestValue(test) {
if (!test) return false
const { operator, left, right } = test
if (!['<', '==', '===', '<='].includes(operator)) return false
if (!t.isIdentifier(left)) return false
if (!t.isNumericLiteral(right)) return false
return { name: left.name, value: valueHandle(operator, right.value) }
}
function getNode(node) {
if (!node) return []
if (t.isIfStatement(node)) return [node]
if (t.isBlockStatement(node)) return node.body
if (t.isExpressionStatement(node)) return [node.expression]
// 三元表达式
if (t.isConditionalExpression(node)) return [node]
// 逗号表达式
if (t.isSequenceExpression(node)) return node.expressions
// 赋值表达式
if (t.isAssignmentExpression(node)) return [node]
if (t.isEmptyStatement(node)) return [node]
console.error(`未知类型请检查: ${node.type}`)
return [node]
}
function getIfNode(node, ans=[], opt = {}) {
const testValue = getIfTestValue(node?.test)
if (testValue === false) return
if (!opt.name) { Object.assign(opt, testValue) }
if (testValue.name !== opt.name) return
['consequent', 'alternate'].forEach((key, idx) => {
const nextNode = getNode(node[key])
ans[testValue.value + idx] = nextNode
// console.log(testValue.value + idx, nextNode)
nextNode?.forEach(item => getIfNode(item, ans, opt))
})
return [opt.name, ans.filter(Boolean)]
}
const visitor = {
IfStatement(path) {
const [key, cases] = getIfNode(path.node) || []
if (!key || cases.length <= 6) return
const newNode = t.switchStatement(
t.identifier(key),
cases.map((mycase, idx) => {
const statements = mycase.reduce((ans, item) => (
ans.push(t.isStatement(item) ? item : t.expressionStatement(item)),
ans
), [])
if (!mycase.some(item => t.isReturnStatement(item))) {
statements.push(t.breakStatement())
}
return t.switchCase(t.numericLiteral(idx), statements)
})
)
path.replaceInline(newNode)
path.skip()
}
}
traverse(ast, visitor)
const result = generate(ast, { minified: false, concise: false, compact: false })
console.log(result.code)
FINISH
下篇文章:AST交互-if语句转switch语句