声明:该文章仅用于学习,不得用于商业用途,如有问题,请联系作者删除!
目标网址:https://www.aqistudy.cn/
反爬手段:
- 反调试机制
- 参数加密
一、反调试机制
当我们打开网页进入开发者工具时,就会触发它的反调试机制,如图:
反调试效果.png
解决方法
在反调试函数打上断点,如图第191行,重新运行,在Console处输入以下内容,将反调试方法滞空即可
function endebug(){}
二、参数加密
- 直接全局搜索参数名hWKRQHbQa(这个是动态的)
image.png -
可以看到这是一个eval加密,直接去掉eval,把剩下的拉去console打印出来
image.png -
把结果拉去编辑器格式化一下,方便查看
image.png -
结果已经出来了
image.png -
这个即是参数名
image.png - 这些即是参数的加密规则
-
至于这个method的值是什么,断点调试即可得出,这里不详细讲述
image.png - 至此完成了对参数的解密。
- 至于如何用python eval解密 GitHub上已有人提供相应的包,可以尝试调用后,正则匹配出想要结果。https://github.com/thisforeda/js_eval_unpack
附上代码:
注意:这里有一个坑,这个data不能直接写成appId + method + timestamp + clienttype + json.dumps(obj) 原因json.dumps后冒号:后面有个空格,会影响md5的结果。
import hashlib
"""
:param secret参数 解密
"""
appId = '5ebd73491b42ee0561932f9b40c576a9' # 该appId为测试,实际使用aqistudy文件中得出的appId
clienttype = 'WEB'
method = 'GETDATA'
# timestamp = str(int(time.time()*1000)) # 实际使用
timestamp = '1584168590849' # 测试使用
obj = {"city": "临安"} # 测试使用 实际根据城市变化
data = appId + method + timestamp + clienttype + '{"city":"'+obj['city']+'"}'
# 这里有一个坑,这个data不能直接写成appId + method + timestamp + clienttype + json.dumps(obj) 原因json.dumps后冒号:后面有个空格,会影响md5的结果
print(data)
md = hashlib.md5()
md.update(data.encode('utf-8'))
print(md.hexdigest())
# "9c341eebd3cc24d786aa0c96e008917f" 测试得出结果
网友评论