【理解】什么是Javascript 反混淆?
Jym好😘,我是珑墨,今天给大家分享 什么是Javascript 反混淆?,嘎嘎的😍,看下面。
介绍:
如果我们想熟练掌握代码分析和逆向工程,代码反混淆是一项需要学习的重要技能。混淆是一种技术,用于使脚本更难被人类阅读,但从技术角度来看,它允许它运行相同的功能,尽管性能可能较慢。本文将解释什么是代码反混淆,使用它的原因,以及它的潜在优点和缺点。
反混淆代码
这通常是通过使用混淆工具自动实现的,该工具将代码作为输入,并尝试以更难阅读的方式重写代码,具体取决于其设计例如,考虑以下两个代码片段及其输出:
代码段1:
console.log("Hello by Dhanush") //Hello by Dhanush
代码段2:
eval(
(function (p, a, c, k, e, d) {
e = function (c) {
return c;
};
if (!"".replace(/^/, String)) {
while (c--) {
d[c] = k[c] || c;
}
k = [
function (e) {
return d[e];
},
];
e = function () {
return "\w+";
};
c = 1;
}
while (c--) {
if (k[c]) {
p = p.replace(new RegExp("\b" + e(c) + "\b", "g"), k[c]);
}
}
return p;
})('0.1("2 3 4")', 5, 5, "console|log|Hello|by|Dhanush".split("|"), 0, {}),
);
// 输出:Hello by Dhanush
代码段1 包含一个简单的 JavaScript 脚本。它使用 console.log() 函数将字符串“Hello by Dhanush”记录到控制台。在 JavaScript 中,这是典型的消息输出方法。在代码段 2 中找到一段更高级的代码,它使用 eval() 函数来运行动态生成的 JavaScript 函数。以下是所发生情况的摘要:
- 由于代码是生成的,并且人类可读性较差,因此它被混淆且难以解释。
- 具有参数 p、a、c、k、e 和 d 的函数由 eval() 函数执行。这些用作函数的参数。
- 该函数通过使用正则表达式 (RegExp) 执行字符串替换和操作,将输入字符串“0.1(”2 3 4“)”转换为 console.log(“Hello by Dhanush”) 语句。
- 代码会动态地将原始字符串的不同部分替换为其相应的值。
- 然后运行生成的 JavaScript 代码。
逆向工程:反混淆
对故意混淆或更难理解的代码进行逆向工程或破译的做法称为反混淆。反混淆需要将第二个代码片段中的混淆代码转换回其原始的、更具可读性的形式。在第二个代码片段中,为了使乍一看难以理解,代码被故意混淆了。
在这里,混淆策略需要将有意义的变量名称和代码换成晦涩难懂的变量名称和代码和复杂的推理。这种类型的混淆称为“打包”,通常可以从初始函数“function(p,a,c,k,e,d)”中使用的六个函数参数中识别出来。还有许多在线工具可用于混淆 javascript 代码,例如
还有很多。
代码反混淆的原因
-
知识产权保护: 通过使竞争对手或未经授权的用户更难对软件进行逆向工程和复制,混淆可用于保护知识产权,例如算法、专有业务逻辑或唯一代码。
-
安全: 有时,代码混淆可用于通过隐藏重要数据(包括加密密钥或身份验证方法)来提高安全性。这使得不良行为者更难利用缺陷或获得未经授权的访问。
-
许可证执行: 混淆使用户更难篡改许可证检查或删除软件试用版中的限制,这有助于执行软件许可协议。
-
针对恶意软件分析的防护: 为了使安全研究人员、防病毒软件和威胁分析师更难分析和检测有害代码,恶意软件创建者偶尔会混淆他们的代码。
代码反混淆的优点
- 防止随意的逆向工程
- 在某些情况下,增加了第二级安全性
- 保护精细的算法和代码。
代码反混淆的缺点
- 不能对坚定的攻击者提供坚不可摧的防御
- 使维护和调试代码变得更加困难
- 偶尔会增加性能开销。
最后
我们应谨慎使用代码混淆,并与其他安全保护措施(如加密、访问控制和例行安全审计)结合使用。它最常用于保护信息或保护知识产权是主要优先事项的情况。
转载自:https://juejin.cn/post/7370883500351701031