关于前端:JavaScript混淆技术了解其核心原理和常用手段

27次阅读

共计 2481 个字符,预计需要花费 7 分钟才能阅读完成。

当今互联网时代,JavaScript 曾经成为了 web 前端开发的重点技术之一。其中,JavaScript 代码的安全性问题始终是关注的焦点。为了爱护 JavaScript 代码的安全性,很多人对其进行加密解决,家喻户晓,对于单纯的加密算法,通过反向工程或逆向剖析也可能破解。在此状况下,JavaScript 代码混同技术成为了一种应答加密破解的无效措施。

一、JS 加密算法

JS 加密算法是指 JavaScript 代码通过异或加密、Base64 加密、MD5 加密、SHA1 加密等形式对其内容进行加密解决。例如,上面的加密函数中,通过异或运算对字符串进行了加密:

Copy codefunction encryptByXOR(message, key) {
    var encrypted = '';
    for (var i = 0; i < message.length; i++) {var c = message.charCodeAt(i) ^ key.charCodeAt(i % key.length);
        encrypted += String.fromCharCode(c);
    }
    return encrypted;
}

var message = 'Hello world';
var key = '1234567890';

var encrypted_message = encryptByXOR(message, key);
console.log('加密后的字符串:', encrypted_message);

通过对源代码进行加密解决,可能为 JavaScript 代码的安全性提供肯定的保障。不过,对于雷同的 JavaScript 加密算法,破解者也能够应用同样的加解密算法进行反向操作。而且,应用加密算法会减少代码的体积,升高代码的执行速度。因而,人们开始思考是否有一种更好的办法确保 JavaScript 代码的安全性呢?

二、JS 代码混同技术

JS 代码混同技术能够将 JavaScript 代码转换成一个新的代码模式,使其难以了解和破解。这种转换通常包含将变量名和函数名替换为无意义的字符、删除代码中的空白和正文、将多行代码压缩成一行等操作。混同后的代码和原代码在性能上是等效的,然而因为其构造和命名被混同,甚至看起来无奈读懂。

例如,上面的函数中,对一段 JavaScript 代码进行了简略的混同解决:

Copy codefunction obfuscateCode(code) {var lines = code.split("\n");
    var obfuscatedCode = "";
    lines.forEach(function(line) {
        obfuscatedCode += line
            .replace(/var /g, "")
            .replace(/function /g, "")
            .replace(/return /g, "")
            .replace(/;/g, "")
            .replace(/{/g, "")
            .replace(/}/g, "");
    });
    return obfuscatedCode;
}

var original_code = 'function foo(a, b) {var c = a + b;return c;}';
var obfuscated_code = obfuscateCode(original_code);
console.log('原始代码:', original_code);
console.log('混同代码:', obfuscated_code);

通过混同技术,原始 JavaScript 代码变得更加简单和难以了解,进而升高了破解的可行性。同时,相比与加密算法,混同代码的运行速度和性能也更优良。

三、JS 解混同技术

不过,对于代码混同技术,咱们同样能够将其净化(反混同)。通过剖析混同代码的构造和操作,咱们可能撰写出解混同代码,进行 JavaScript 代码的还原。例如,混同代码可能会将许多不同的变量名替换为雷同的单个字符,或者将多个行的代码压缩到一个代码行中,能够通过自动化工具或手动办法来反混同代码。

Copy codefunction unobfuscateCode(obfuscatedCode) {
    var unobfuscatedCode = obfuscatedCode
        .replace(/a /g, "var")
        .replace(/b /g, "function")
        .replace(/c /g, "return")
        .replace(/[0-9]+/g, "")
        .replace(/=/g, "=")
        .replace(/\+/g, "+")
        .replace(/;/g, ";\n")
        .replace(/}/g, "\n}\n")
        .replace(/^\n/, "");
    return unobfuscatedCode;
}

var obfuscated_code = "b foo(a, b){c a + b}"; // 从 js.jiami.com 上取得的混同代码
var unobfuscated_code = unobfuscateCode(obfuscated_code);
console.log('混同代码:', obfuscated_code);
console.log('原始代码:', unobfuscated_code);

四、JS 代码平安实际

如何抉择适当的 JS 代码平安实际办法,取决于应用程序所需的安全级别和平安需要。如果您须要爱护代码内容的平安,能够应用加密算法。如果您的代码须要长期保护,能够应用代码混同技术,使代码的可读性升高,这样也就不容易被他人拿来二次开发和篡改。如果您须要将代码放弃可读性,然而又须要爱护代码的安全性,能够采取混合利用加密算法和混同技术互相联合,以最佳的形式实现代码爱护。

总之,随着互联网技术的倒退,对于网络安全的要求越来越高,对于 JavaScript 的加密和解密,技术倒退均获得了肯定的提高。但无论是黑客攻击还是加密解密技术,只是给咱们提供了预防的参考计划,绝不能代替不断加强网站的安全性实际,并高度唤起平安保护意识。

jsjiami.com

如果您对文章内容有不同认识, 或者疑难,欢送到评论区留言,或者私信我都能够。

也能够到上方网站,底部有我联系方式详谈。

正文完
 0