概述
文章目录
- 前言
- 一、JS逆向是什么?
- 二、分析和编写代码
- 1.分析
- 2.编写代码
- 总结
前言
js逆向第一战。
一、JS逆向是什么?
抓取网页端数据时,经常被加密参数、加密数据所困扰,获取不到想要的数据。这个时候需要根据JavaScript的代码逆向进行解决问题。
二、分析和编写代码
1.分析
地址:有道翻译
在输入框内输入英文,抓包工具中新增一个接口:
显而易见,这就是我们想要的数据,那么我们来看看请求头。
对比多个请求头的参数后发现,salt,sign,和lts是一直动态变化的,我们去搜索一下sign在js文件中出现的位置,并初步排除一下代码段。
搜到一条结果,格式化一下,再在其中搜索sign:
有十五个值,我们根据特征逐条查看一下,找到了其中的关键片段:
这里可以很清楚的看到:
- 调用了工具md5加密
- (new Date).getTime() 时间戳
- parseInt(10 * Math.random(), 10) 10以内的随机数
- n.md5(“fanyideskweb” + e + i + “Tbh5E8=q6U3EXe+&L[4c@”) 拼接字符串后,进行md5加密
于是,打断点进行测试,注意在语句运行之后打断点:
于是这里的e就是我们输入的英文字符串,r是时间戳,i是时间戳后加一个随机数,对应关系为: - ts: r
- salt: i
- sign: 拼接并加密后的e
与我们的请求头对应上了,接下来我们只需要在python中模仿其做出相同的操作即可。
2.编写代码
代码如下:
import requests
import random
import hashlib
import time
class TranslationSpider:
def __init__(self, word):
# 先请求基本页面再请求接口,session中会存在对应的cookie等参数
self.base_url = 'http://fanyi.youdao.com/?keyfrom=fanyi-new.logo'
# 接口地址
self.url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
# 初始化session
self.session = requests.session()
# 初始化伪装头
self.headers = {
'Referer': 'http://fanyi.youdao.com/',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.66 '
}
# 初始化参数
self.word = word
self.data = {}
def generator_data(self):
# 获得时间戳
ts = str(int(time.time() * 1000))
# 时间戳加随机数
salt = ts + str(random.randint(0, 10))
# md5加密
sign = "fanyideskweb" + self.word + salt + "Tbh5E8=q6U3EXe+&L[4c@"
md5 = hashlib.md5()
md5.update(sign.encode())
sign = md5.hexdigest()
# post请求的参数
self.data = {
"i": self.word,
"from": "AUTO",
"to": "AUTO",
"smartresult": "dict",
"client": "fanyideskweb",
"salt": salt,
"sign": sign,
"lts": ts,
"bv": "b286f0a34340b928819a6f64492585e8",
"doctype": "json",
"version": "2.1",
"keyfrom": "fanyi.web",
"action": "FY_BY_REALTlME"
}
def get_request(self):
# 请求初始界面
self.session.get(url=self.base_url, headers=self.headers)
# 再请求接口地址 并返回json
response = self.session.post(url=self.url, data=self.data, headers=self.headers).json()
return response
def parse_json(self, json):
# 解析传过来的json数据
tgt = json['translateResult'][0][0]['tgt']
entries = json['smartResult']['entries']
print('英文{}翻译结果为:{}'.format(self.word, tgt))
print(''.join(entries))
def run(self):
# 调用封装好的方法
self.generator_data()
self.parse_json(self.get_request())
if __name__ == '__main__':
# 循环翻译
while True:
w = input('输入需要翻译的英文:')
# 输入exit0退出
if w == 'exit0':
print('退出成功!')
break
# new一个对象
spider = TranslationSpider(w)
# 运行
spider.run()
总结
第一个js逆向的项目结束,以后再见。
最后
以上就是笨笨硬币为你收集整理的python有道翻译js逆向前言一、JS逆向是什么?二、分析和编写代码总结的全部内容,希望文章能够帮你解决python有道翻译js逆向前言一、JS逆向是什么?二、分析和编写代码总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复