破解JS 文件
以有到翻译为例:
当我们输入要翻译的内容后,他将这个内容以一个叫 translate_o?..的文件经过post请求发送到服务器,经过翻译在返回来。
以前我也写过实现通过有到实现翻译的,,,脑部连接当然很垃圾,先了解一下把。。。
sign: b44c32dfd09c7d3387ba4f00b115e82c
一堆乱七八糟东东西,,这就是经过加密的。我们只有知道它的逻辑,才能破解它,伪造他。。只有JS 来处理逻辑操作。
.js文件是JavaScript语言文件的扩展名。
JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。JavaScript已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常JavaScript脚本是通过嵌入在HTML中来实现自身的功能的。
所以我们要去找 js 编码方式,可以在网页源代码中搜索 .js ,然后找到对应的链接,进去在搜一下有没有 From Date 的参数
然后我们就找到了丑化的文件,,,真的很丑啊
百度搜一个美化网站放进去一格式化,就是我们人类可以看懂的了。。。在线json解析工具
然后我们就找到了,,,hhhhh。
i : 是我们要翻译的内容
from和to :用默认AUTO (自动)就行
client: 客户端使用原来的
salt = r.salt 于是我们去找 r , r = g.generateSaltSign(n), 就是我们把需要翻译的内容传给这个函数
再往上找,这个意思就是 r(是另一个) 是一个函数,赋值给了t.generateSaltSign(也就是 g.generateSaltSign(n))
t.generateSaltSign = r
再往上找,找到函数的定义 ,,,太恶心了
var r = function(e) {
var t = n.md5(navigator.appVersion),
r = "" + (new Date).getTime(), # 一个时间戳,前面加个 "" 将整形改变成字符型
i = r + parseInt(10 * Math.random(), 10);
return {
ts: r,
bv: t,
salt: i,
sign: n.md5("fanyideskweb" + e + i + "Nw(nmmbP%A-r6U3EUn]Aj")
}
};
- salt 就是 i
str(时间戳) + 0-10 之间的随机数
- sign
"fanyideskweb" + 翻译内容 + i + "Nw(nmmbP%A-r6U3EUn]Aj"
- ts 时间戳
- bv 是固定的,其实就是浏览器的版本,不用改
修改一下原来的
import requests
import json
import time,random,hashlib # 解码 md5
while True:
content = input("请输入:")
timestamp = time.time() * 1000 # 我们需要的是毫秒,所以承一千
salt = str(timestamp) + str(random.randint(0, 10))
temp = "fanyideskweb" + content + salt + "@6f#X3=cCuncYssPsuRUE"
sign = hashlib.md5(temp.encode("utf-8")).hexdigest()
if content == "":
print("欢迎下次使用")
break
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0"
, 'i': content,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': salt,
'sign': sign,
'ts': timestamp,
'bv': 'cc652a2ad669c22da983a705e3bca726',
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTlME'
}
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&sessionFrom=null'
response = requests.get(url, params=headers)
html = response.content.decode()
target = json.loads(html)
# print(html)
print("翻译结果:")
print(target['translateResult'][0][0]['tgt'])
print()
。。。是不是感觉比之前更nb了一点点,,,
但是如果去看淘宝的 js 文件,,,,我选择 selenlum…