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/zh-hant/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

發表回復

登錄後才能評論