有道翻译后台破解的问题。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
woshichuanqilz
V2EX    Python

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

  •  
  •   woshichuanqilz 2019-07-12 18:30:34 +08:00 4190 次点击
    这是一个创建于 2339 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    img

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

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

    第 1 条附言    2019-07-15 10:25:06 +08:00
    # -*- 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=', 'Cookie': '[email protected]; 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) 
    7 条回复    2019-07-15 13:49:25 +08:00
    throns
        1
    throns  
       2019-07-12 18:39:22 +08:00 via Android
    这里不是不允许讨论破解相关的问题吗?
    locoz
        2
    locoz  
       2019-07-13 10:07:25 +08:00 via Android
    这个不叫“后台破解”…看标题还以为你在搞渗透,叫“请求加密参数破解”还差不多。
    网上的文章与实际情况有出入是很正常的事情,照抄之后发现没有效果你可以自己逆向一下看看到底长啥样,不知道入口在哪可以参考原文章(只要变动不太大)。
    然后你现在这情况,你确定已经完全还原了么?抓个包对比一下看看?
    wc110302
        3
    wc110302  
       2019-07-13 18:14:56 +08:00
    这个应该叫 js 加密破解吧
    caneman
        4
    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
        5
    woshichuanqilz  
    OP
       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=',
    'Cookie': '[email protected]; 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
        6
    woshichuanqilz  
    OP
       2019-07-15 10:25:52 +08:00
    @caneman 代码我 append 到楼顶了, 回复里面贴代码缩进有问题
    caneman
        7
    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; [email protected]; 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=',
    '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)
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2442 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 02:06 PVG 10:06 LAX 18:06 JFK 21:06
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86