ღ Miranda

IDF实验室-不难不易的JS加密

IDF上一道JS加密的题目。

题目链接: http://ctf.idf.cn/game/web/28/

打开会有提示框要输入flag,查看源代码得到下面的js代码:

找在线解密的解密一下得到js代码:


先对一些函数做解读:

  1. substr(start,length)方法可在字符串中抽取从start下标开始的指定数目的字符,length为可选参数,不写默认取到字符串最后一个字符。
  2. fromCharCode()方法可接受一个指定的Unicode值,然后返回一个字符串。
  3. test()方法用于检测一个字符串是否匹配某个模式,如果字符串 string 中含有与 RegExpObject 匹配的文本,则返回 true,否则返回 false。
  4. concat()方法用于连接两个或多个数组。

先看变量,c为一个正则表达式,d为0,e为取a索引8开始的5个字符。

$.md5(e) == b.replace(/7/ig, ++d).replace(/8/ig, d * 2)判断对emd5加密后的值与f3313e36c611150119f5d04ff1225b3e是否相等,解密为jiamia.substr(8, 5)='jiami',f为a开头取7位,d变为1。

f.substr(0x5, 0x2) == "js" && $.md5(f.substr(0x0 / d, d + 0x3)) == "d0154d5048b5a5eb10ef1646400719f1"其中md5解密为wctf,可以得到f.substr(5,2)='js'f.substr(0,4)='wctf',所以f为wctf*js,进一步得到a为wctf*js*jiami****...

r.charCodeAt(d) - 0x19 == r.charCodeAt(++d) - 0x19 && r.charCodeAt(--d) - 0x19 == r.charCodeAt(--d)r的第二位与第三位相同,第一位是第二位减去0x19,g为oo,因为a匹配c正则,所以r的第一位是_所以a为wctf{js_jiami_xx,由r.substr((++d) * 0x3, 0x6) == g.concat("easy")得a为wctf{js_jiami_xxooeasy}

发表评论

电子邮件地址不会被公开。