不难不易的js加密
解题地址:here
过程:打开源码页面,开始分析js代码
可以看到好多>.< 而且乱七八糟的感觉(好吧,大神就忽略这句吧)
首先将网站另存为到本地,其实网上有关于这方面解码的方法,这里我使用的document.write(blablablabla.....) ,改完之后在本地打开文件,就不贴图了,将页面上的代码复制下来替换原来的js代码,调整一下格式,得到如图结果:
<script type="text/javascript"> var a=prompt("u8f93u5165u4f60u7684x66x6cx61x67u5427uff0cu5c11u5e74uff01",""); var b="x66x33x33x37x33x65x33x36x63x36x37x37x37x35x30x37x37x39x66x35x64x30x34x66x66x37x38x38x35x62x33x65"; var c=/.+_.+_.+/gi;// g匹配所有 i对大小写不敏感 var d=0x0; var e=a.substr(0x8,0x5);// //d = 0 if($.md5(e)==b.replace(/7/ig,++d).replace(/8/ig,d*0x2)){// 8-12 jiami //d = 1 var f=a.substr(0x0/d,0x7); if(f.substr(0x5,0x2)=="x6ax73"&&$.md5(f.substr(0x0/d,d+0x3))=="x64x30x31x35x34x64x35x30x34x38x62x35x61x35x65x62x31x30x65x66x31x36x34x36x34x30x30x37x31x39x66x31"){//5-6js 0-3wctf //d = 1 document.write("2:"+d+" "); document.write("a:"+a+" "); r=a.substr(0xd);//Oxd=>13 //0xd = 1 document.write("rr:"+r+" "); // d = 0x1; if(r.charCodeAt(d)-0x19==r.charCodeAt(++d)-0x19&&r.charCodeAt(--d)-0x19==r.charCodeAt(--d)){//charCodeAt() 返回指定位置的unicode值 //d = 3 document.write("3:"+d+" "); var g=String.fromCharCode(0x4f); g=g.toLowerCase()+g.toLowerCase();//g =>oo document.write(r.substr((++d)*0x3,0x6)==g.concat("x65x61x73x79")+" "); //document.write("g:"+g.concat("x65x61x73x79")+" "); document.write(c.test(a)); if(c.test(a)){//easy document.write("4:"+d+" "); d=String(0x1)+String(a.length); document.write("5:"+d+" "); } } } }; if(a.substr(0x4,0x1)!=String.fromCharCode(d)||a.substr(0x4,0x1)=="x7a"){ alert("u989duff0cu518du53bbu60f3u60f3u3002u3002") }else{ alert("u606du559cu606du559cuff01") } </script>
好吧,接下来分析代码==>ok wctf{js_jiami_xxooeasy}
COOKIE欺骗
这道题目花了好几天(技术太渣T^T)
解题地址:here
过程:
面对页面一大串的乱码,第一反应就是去解码,结果大概都知道了...
查看url /index.php?line=&file=ZmxhZy50eHQ
传了2个值,其中file参数值有点加密的感觉,那就再来吧!通常url用的是base64加密,所以解之,附上在线解密网站:here
解出来该值为flag.txt,好吧看样子该目录下应该还有其他的文件等着我们来访问,那就随便试试几个常用的文件名吧,最后试出来是index.php的base64密文aW5kZXgucGhw,接下来就是使用line这个参数了,随便改了改1,2,3,4,5..... 我们可以发现页面有php代码出现,好吧,那就写个脚本来拿这个文件吧
import urllib url1 = "http://ctf.idf.cn/game/web/40/index.php?line=" url2 = "&file=aW5kZXgucGhw" result = "" for i in range(200): url = url1 + str(i) + url2 #print url wp = urllib.urlopen(url) content = wp.read() print content result += content print result
得到该php文件后,分析,cookie中如果有key并且对应idf,则加入flag.php base64加密后放入url,cookie中加入key:idf ok wctf{idf_c00kie}
<?php error_reporting(0); $file=base64_decode(isset($_GET['file'])?$_GET['file']:""); $line=isset($_GET['line'])?intval($_GET['line']):0; if($file=='') header("location:index.php?line=&file=ZmxhZy50eHQ"); $file_list = array( '0' =>'flag.txt', '1' =>'index.php', ); if(isset($_COOKIE['key']) && $_COOKIE['key']=='idf'){ $file_list[2]='flag.php'; } if(in_array($file, $file_list)){ $fa = file($file); echo $fa[$line]; } ?>
古老的邮件编码
uuencode编码,随便找个网站解一下
超简单的js题
纯粹的解码
简单的js解密
解题地址:here
查看js源码,源码有提示返回字符的ascii值
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 (charCode < 128) { charCode += 128; } else if (charCode > 127) { charCode -= 128; } charCode = 255 - charCode; hexCode = charCode.toString(16); if (hexCode.length < 2) { hexCode = '0' + hexCode; } output += hexCode; } // Return output return output; } else if ('DECRYPT' == method) { // DECODE MISS // Return ASCII value of character return string; }
解密过程为加密过程的逆过程,首先我们将字符串2个一组来处理,当做hex值转化为acsii值,由于加密过程对acsii值小于128的加了128,所以解密过程要将128减去(还有一个是大于127减128的处理,但是因为密文没有超过128的,所以我没有在解密代码中对该步骤进行逆转化)
解密代码:
var charCode = ""; var hexCode = 0; var output = ""; for(var i=0;i<string.length;i+=2){ if(string[i] == '0'){ charCode = string[i+1]; } else { charCode = string[i]+""+string[i+1]; } hexCode = parseInt(charCode,16); output += String.fromCharCode(255-hexCode-128); } // Return output return output;
在页面上输出得到一串MD5值:b0bef4c9a6e50d43880191492d4fc827
再次打开原来的网页,提交该字符串,得到key wctf{jS_decRypt__Eaaasy}
一种编码而已
复制贴到控制台,答案就出来了,可以查查 jsfuck