CTF训练营-简单的js解密

题目(原题地址)如下:

jdjjsjm1

思路:看到这个题目的时候,我的第一反应是想起了前几天在知乎上看到的一个回答,直接在控制台用js把密码显示出来,代码如下:

javascript:console.log("Password: "+document.querySelectorAll("input[type=password]")[0].value);

但是结果并不如人意,发现显示出来的是一串64个字符的加密文本。换思路,F12看网页源码,结果发现了一段js代码(离答案又近了一步)

<script>
/**
 * Pseudo md5 hash function
 * @param {string} string
 * @param {string} method The function method, can be 'ENCRYPT' or 'DECRYPT'
 * @return {string}
 */
function pseudoHash(string, method) {
  // Default method is encryption
  if (!('ENCRYPT' == method || 'DECRYPT' == method)) {
    method = 'ENCRYPT';
  }
  // Run algorithm with the right method
  if ('ENCRYPT' == method) {
    // Variable for output string
    var output = '';
    // Algorithm to encrypt
    for (var x = 0, y = string.length, charCode, hexCode; x < y; ++x) {
      charCode = string.charCodeAt(x);
      if (128 > charCode) {
        charCode += 128;
      } else if (127 < charCode) {
        charCode -= 128;
      }
      charCode = 255 - charCode;
      hexCode = charCode.toString(16);
      if (2 > hexCode.length) {
        hexCode = '0' + hexCode;
      }
      
      output += hexCode;
      
    }
    // Return output

    return output;
  } else if ('DECRYPT' == method) {
    // DECODE MISS
    // Return ASCII value of character
    return string;
  }
}
document.getElementById('password').value = pseudoHash('484b4c4c464b1d1a19194b1d4e4d474d1d1e484c4a1a4a1a4c484d4c1a1b484b', 'DECRYPT');
</script>

由此可见网页的密码是用js插入的,出题者只给了加密的代码,pseudoHash的参数是解密,但解密的代码部分是空的,需要我们通过给出的加密函数反推出解密函数(考验编程的时候到了)。查了下js的几个函数的意思,大致加密过程如下:
1)给定要加密的字符串;
2)逐个取出并计算他们的Unicode编码,如果编码小于128,则编码加128 如果编码小于127 ,则编码减去128.然后在用255减去处理的编码;
3)将处理后的编码转成2位的16进制,头部缺的补0;
4)十六进制转成字符串组合起来就是加密后的字符串。

写出对应的反推代码如下(用的python,js不熟练)

hexcode = '4d4f1948461e4a191e464f1c4f4846491b4d1c191b1d1a4748494c1b191d4948'
ans = ''

for i in range(len(hexcode)-1):
    if(i%2 == 0):
        b = int(hexcode[i]+hexcode[i+1],16)
        c = 255-b-128
        ans += chr(c)

print ans

解出来是20f79a5fa90c0796d2cfdbe8763dfb67,用MD5解密 发现是7560,提交发现答案不对。然后直接用md5提交到密码框,答案就出来了(囧)。

——Snake

snake

作者: snake

我们需要为这个社会做一点贡献,失去了才懂得去珍惜。

发表评论

电子邮件地址不会被公开。 必填项已用*标注