CTF小训练_简单的js解密-解密脚本(Python)

http://ctf.idf.cn/game/web/43/index.php

网页另存后我们分析一下其中的js代码,可以看到pseudoHash函数,还有传入的密文

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<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('4b4f4d1c1e1c4c1b1e1c194d1a194c4a4f4a4f1c1e484d484b4c1e1a491c1e48', 'DECRYPT');
// ]]></script>

可以看到if (‘ENCRYPT’ == method){}中是加密过程,分析一下应该是

  1. 将每一位字符转为unicode码值存入charCode
  2. 如果大于127将其减去128 或 如果小于128将其加上128
  3. hexCode为255-charCode转为16进制,如果不是两位用0补齐

搞懂怎么加密的就可以很轻松的再算回去了,下面就是我写的Python解密脚本

 

1
2
3
4
5
6
7
8
9
10
11
string="4a4d1e1e4e49191c4a494848461e1c461d4d1e1a464e1e471d4b48464d481d1e"
ans=''
for i in range(0,len(string),2):
    charCode=255-int(string[i:i+2],16)
    print string[i:i+2]
    if charCode>128:
        charCode-=128
    else:
        charCode+=128
    ans+=chr(charCode)
print ans

解出密码后在网页上提交就可以得到flag了,OK大功告成……这也能算大功么…………

花絮 :    其实在提交答案获得flag这我还是绕了点弯的,最早在答题界面提交不好使,难道是加密有问题?把答案逆序呢?还是不行…奥对得加上wctf{},还是不行……难道要在这个网页提交?网页源码里明明没有能解密的部分啊.算了试试吧,额…竟然就是要在这提交…

奥对,他还是要把表单提交到后台代码处理的………