我一直在研究一些代码的逆向工程,我已经陷入困境了。这基本上只是一个逻辑问题,我无法包裹我,我和我的伙伴都坚持这个。
设置:
function decrypt(s) {
var r = "";
var tmp = s.split("9812265");
s = unescape(tmp[0]);
k = "4849604567466";
var temp, temp2, temp3, tempf;
for( var i = 0; i < s.length; i++) {
temp = parseInt(k.charAt(i%k.length));
temp2 = s.charCodeAt(i);
temp3 = (temp^temp2)-3;
tempf = String.fromCharCode(temp3);
r += tempf;
}
return r;
}
我有这个功能,循环是我们无法逆转的。意味着要将HTML变成一堆字符然后逃避这些字符。我编写了一个可以转义任何字符串的方法,因此该部分很容易。预先形成变化的循环对我来说只是一个逻辑问题。
答案 0 :(得分:0)
function encrypt(output)
{
var SecretNumber = "4849604";
var returnValue = "";
for(var n = 0; n < output.length; n++)
{
returnValue += String.fromCharCode(parseInt(SecretNumber.charAt(n%SecretNumber.length))^(output[n].charCodeAt(0))+3);
}
return escapeAny(returnValue) + 9812265 + (escapeAny(SecretNumber));
}
与前面提到的转义字符串函数配对:
function escapeAny(string)
{
var list1 = [];
var list2 = [];
for(i = 16; i < 255; i++)
{
list1[i-16] = ("%" + i.toString(16).toString());
list2[i-16] = (unescape(list1[i-16]));
}
var charAr = string.split('');
var newChat = [];
for(i = 0; i < charAr.length; i++)
{
var currentChar = charAr[i];
var charNumber = list2.indexOf(currentChar);
var ret = list1[charNumber];
newChat[i] = ret;
}
String.prototype.replaceAll = function(search, replacement) {
var target = this;
return target.replace(new RegExp(search, 'g'), replacement);
};
return newChat.join().replaceAll(",", "");
}
这个解决方案似乎运作良好。