JavaScript 混淆样例

杜烨伟
2023-12-01

如新建一个 main.js 文件,内容如下:

const code = `
let x = '1' + 1
console.log('x', x)
`;

const options = {
  compact: false,
  controlFlowFlattening: true,
};

const obfuscator = require("javascript-obfuscator");
function obfuscate(code, options) {
  return obfuscator.obfuscate(code, options).getObfuscatedCode();
}
console.log(obfuscate(code, options));

在这里我们定义了两个变量,一个是 code,即需要被混淆的代码,另一个是混淆选项,是一个 Object。接下来我们引入了 javascript-obfuscator 这库,然后定义了一个方法,传入 code 和 options,来获取混淆后的代码,最后控制台输出混淆后的代码。

代码逻辑比较简单,我们来执行一下代码:

node main.js

输出结果如下:

var _0x53bf = ["log"];
(function (_0x1d84fe, _0x3aeda0) {
  var _0x10a5a = function (_0x2f0a52) {
    while (--_0x2f0a52) {
      _0x1d84fe["push"](_0x1d84fe["shift"]());
    }
  };
  _0x10a5a(++_0x3aeda0);
})(_0x53bf, 0x172);
var _0x480a = function (_0x4341e5, _0x5923b4) {
  _0x4341e5 = _0x4341e5 - 0x0;
  var _0xb3622e = _0x53bf[_0x4341e5];
  return _0xb3622e;
};
let x = "1" + 0x1;
console[_0x480a("0x0")]("x", x);

看到了吧,那么简单的两行代码,被我们混淆成了这个样子,其实这里我们就是设定了一个「控制流平坦化」的选项。整体看来,代码的可读性大大降低,也大大加大了 JavaScript 调试的难度。

 类似资料: