这是经过混淆的 JavaScript 代码,其中包括一些变量和函数名被替换为了单个字符或数字的形式,以及一些字符串被编码为十六进制或 Base64 格式。以下是解码后的代码:

var responseText = document.getElementById('response');
responseText.innerHTML = '';

function decodeString(encodedString) {
    function decodeBase64(input) {
        var chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';
        var output = '',
            chr1, chr2, chr3 = '',
            enc1, enc2, enc3, enc4 = '';
        var i = 0;
        do {
            enc1 = chars.indexOf(input.charAt(i++));
            enc2 = chars.indexOf(input.charAt(i++));
            enc3 = chars.indexOf(input.charAt(i++));
            enc4 = chars.indexOf(input.charAt(i++));
            chr1 = (enc1 << 2) | (enc2 >> 4);
            chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
            chr3 = ((enc3 & 3) << 6) | enc4;
            output = output + String.fromCharCode(chr1);
            if (enc3 != 64) {
                output = output + String.fromCharCode(chr2);
            }
            if (enc4 != 64) {
                output = output + String.fromCharCode(chr3);
            }
            chr1 = chr2 = chr3 = '';
            enc1 = enc2 = enc3 = enc4 = '';
        } while (i < input.length);
        return output;
    }

    function decodeXOR(input, key) {
        var output = '';
        for (var i = 0; i < input.length; i++) {
            output += String.fromCharCode(input.charCodeAt(i) ^ key.charCodeAt(i % key.length));
        }
        return output;
    }

    var decodedString = decodeBase64(encodedString);
    decodedString = decodeXOR(decodedString, 'jsjiami.com');
    return decodedString;
}

function getDecodedString(index, array) {
    var key = getKeys()[0];
    var decodedString = decodeString(array[index]);
    array[index] = decodedString;
    return decodedString;
}

function getKeys() {
    var keys = (function() {
        return [...[version_, 'ljWsMVjYAirnalTOmgiHd.OkGcYomO.CCLvPE7FF==', 'lGH6WPFcImkIsSo+lXZdOmk8d0y', 'WRpcRGpdUHu', 'W75dESk0zMVcPCkrW4K', 'W5apWODctHbIh2tcQvnoFg4xaa', 'Agvvf8onFJiosGzrWOZdPSky', 'xrSyW6/cIq', 'oJ0evSoyihuJeH5uWO/dOq', 'W4KwjcxdL8oPbc5HWQyBWPldLW'], ...(function() {
            return [...['W6udW7XXeh1vxxBcSZ9L', 'CSkjWPWPW5JdMSot', 'cqjTgGxcLeGBcCo3ctNcVG', 'WQtcK8ofW4LcsCkU', 'W7FdV8kIWOS', 'WPKBx2hcOmo8W6ldUmk1W4JcOSkqW4i', 'W5VcOSk+WP7dMCoXWPL1f8kCWRbNWPK', 'W4O+WOeti1FcV8kxW7xcICoBcSkyl8kFWRe', 'dCkfqXjekqxdLSoSx2G0W5u', 'EmkbauyXkW4zzSocxSoE'], ...(function() {
                return ['wgKIhCoyBSk2uKRcRmkkaCkM', 'WQJdJCodWRfzW5u0jSk2W63cOCk7cbe', 'WQFdS0pdSepcJ3hdHJdcG1jz', 'l8kWWP0kW4hdUCowFSkA', 'wCogWOfPW7OIi8kxW7VdS8keW7ZcSW', 'WODIfSkN', 'cmoIhgexE2m', 'WQhdS3GDW5lcLq', 'W48qlYxdNmoIbG9wWQmWWQNdOa'];
            }())];
        }());
        return keys;
    }
    var key = getKeys()[0];
    return key.split('');
};

var prompt = document.getElementById('prompt').value,
    data = JSON.stringify({
        'prompt': prompt
    });
const response = await fetch(url, {
    'method': 'POST',
    'headers': {
        'Content-Type': 'application/json'
    },
    'body': data
});
if (response.status == 200) {
    const reader = response.body.getReader();
    while (true) {
        const { value, done } = await reader.read();
        if (done) break;
        responseText.innerHTML += new TextDecoder().decode(value);
    }
} else {
    responseText.innerHTML += '
你输入的问题有误,请重新输入!';
}
var version_ = 'jsjiami.com.v7';

该代码主要功能是接受用户输入的 prompt,然后通过网络请求将 prompt 发送到服务器,并在服务器响应成功后将服务器返回的结果显示在 responseText 元素中。该代码使用了 Base64 和 XOR 编码对字符串进行了混淆,并通过 getKeys 函数获取一个用于解码的密钥。

解码过程:

  1. decodeString 函数接收一个编码后的字符串,并通过 decodeBase64 和 decodeXOR 函数对其进行解码。
  2. decodeBase64 函数利用 Base64 编码表将编码后的字符串解码为原始字符串。
  3. decodeXOR 函数使用异或运算对解码后的字符串进行解密,密钥为 'jsjiami.com'。
  4. getDecodedString 函数接收一个数组和一个索引,并将数组中对应索引处的编码字符串解码为原始字符串,并更新数组中的对应元素。
  5. getKeys 函数获取一个密钥数组,该数组包含用于解码的密钥。

总结:

本文通过解析混淆后的 JavaScript 代码,展示了如何通过解码技术还原代码的原始结构和功能。这对于理解和分析混淆代码,以及防范恶意代码攻击具有重要意义。

JS 代码解码:混淆代码解析与还原

原文地址: https://www.cveoy.top/t/topic/mF9g 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录