嘿,各位代码探险家们,欢迎来到“JavaScript 迷宫寻宝”讲座!今天我们要聊的是如何从那些被搅得一团糟的 JavaScript 代码里,像福尔摩斯一样,抽丝剥茧,把程序的真实运行轨迹,也就是控制流图(CFG),给重建出来。 准备好了吗?让我们开始这场烧脑但绝对有趣的旅程吧! 第一幕:认识我们的对手——混淆 JavaScript 首先,我们得了解一下我们的对手,也就是那些把代码搞得乱七八糟的混淆技术。 它们的主要目标是: 让代码难以阅读: 变量名改成 a, b, c,函数名改成 _0xabc,常量变成 16 进制等等。 隐藏代码逻辑: 用各种奇葩的控制流结构,比如 if (!true),或者用 while(true) 包裹一大段代码,然后用 break 跳出来。 增加代码复杂度: 插入大量无意义的代码,让代码体积膨胀,分析难度增加。 举个例子,下面这段简单的 JavaScript 代码: function greet(name) { if (name) { console.log(“Hello, ” + name + “!”); } else { console.log(“Hell …
继续阅读“控制流图 (Control Flow Graph, CFG) 重建:如何从混淆后的 JavaScript 代码中提取 CFG,并识别其真实的程序流?”