Author: Ali0thjavascript
Date : 2018-03-19html
@[TOC]java
这一篇是我以前发在先知上的文章,今天把它移过来。当时一开始作爬虫经过解析 js 的形式去破解,感受有点费力,如今通常不会这么搞,因此这篇文章大概看看就好。python
一开始浏览器看不到反爬虫的js代码。数组
难点:浏览器
一开始打开这个网站,比较难留意到有个状态是521页面的跳转。由于这个页面一小时只出现一次,而且为1500毫秒。cookie
过关技巧:eclipse
阻止cookie来得到javascript函数
具体实现:测试
删除cookie并阻止
查看源码
难点:
将真正的代码隐藏起来,阻止了那些直接一上来就解码的人。
过关技巧:
找到最终输出点为eval
具体实现:
1)美化 使用【jsbeautifier.org/】
2)理解代码
难点:
若是你看到上面有个eval就使用第二关的方法,那就错了,这里的eval在代码中间,只是用来拼接用的。并且这里还有个故意留下的坑,就是让程序运行错误,因此这里要好好理解代码,弄懂其逻辑。
过关技巧:
放到IDE里梳理代码。(这里使用ecilpse)
具体实现:
1)代码贴到ecilpse里
使用eclipse搭建一个js的测试页面,随时用浏览器刷新查看结果。
2)理清代码整体逻辑,并去掉不重要代码
如图为总体代码的大逻辑,因而咱们能够去掉不重要的代码,留下重要部分,放到eclipse里调试。
代码为:
最后的dc即输出了咱们要的结果。
3)输出dc出来
在最后写上一句【console.log(dc);】而后放到F12里:
看,这就是咱们获得要的结果。
可是,放在python里,这样流程走下来的结果偶尔会对,偶尔又不行了。为何呢?还要继续深挖。
难点:
特殊字符
过关技巧:
细心
具体分析:
cd数组,没错咱们要搞cd数组。看起来应该是jsfuck,打CTF常常会遇到。但这里的话要怎么去分解他呢?看到这个地方:
再仔细看看:f.reverse()[[-~[]]](cd[i])
其中,reverse()是逆序的意思,能够先去掉,就剩下:f[[-~[]]](cd[i])
这个的形式其实就是f[ ]( )
,就是调用上面的f函数的形式,那么最奇怪的点就在这里[ ]
里的[-~[]]
,它是直接用的! 因而我试着直接看它是值是什么:
它直接就是值为1的数组。那么直接看cd的值试试:
没错是一堆数组。用python看,里面是有几层数组:
为何会这样呢?js的什么特性致使了?想了半天,想到了不少年前看到的一篇文章【www.freebuf.com/sectool/535…
好了,过了这一关,基本上算是转折点,快接近终点了。
难点:
f函数逻辑。
过关技巧:
看懂f函数逻辑,慢慢调试才知每部分的功能。
具体分析:
上一关咱们看到数组里面还要数组,那么咱们就要看各个数组对应的是什么值。 通过调试,发现最多出现三层数组。咱们分别命令为x、y、z层。其中:
x层直接为字符串,只要拼接就好了。
y1层为ascii码。
y2层和z层为对应当前url的第n个字符。这就是为何上面第三关还不算成功的缘由。
再具体说明一下z层,下面这个函数能够得到当前的页面的url,因此每一个网站都不同的。因此这一层我的认为是个至关棒的设计。
好比这里访问的是http://localhost/
,那么先过滤出来localhost/
,而后若是cd里这个z层数组值是4,那么获得的字符是a
。因此最终,这个cd数组根据每一层的转换,就能变为:
而后拼接dc就是最终咱们要的结果了啦啦啦: