IDF-CTF-不难不易的js加密 答题笔记

题目链接: http://ctf.idf.cn/index.php?g=game&m=article&a=index&id=28
知识点:js加密,js代码分析,md5解密,Unicode/Ascii码,正则表达式

就是这里 → http://ctf.idf.cn/game/web/28

思路:
点开链接后弹出一个窗口,要求输入flag,按F12可以看到窗口是用一段加密的js代码实现的,将这段js代码复制到站长工具中进行解密,得到解密后的js代码,然后将其中的Unicode码及Ascii码转换为相应的字符,结果如下:

<script type = "text/javascript" >
var a = prompt("输入你的flag吧,少年!", "");
var b = "f3373e36c677750779f5d04ff7885b3e";
var c = /.+_.+_.+/gi;
var d = 0x0;
var e = a.substr(0x8, 0x5);
if ($.md5(e) == b.replace(/7/ig, ++d).replace(/8/ig, d * 0x2)) {
    var f = a.substr(0x0 / d, 0x7);
    if (f.substr(0x5, 0x2) == "js" && $.md5(f.substr(0x0 / d, d + 0x3)) == "d0154d5048b5a5eb10ef1646400719f1") {
        r = a.substr(0xd);
        if (r.charCodeAt(d) - 0x19 == r.charCodeAt(++d) - 0x19 && r.charCodeAt(--d) - 0x19 == r.charCodeAt(--d)) {
            var g = String.fromCharCode(0x4f);
            g = g.toLowerCase() + g.toLowerCase();
            if (r.substr((++d) * 0x3, 0x6) == g.concat("easy") && c.test(a)) {
                d = String(0x1) + String(a.length)
            }
        }
    }
};
if (a.substr(0x4, 0x1) != String.fromCharCode(d) || a.substr(0x4, 0x1) == "z") {
    alert("额,再去想想。。")
} else {
    alert("恭喜恭喜!")
}
< /script>

分析代码,发现变量a就是我们要求的flag。
经过b.replace(/7/ig, ++d).replace(/8/ig, d * 0x2)后变量b变为f3313e36c611150119f5d04ff1225b3e,经md5解密后得到jiami,这就是变量e的值,而e = a.substr(0x8, 0x5)。
此时变量d=0x01,d0154d5048b5a5eb10ef1646400719f1经md5解密得到wctf,即f.substr(0x0, 0x4)=‘wctf’,又f.substr(0x5, 0x2) == “js”,且f = a.substr(0x0, 0x7),这样又可以确定变量a的一部分。
此时变量d=0x1,继续计算,可得r = a.substr(13),r.charCodeAt(1) == r.charCodeAt(2),r.charCodeAt(1) - 0x19 == r.charCodeAt(0),得到了三个位置的代数关系。
此时d=0x0,g=’oo’,r.substr(3, 6) == ‘ooeasy’,由c.test(a)为真结合flag一般为”wctf{…}”的格式可初步猜测变量a=’wctf{js_jiami_xxooeasy}’。
计算d=123,验证最后一个if语句可得猜测正确,条件转向“恭喜恭喜”。

?

时间: 2024-09-30 10:08:56

IDF-CTF-不难不易的js加密 答题笔记的相关文章

IDF-CTF-天罗地网-不难不易的js加密

题目:就是这里 → http://ctf.idf.cn/game/web/28 点击链接,弹出一个输入框.要求输入flag. 查看源代码,发现一个script脚本. 然后复制到站长工具js混淆加密压缩那里解密. http://tool.chinaz.com/js.aspx 得到解密后的代码: var a = prompt("\u8f93\u5165\u4f60\u7684\x66\x6c\x61\x67\u5427\uff0c\u5c11\u5e74\uff01", "&qu

IDF-CTF-简单的js加密 答题笔记

题目链接: http://ctf.idf.cn/index.php?g=game&m=article&a=index&id=43 知识点:js语法 这里这里→ http://ctf.idf.cn/game/web/43/index.php 思路: 查看网页源码,阅读js代码,发现函数实现了加密方法,但是解密的方法并没有实现,根据加密的部分我们容易写出解密的方法,如下: <html> <body> <script> /** * Pseudo md5

简谈-Python爬虫破解JS加密的Cookie

通过Fiddler抓包比较,基本可以确定是JavaScript生成加密Cookie导致原来的请求返回521. 发现问题: 打开Fiddler软件,用浏览器打开目标站点(http://www.kuaidaili.com/proxylist/2/) .可以发现浏览器对这个页面加载了两次,第一次返回521,第二次才正常返回数据.很多没有写过网站或是爬虫经验不足的童鞋,可能就会觉得奇怪为什么会这样?为什么浏览器可能正常返回数据而代码却不行? 仔细观察两次返回的结果可以发现: 1.第二次请求比第一次请求的

js加密php解密(CryptoJS)碰到的坑

今天做了一个功能,需要js传密码到php文件,对js密码 进行判断,为想为这个传输过程进行解密,参考了网上的一个方法(这个方法我只是使用了,并没有太深了解0.0) 首先要引入3个js文件 (在网上可搜索到) <script src="../public/js/aes.js"></script><script src="../public/js/md5.js"></script><script src="

昆仑游戏[JS加密修改]

昆仑游戏:http://www.kunlun.com/index.html JS加密修改 BigTools=window.BigTools;//重点 RSAKeyPair=window.RSAKeyPair;//重点调用functiongetToken 下面是匿名函数 (function(ab) { var ad = 2; var I = 16; var o = I; var Q = 1 << 16; var e = Q >>> 1; var M = Q * Q; var T

js加密的密文让PHP解密(AES算法)

JS加密代码如下 <script src="http://crypto-js.googlecode.com/svn/tags/3.0.2/build/rollups/aes.js"></script> <script src="http://crypto-js.googlecode.com/svn/tags/3.0.2/build/rollups/md5.js"></script> <script src=&qu

web主题公园版权信息破解:script.js加密文件

很多人会使用web主题公园网站的免费worldpress主题,但它的主题又都被加了版权信息,故意让人找不到版权信息的修改位置. 你如果去footer.php里面删除版权信息(技术支持:web主题公园),网站不能正常运行了且会提示:"请勿删除版权信息!务必保留页脚css类.f_bq,方可显示正常." 破解方法: 1.找到js目录下的script.js加密文件 打开script.js文件的内容为: eval(function(p,a,c,k,e,d){e=function(c){retur

RSA前台js加密,后台C#解密

一.需求: 为了安全,项目中前台登陆用的密码需要加密传到后台,后台c#解密登陆密码. 二.解决方案 采用非对称加密算法RSA来达到目的,前台登陆页面一加载便发送一次ajax请求获取后台产生的公钥,用于前台加密,用户点击登陆时出发加密过程并提交加密的数据到后台,后台C#语言采用已封装好的RSA算法工具进行密码解密. 以下为c#RSA算法加密代码: private static RSAParameters rsap = new RSAParameters() { Modulus = Convert.

RSA加密前端JS加密,后端asp.net解密,报异常

参考引用:http://www.ohdave.com/rsa/的JS加密库 前端JS加密代码: function GetChangeStr() { debugger; var pwdStr = document.getElementById("txtPassWordStr").value; var uidStr= $("#<%=txtUserStr.ClientID%>").val(); if (!pwdStr || pwdStr.length == 0