2025年4月15日 星期二 乙巳(蛇)年 正月十六 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

有道词典爬虫的js解密过程

时间:08-21来源:作者:点击数:20
城东书院 www.cdsy.xyz
概述

这里尝试的是破解某道翻译的js加密,网址如下:http://fanyi.youdao.com/

过程讲解
第一步

首先需要寻找翻译结果的请求地址,这里建议使用chrome浏览器,在后续的一些调试功能和快捷键上更加方便使用,先按f12打开开发人员工具,选择network,然后输入一个要翻译的内容,寻找结果,结果可以发现请求结果在如下图所示的链接里:

image.png
第二步

观察请求链接和请求头以及header,观察其中的规律,然后先用爬虫测试一下

请求链接
可能会用得上的请求头
请求数据

第三张图尤其注意,因为js加密往往就是对这个地方的数据进行加密传输,而加红框的地方经过尝试,可以发现是请求时会发生变动的地方,先把请求头和data完整复制,然后用爬虫尝试,代码如下:

  • import requests
  • headers = {
  • 'Content-Length': '200',
  • 'Cookie': 'OUTFOX_SEARCH_USER_ID=-1066101715@10.169.0.84; '
  • 'OUTFOX_SEARCH_USER_ID_NCOO=805928033.6230187; '
  • 'JSESSIONID=aaaB8dqXbJ9XM4ahhsuAw; '
  • '___rl__test__cookies=1540086196483',
  • 'Host': 'fanyi.youdao.com',
  • 'Origin': 'http//fanyi.youdao.com',
  • 'Referer': 'http//fanyi.youdao.com/',
  • 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 '
  • '(KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
  • }
  • data = {
  • 'action': 'FY_BY_REALTIME',
  • 'client': 'fanyideskweb',
  • 'doctype': 'json',
  • 'from': 'AUTO',
  • 'i': 'look',
  • 'keyfrom': 'fanyi.web',
  • 'salt': '1540087006029',
  • 'sign': '675f5b51df2c8db9a12fe102f3355277',
  • 'smartresult': 'dict',
  • 'to': 'AUTO',
  • 'typoResult': 'false',
  • 'version': '2.1'
  • }
  • url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
  • res = requests.post(url, headers=headers, data=data)
  • print(res.text)
  • 结果为:
  • {"translateResult":[[{"tgt":"看","src":"look"}]],"errorCode":0,"type":"en2zh-CHS","smartResult":{"entries":["","n. 看;样子;面容\r\n","vi. 看;看起来;注意;面向\r\n","vt. 看;期待;注意;面向;看上去像\r\n"],"type":1}}

可以看到请求返回成功,然后删除一些数据,观察能否访问成功,最终发现必须的请求头和data如下:

  • headers = {
  • 'Cookie': 'OUTFOX_SEARCH_USER_ID=-1066101715@10.169.0.84;',
  • 'Referer': 'http//fanyi.youdao.com/',
  • 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 '
  • '(KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
  • }
  • data = {
  • 'client': 'fanyideskweb',
  • 'i': 'look',
  • 'keyfrom': 'fanyi.web',
  • 'salt': '1540087006029',
  • 'sign': '675f5b51df2c8db9a12fe102f3355277',
  • }

而除了data里的isaltsign和headers的cookie以外,其他都是固定的,并且cookie就用这个也行

第三步

通过上面得出的规律,那么接下来的目标就是对于data里三个数据的模拟解析了,i很明显是要查询的单词,而saltsign则需要我们去找加密的规则,所以现在在chrome浏览器下按ctrl+shift+f打开全局查找,先查找我们要知道的salt,如图:

image.png

可以看到代码如下:

image.png

虽然能看到这些参数,却没看到计算公式,所以我们在该代码里继续通过ctrl+f查找salt的位置,最终看到下面这个公式:

image.png

可以看出saltsign的计算加密这里实现了

第四步

找到了加密代码以后,我们就可以将其转换成python代码来模拟,或者用一些模块带执行js语句获得结果,这里用python模拟方法,其中t可以用python解析为:

  • import time
  • import random
  • t = str(time.time()*1000 + random.randint(1, 10))
  • #*1000是在后面调试时发现时间戳刚好少了个1000

知道了t以后,就差一个e不知道了,于是我们可以开始用浏览器进行js调试,观察e的值。调试步骤如下:

1.在需要得知数据的地方点击行数设置断点,改行变成蓝色即说明设置成功,如图:

设置断点

2.重新输入一个单词,即会自动帮你调试,如图:

image.png

这下可以发现原来e就是单词本身,所以接下来sign用python解析成的代码就是:

  • import hashlib
  • e = '要查询的单词'
  • tmp = 'fanyideskweb' + e + t + '6x(ZHw]mwzX#u0V7@yfwK'
  • sign = hashlib.md5(tmp.encode('utf-8')).hexdigest()

测试后结果发现成功!源码如下:

  • import requests
  • import time
  • import random
  • import hashlib
  • url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
  • headers = {
  • 'Cookie': 'OUTFOX_SEARCH_USER_ID=-1066101715@10.169.0.84;',
  • 'Referer': 'http//fanyi.youdao.com/',
  • 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 '
  • '(KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
  • }
  • data = {
  • 'client': 'fanyideskweb',
  • 'keyfrom': 'fanyi.web'
  • }
  • e = input('请输入单词>>')
  • t = str(time.time()*1000 + random.randint(1, 10))
  • tmp = 'fanyideskweb' + e + t + '6x(ZHw]mwzX#u0V7@yfwK'
  • sign = hashlib.md5(tmp.encode('utf-8')).hexdigest()
  • data['i'] = e
  • data['salt'] = t
  • data['sign'] = sign
  • res = requests.post(url, headers=headers, data=data)
  • print(res.text)
总结

到这里js加密的破解就结束了,可以看到在流程当中比较重要的地方就是:

1.找数据,知道该网站会对哪些数据和请求头进行验证

2.找规律,寻找这些数据的加密规则

3.调试js,学会浏览器中对js代码进行调试

4.模拟数据,将这些数据通过代码模拟生成,然后加入到数据当中

城东书院 www.cdsy.xyz
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐