JavaScript反混淆

一、JavaScript反混淆工具

当我们从其他来源获取的JavaScript代码非常复杂且混淆时,我们可能需要反混淆它们以便更好地理解和修改。JavaScript反混淆工具可帮助我们自动化这个过程。

以下是一个基于JavaScript的反混淆工具示例:

    
    // 将带有多个$$、 _0x、_0X 开头变量名的 JavaScript 代码反混淆
    function deobfuscate(code) {
        return code.replace(/\$\$(\w+)\['(\w+)'](\(\))?\['(\w+)'](\(\))?/g, function(full, c1, c2, p1, c3, p2) {
            let name = c2;
            if (c3) {
                name += c3;
            }
            return `${name}`;
        }).replace(/(_0x\w{4,6})\[(\d+)\]/g, function(full, c1, c2) {
            const index = parseInt(c2, 10);
            const charCode = parseInt(c1, 16) - index;
            return String.fromCharCode(charCode);
        }).replace(/_0X(\w+)/g, function(full, c1) {
            return String.fromCharCode(parseInt(c1, 16));
        });
    }
    

以上代码可以将JavaScript代码中的多个$$、 _0x、_0X 开头的变量名反混淆成易于理解的名称。

二、JavaScript反混淆工具解密

当JavaScript代码被混淆后,可能会出现eval()和Function()等函数代码,这些代码很难直接理解。

以下是一个用于反混淆JavaScript中eval代码的示例:

    
    function decryptEval(input) {
        let result = '';
        for(let i = 0; i < input.length; i += 2){
            result += String.fromCharCode(parseInt(input.substr(i, 2), 16));
        }
        return result;
    }
    

这段代码将16进制字符转换为字符,以便更容易地读取JavaScript eval()评估函数代码中的内容。

三、JavaScript反混淆App

有很多开发人员设计了一些应用程序以处理混淆的JavaScript代码。

以下是一个名为“JavaScript混淆”的Android App例子:

    
    public class JavaScriptObfuscator {
        public static String deobfuscate(String code) {
            String deobfuscatedCode = JavascriptObfuscator.restore(code);
            deobfuscatedCode = JavascriptObfuscator.replaceCharCodes(deobfuscatedCode);
            deobfuscatedCode = JavascriptObfuscator.replaceStrings(deobfuscatedCode);
            deobfuscatedCode = JavascriptObfuscator.restorePropertyAccess(deobfuscatedCode);
            deobfuscatedCode = JavascriptObfuscator.restoreIdentifiers(deobfuscatedCode);
            return deobfuscatedCode;
        }
        
        // Reverse the first stage of obfuscation (converts Js+Symbol obfuscation to standard JavaScript)
        private static String restore(String s) {/*...*/}

        private static String replaceStrings(String s) {/*...*/}

        private static String replaceCharCodes(String s) {/*...*/}

        private static String restorePropertyAccess(String s) {/*...*/}

        private static String restoreIdentifiers(String s) {/*...*/}
    }
    

这个App采用多种技术来反混淆JavaScript代码,包括还原字符串、字符转换等。

四、JavaScript反混淆还原工具

当我们需要通过混淆的JavaScript代码重构应用程序时,反混淆还原工具就特别有用了。

以下是一个基于俄语的JavaScript反混淆还原工具示例:

    
    var f$ = function (a$) {
        a$ = a$.replace(/\s+/g, "");
        return [a$.slice(0, a$.length / 2), a$.slice(a$.length / 2)]
    }
    

该代码将字符串拆分成两个部分。应用程序可以使用此工具来还原并解码被混淆的JavaScript代码。

五、JavaScript反混淆 Node.js

Node.js是一组基于Chrome V8引擎的JavaScript运行时。Node.js可以用于服务器端编程,同时也支持在命令行窗口中执行JavaScript命令。

以下是一个基于Node.js的反混淆代码的示例:

    
    var vm = require('vm');
    var script = new vm.Script('p\x72i\x6et(\x22Hel\x6co Wor\x6cd!\x22);');
    script.runInThisContext();
    

这段代码实现了将混淆代码还原为可读的字符串的效果。可以在Node.js环境中运行。

六、JavaScript反混淆滑块验证

在现代网站中,滑块验证用于防止机器人攻击。使用反混淆技术,可以更容易地突破这种验证。

以下是一个基于JavaScript的反混淆滑块验证示例:

    
    function decodeSliderPos(input) {
        const result = [];
        for (let i = 0; i < input.length; i += 2) {
            const pos = parseInt(input.substr(i, 2), 16) ^ 9;
            result.push(pos);
        }
        return result;
    }
    

这个函数用于解码滑块验证的位置信息,并将它们还原为可读的字符串。

七、代码反混淆

反混淆不仅仅适用于JavaScript代码,也适用于其他编程语言的代码。以下示例展示了如何在使用Java编写的应用程序中反混淆代码:

    
    public class JavaCodeDeobfuscator {
        private int getIndex(String str) {
            int index = 0;
            for (int i = 0; i < str.length(); i++) {
                index += str.charAt(i);
            }
            return index % 10;
        }

        public String deobfuscate(String code) {
            String[] tokens = code.split("\\s+");

            StringBuilder sb = new StringBuilder();

            for (int i = 0; i  1) {
                    sb.append(token.substring(1));
                }

                sb.append(' ');
            }

            return sb.toString();
        }
    }
    

此代码将文字代码反混淆为易于理解的名称。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/230644.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-10 18:18
下一篇 2024-12-10 18:18

相关推荐

  • 使用JavaScript日期函数掌握时间

    在本文中,我们将深入探讨JavaScript日期函数,并且从多个视角介绍其应用方法和重要性。 一、日期的基本表示与获取 在JavaScript中,使用Date对象来表示日期和时间,…

    编程 2025-04-28
  • JavaScript中使用new Date转换为YYYYMMDD格式

    在JavaScript中,我们通常会使用Date对象来表示日期和时间。当我们需要在网站上显示日期时,很多情况下需要将Date对象转换成YYYYMMDD格式的字符串。下面我们来详细了…

    编程 2025-04-27
  • JavaScript中修改style属性的方法和技巧

    一、基本概念和方法 style属性是JavaScript中一个非常重要的属性,它可以用来控制HTML元素的样式,包括颜色、大小、字体等等。这里介绍一些常用的方法: 1、通过Java…

    编程 2025-04-25
  • CloneDeep函数在Javascript开发中的应用

    一、CloneDeep的概念 CloneDeep函数在Javascript中是一种深层克隆对象的方法,可以在拷贝对象时避免出现引用关系。使用者可以在函数中设置可选参数使其满足多种拷…

    编程 2025-04-25
  • JavaScript中的Object.getOwnPropertyDescriptors()

    一、简介 Object.getOwnPropertyDescriptors()是JavaScript中一个非常有用的工具。简单来说,这个方法可以获取一个对象上所有自有属性的属性描述…

    编程 2025-04-25
  • JavaScript保留整数的完整指南

    JavaScript是一种通用脚本语言,非常适合Web应用程序开发。在处理数字时,JavaScript可以处理整数和浮点数。在本文中,我们将重点关注JavaScript如何保留整数…

    编程 2025-04-25
  • JavaScript点击事件全方位指南

    一、click事件基础 click事件是最常用的鼠标事件之一,当元素被单击时触发。click事件适用于大多数HTML元素(<a>、<button>)和SVG…

    编程 2025-04-25
  • 详解JavaScript onclick事件

    一、onclick的基础知识 onclick事件是JavaScript中最常用的事件之一,它在用户点击某个HTML元素时触发。通常我们可以通过给元素添加一个onclick属性来绑定…

    编程 2025-04-25
  • JavaScript浅拷贝

    一、什么是浅拷贝 在JavaScript中,浅拷贝是一种将源对象的属性复制到目标对象中的方法。浅拷贝的实现方式有多种,包括直接赋值、Object.assign()、展开运算符、co…

    编程 2025-04-25
  • JavaScript 数组转成字符串

    一、数组转成字符串的基本操作 在 JS 中,将数组转成字符串是一项最基本但也最常见的操作之一。我们可以使用 Array 类型内置的 join() 方法实现。它将数组的元素连接成一个…

    编程 2025-04-25

发表回复

登录后才能评论