从解码方法编写编码方法

时间:2017-07-14 18:41:54

标签: javascript html encryption reverse-engineering

我一直在研究一些代码的逆向工程,我已经陷入困境了。这基本上只是一个逻辑问题,我无法包裹我,我和我的伙伴都坚持这个。

设置:

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变成一堆字符然后逃避这些字符。我编写了一个可以转义任何字符串的方法,因此该部分很容易。预先形成变化的循环对我来说只是一个逻辑问题。

1 个答案:

答案 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(",", "");

}

这个解决方案似乎运作良好。