JS `JavaScript De-obfuscation` (反混淆) 技术:AST 还原与符号执行

各位老铁,大家好!今天咱们来聊聊 JavaScript 逆向里一个绕不开的话题:JavaScript De-obfuscation,也就是反混淆。这玩意儿,说白了,就是把那些被加密、压缩、改得乱七八糟的代码,给它还原成人能看懂的样子。 咱们这次重点讲两种比较厉害的技术:AST 还原和符号执行。我会尽量用大白话,配上代码,让大家都能听明白,就算你是新手,也能有点收获。 一、 啥是混淆?为什么要反混淆? 在深入技术细节之前,咱们先搞清楚一个问题:为啥要混淆?简单来说,就是为了保护代码,防止别人直接复制粘贴,或者分析你的算法。常见的混淆手段有很多,比如: 压缩: 去掉空格、注释,缩短变量名,让代码体积更小,可读性更差。 加密: 使用各种加密算法,把代码变成乱码。 变量名替换: 把有意义的变量名改成 a、b、c 这种鬼东西。 控制流扁平化: 把正常的代码逻辑打乱,用 switch 语句或者 if-else 语句来实现复杂的跳转。 死代码插入: 往代码里塞一些没用的代码,干扰分析。 字符串加密: 将字符串加密,防止直接搜索到关键信息。 反混淆的目的很明确:就是要把这些乱七八糟的代码还原成可读、可 …