爬虫(2)关于百度翻译API的JS渗透破解
现在开始,进入百度翻译页面
先说一下我们的目的:
获取这串json数据

F12进去发现,有两个很明显的请求连接 (图中已标识)

首先先来看输入语言检测api



很明显就是向这个地址发起Post请求,然后自动检测输入语言类别.

好戏现在开始!
很明显我们要开始处理百度翻译接口。
问题1:
我们看到这里的Post请求下的Form Data 我们只需知道sign 和 token 其他很好理解是什么



这里小编写了尝试了三遍输入,发现token完全一模一样。除了sign,好我们就从这个sign开始。
然后就进入我们的JS世界了。(这个环节是整个项目最重要的)

进入来之后发现3876行,然后我们设置DOM断点

然后重新输入翻译字体,实现debug功能

一步一步从上往下找 Call Stack (调用堆栈)里面找



最后在这里找到了data参数,并且发现了sign,随后我们点进去

直接模拟js代码,然后打断点,代码下面有

重新debug,bang bang bang,sign在这里产生(320305.131321201)然后顺理成章CV走

然后调试,安装node.js(js的运行环境),然后调试,直到能输出sign为止(过程中要用到gtk变量)
import execjs, requests, json, re
from datetime import datetime,timedelta
from common import langList
with open('./e.js', 'r', encoding='utf8') as f:
js = f.read()
jsfunc = execjs.compile(js)
sess = requests.Session()
sess.headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36',
'origin': 'https://fanyi.baidu.com',
'referer': 'https://fanyi.baidu.com',
}
def lan_detect(String):
r = sess.post('https://fanyi.baidu.com/langdetect', data={'query': String})
StringType = r.json()['lan']
print('你输入的翻译内容为', langList[StringType])
return StringType
def get_r():
for i in range(2):
r = sess.get('https://fanyi.baidu.com')
return r
def get_token():
r1 = get_r()
result2 = re.search(r"token: '(.+?)'", r1.text) # 6ba0a416db86c535db0158a86775297f
token = (result2.group(1))
return token
def get_sign(String):
r2 = get_r()
gtk = re.search(r"window.gtk = '(.+?)';", r2.text).group(1)
print('gtk', gtk)
sign = jsfunc.call('e', String, gtk)
print('sign', sign)
return sign
def baidutranslate(String, target_lan):
data = {
'from': lan_detect(String),
'to': target_lan,
'query': String,
'transtype': 'realtime',
'simple_means_flag': '3',
'sign': get_sign(String),
'token': get_token(),
}
r = sess.post('https://fanyi.baidu.com/v2transapi?', data=data)
translate_result = r.json()['trans_result']['data'][0]['dst']
print('翻译结果:', translate_result)
if __name__ == '__main__':
a = input('请输入你要翻译的内容')
baidutranslate(a, target_lan='jp')

浙公网安备 33010602011771号