题目链接: http://ctf.idf.cn/index.php?g=game&m=article&a=index&id=28

就是这里 → 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 语句可得猜测正确,条件转向“恭喜恭喜”。

IDF-CTF-不难不易的js加密 writeup的更多相关文章

  1. IDF实验室—不难不易的js加密

    查看源代码 <html> <head> <script src="/tpl/wctf/Public/js/lib/jquery.js">< ...

  2. IDF-CTF-简单的js加密 writeup

    题目链接: http://ctf.idf.cn/index.php?g=game&m=article&a=index&id=43 知识点:js语法 这里这里→ http://c ...

  3. CTF中那些脑洞大开的加密(1)

    0x01 目录 各种文本加密             Shell   1 2 3 4 5 6 7 8 9 10 11 12 换位加密:     1.栅栏密码(Rail-fence Cipher)    ...

  4. js加密后台加密解密以及验证码

    该文档为转载内容: 加密解密 1 前端js加密概述 2 前后端加密解密 21 引用的js加密库 22 js加密解密 23 Java端加密解密PKCS5Padding与js的Pkcs7一致 验证码 1 ...

  5. 翻译小工具制作,Python简单破解有道JS加密!

    写这篇文章之前,我记得我以前好像公布一次.百度翻译的接口把版本号修改可以得到老版本,而老版本是没JS加密的,有道的呢也是一样的. ! 不过今天的教程不会这么low,咱们今天就老老实实把有道翻译的JS破 ...

  6. 昆仑游戏[JS加密修改]

    昆仑游戏:http://www.kunlun.com/index.html JS加密修改 BigTools=window.BigTools;//重点 RSAKeyPair=window.RSAKeyP ...

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

    很多人会使用web主题公园网站的免费worldpress主题,但它的主题又都被加了版权信息,故意让人找不到版权信息的修改位置. 你如果去footer.php里面删除版权信息(技术支持:web主题公园) ...

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

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

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

    RSA加密前端JS加密,后端asp.net解密,报异常 参考引用:http://www.ohdave.com/rsa/的JS加密库 前端JS加密代码: function GetChangeStr() ...

随机推荐

  1. ORM数据库的增删改查

    数据库可视化工具: https://sqlitestudio.pl/index.rvt from app01 import models def orm(request): #增加数据 # 方法1: ...

  2. asp.net 获取表单中控件的值

    原文:https://blog.csdn.net/happymagic/article/details/8480235   C# 后台获取前台 input 文本框值.(都是以控件的Name来获取) s ...

  3. WannaCry的UWP版,哈哈哈

  4. 线程屏障CyclicBarrier实现原理

    生产环境中,存在需要等待多个线程都达到某种状态后,才继续运行的情景.并发工具CyclicBarrier就能够完成这种功能.本篇从源码方面,简要分析CyclicBarrier的实现原理. 使用示例 pu ...

  5. 2018-8-10-sublime-Text-正则替换

    title author date CreateTime categories sublime Text 正则替换 lindexi 2018-08-10 19:16:52 +0800 2018-2-1 ...

  6. R语言——ggplot2补充知识点

    案例 ggplot(head(age_data,10),aes(x=reorder(Country,age_median),y=age_median))+ geom_bar(aes(fill=Coun ...

  7. Linux 普通用户自动修改密码

    在大量服务器运维中,维护服务器账号就让人头痛,对账号密码策略要求,现写了一个shell脚本来完成账号密码的修改,当然这个不是最好的方法,只是在没有其它辅助服务时使用,最好还是使用账户统一管理服务来维护 ...

  8. Vue 组件间的传值(通讯)

    组件之间的通讯分为三种 父给子传 子给父传 兄弟组件之间的通讯 1 父组件给子组件传值 子组件嵌套在父组件内部,父组件给子组件传递一个标识,在子组件内部用props接收,子组件在模板里可以通过{{}} ...

  9. python 在不同CPU上同时运行多个程序

    出处/From https://www.quora.com/If-you-run-Python-under-a-dual-core-CPU-then-can-you-run-two-Python-pr ...

  10. Conda 中安装 Keras

    conda create -n keras python=3.5 ipykernel activate keras python -m ipykernel install --user --name ...