目标网站:
http://www.pbc.gov.cn/jinrongwendingju/146766/index.htmlwww.pbc.gov.cnchrome走起,进入目标网站后ctrl+U,发现好像没有反爬?requests试一下
import
OK,走你~
一堆混淆过的js?
打开fiddler,刷新下目标网站。
然后发现,#1的请求返回的就是混淆过的js,然后网页进入了#2的url,#2又302重定向回了原目标网站,对比一下#1和#3两个请求,我们发现cookie变了,这时我们随便点进入一个新闻,观察fiddler的抓包情况,发现已经可以正常获得页面了,而新闻页面和#3的cookie是一样的。思路这时候就有了,读js,找到#2的url,重定向到#3后获取cookie或者直接session。
下一步读js,chrome在目标页面F12进入开发者选项,F1禁用js,刷新页面
什么破玩意儿咱先不管,ctrl+U看看源码。
好吧,脑壳疼,简单的反混淆吧,找个网站把这段代码格式化,再把eval语句变成正常人读的语句,然后就变成了这样。
然后把这些_0x3fb5e之类的破变量也变成人读的。
import re
# 读取js网页
with open('test.html', 'r') as f:
html = f.read()
# 把不是人看的变量名换成是人看的
real_name = iter('a' + str(i) for i in range(5000))
faker_name = set(re.findall(r'_0xw{4,6}', html))
print(faker_name)
for i in faker_name:
html = html.replace(i, real_name.__next__())
# 重新写入
with open('test.html', 'w') as f:
f.write(html)
好了,开始分析代码。
我们直接用ide把一些函数定义语句折叠方便阅读,就变成了这样子。
逻辑一目了然,定义了一堆字符串,一个长数组,还有几个函数,执行了funtion(a30, a136)(_a96, 0x123)这个函数,执行了a21(),然后一个if语句,js代码结束。
读完逻辑边调试边读详细代码,这里直接用chrome调试。
先把变量和函数定义好。
定义完开始读代码。
可以看到,这个函数就是把_a96的数组push+shift了几百次。
接下来就执行了a21(),我们来看看a21。
定义了个哈希表a120,key是字符串value是函数。
然后a15这里调用了a120里的元素a92('0x36', 'jo5I'),前面说了a120是个哈希表,那a92返回值应该就是其中的value,我们直接调用a92('0x36', 'jo5I')
可以看到,hwQpj确实是a120的一个key值,我们把a92函数都直接用结果替换,a21就变成了这样。
接下来
接下来
也就是说,a104就是最后的地址。
对了,a21()调用后还有一句:
翻译后:
就是提供加密的人的一个验证,让用了他的加密的开发者不能删除自己留的字符串,并不影响我们的反反爬。
也就是说,获得a104就能成功反反爬。ok,代码走起~
import
ok,结果get~
END!