JS 代码解码:混淆代码解析与还原
这是经过混淆的 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 函数获取一个用于解码的密钥。
解码过程:
decodeString函数接收一个编码后的字符串,并通过decodeBase64和decodeXOR函数对其进行解码。decodeBase64函数利用 Base64 编码表将编码后的字符串解码为原始字符串。decodeXOR函数使用异或运算对解码后的字符串进行解密,密钥为 'jsjiami.com'。getDecodedString函数接收一个数组和一个索引,并将数组中对应索引处的编码字符串解码为原始字符串,并更新数组中的对应元素。getKeys函数获取一个密钥数组,该数组包含用于解码的密钥。
总结:
本文通过解析混淆后的 JavaScript 代码,展示了如何通过解码技术还原代码的原始结构和功能。这对于理解和分析混淆代码,以及防范恶意代码攻击具有重要意义。
原文地址: https://www.cveoy.top/t/topic/mF9g 著作权归作者所有。请勿转载和采集!