有道翻译后台破解的问题。

2019-07-12 18:30:34 +08:00
 woshichuanqilz

https://zhuanlan.zhihu.com/p/40797421

我是参考这个文章,对有道翻译的后台做了一个 js 的破解。 破解的原理大概是这样的, post 的 form 里面有几个值, f, d, ....之类的:

但是应该是有有道的后台做了更新,这个破解失效了, 返回错误码。 {"errorCode":50}

现在这种情况,我应该从哪种思路往下继续进行? 我的理解是这个 post 请求已经完全还原了真实的浏览器的请求不知道还有那些可以尝试的点?

3480 次点击
所在节点    Python
7 条回复
throns
2019-07-12 18:39:22 +08:00
这里不是不允许讨论破解相关的问题吗?
locoz
2019-07-13 10:07:25 +08:00
这个不叫“后台破解”…看标题还以为你在搞渗透,叫“请求加密参数破解”还差不多。
网上的文章与实际情况有出入是很正常的事情,照抄之后发现没有效果你可以自己逆向一下看看到底长啥样,不知道入口在哪可以参考原文章(只要变动不太大)。
然后你现在这情况,你确定已经完全还原了么?抓个包对比一下看看?
wc110302
2019-07-13 18:14:56 +08:00
这个应该叫 js 加密破解吧
caneman
2019-07-15 10:11:43 +08:00
随手看了一下,这是 POST 需要的 data,

i: hello
from: AUTO
to: AUTO
smartresult: dict
client: fanyideskweb
salt: 15631545265703
sign: 12f5d8eb3bdf901b889fc20ae5b9f64c
ts: 1563154526570
bv: 3a019e7d0dda4bcd253903675f2209a5
doctype: json
version: 2.1
keyfrom: fanyi.web
action: FY_BY_REALTlME

关键的加密函数如下:
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 + "97_3(jkMYg@T[KZQmqjTK")
}

其中参数 e 是需要翻译的字符串
woshichuanqilz
2019-07-15 10:22:39 +08:00
@caneman 对, 我看教程的分析也是这样的, 关键的点就是时间戳和 md5, 但是这样用 python 写下来得到的返回值是 error 50, 我自己写的和之前教程上的代码都是这样。

```
# -*- coding: utf-8 -*-
# from lizhelib.scrapy_lizhe import *
import requests
import time
def str_MD5(origin_string):
import hashlib
m = hashlib.md5()
m.update(origin_string.encode('utf-8'))
return m.hexdigest()

keyword = "apple"
headers = {
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'en,zh-CN;q=0.9,zh;q=0.8,en-US;q=0.7',
'Connection': 'keep-alive',
'Content-Length': '237',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Cookie': 'OUTFOX_SEARCH_USER_ID=-1113838040@106.119.72.215; OUTFOX_SEARCH_USER_ID_NCOO=1539804542.6380599; _ntes_nnid=063365ee317cb05d955f6037c9b7f99b,1562145610441; DICT_UGC=be3af0da19b5c5e6aa4e17bd8d90b28a|; JSESSIONID=abcKgh9yV1U-IdF1piKVw; ___rl__test__cookies={}'.format(int(round(time.time() * 1000, 0))),
'Host': 'fanyi.youdao.com',
'Origin': 'http://fanyi.youdao.com',
'Referer': 'http://fanyi.youdao.com/',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest'
}

salt_value = str(int(round(time.time() * 1000, 0))) + '1'
form_data = {
'i': 'live',
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': salt_value,
'sign': str_MD5("fanyideskweb" + keyword + salt_value + "97_3(jkMYg@T[KZQmqjTK"),
'ts': str(int(round(time.time() * 1000, 0))),
'bv': str_MD5(headers["User-Agent"]),
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTlME'
}

url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
response = requests.post(url, headers=headers, data=form_data)
print(response.content)
```
woshichuanqilz
2019-07-15 10:25:52 +08:00
@caneman 代码我 append 到楼顶了, 回复里面贴代码缩进有问题
caneman
2019-07-15 13:49:25 +08:00
@woshichuanqilz
猜测,你写的 ts/salt 的部分可能有问题(我没细看),还有就是 bv 部分,appVersion 和 User-Agent 的输出格式不一样的
我下面的这个版本是能正常返回结果的,随便写的有点糙,凑合着看吧
import requests
import time
import random
import hashlib


def md5(k):
m = hashlib.md5()
m.update(k.encode('UTF-8'))
return m.hexdigest()


url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
appversion = '5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'

keyword = 'youdao'

ts = int(time.time() * 1000)
salt = ts * 10 + int(random.uniform(0, 1) * 10)
bv = md5(appversion)
sign = md5('fanyideskweb' + keyword + str(salt) + '97_3(jkMYg@T[KZQmqjTK')

data = {
'i': keyword,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': salt,
'sign': sign,
'ts': ts,
'bv': bv,
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTlME',
}

headers = {
'Cookie':'YOUDAO_MOBILE_ACCESS_TYPE=1; OUTFOX_SEARCH_USER_ID=-926550273@10.169.0.84; JSESSIONID=aaadmmGUl_OHN4PD2j0Vw; ___rl__test__cookies={}; OUTFOX_SEARCH_USER_ID_NCOO=298433689.2039179'.format(ts),
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Origin': 'http://fanyi.youdao.com',
'Referer': 'http://fanyi.youdao.com/',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest'}

res = requests.post(url, data=data, headers=headers)
print(res.text)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/582482

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX