【2019.05】JS逆向——破解有道翻译参数(sign)爬虫 超级详细

38 篇文章 2 订阅
19 篇文章 3 订阅

有时间了打算把有道、百度、Google翻译都搞一遍,
今天先试水有道翻译
打开地址:

http://fanyi.youdao.com/

一. js逆向分析

打开Chrome调试工具,然后随意输入一段文字,查看抓包结果。
在这里插入图片描述

  • 发现是 post 请求
    在这里插入图片描述

Request URL: http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule

  • Form data 参数每次请求
    在这里插入图片描述

salt: 15584215877008
sign: 6ef278e78eca2affa23720a79c738d33
ts: 1558421587700
bv: a4da7fd2fcb0c879a8b1e37b497afb19

  • 观察参数
    • sign 参数每次请求都会变化
    • ts 参数是时间戳无疑
    • salt
    • bv
      看不出来其它信息,我们可以全局搜索一下不明所以的参数,这里先搜 sign
      在这里插入图片描述
      然后我们发现了 了不得 的东西
      在这里插入图片描述
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 + "@6f#X3=cCuncYssPsuRUE")
        }
    };

可以看出来:

ts 参数是通过 r = “” + (new Date).getTime() 生成; 也就是获取了当前的时间戳
bv参数是通过 t = n.md5(navigator.appVersion) 生成; 也就是 navigator.appVersion 的 MD5 加密
salt参数是通过 i = r + parseInt(10 * Math.random(), 10) 生成 即在 r(就是ts)的基础上在最后一位随机加上一个整数
sign参数是通过 md5(“fanyideskweb” + e + i + “@6f#X3=cCuncYssPsuRUE”)生成

这里面就此不知道是什么的有 :e, navigator.appVersion

  • 接下来打断点查看一下是啥?
    在这里插入图片描述
    可以看出:

e 是输入的文字
navigator.appVersion 是 user-agent

有道翻译的加密过程也就这样了,还是比较简单的。

二. python 编译

1. MD5

python 有一个 hashlib 库, 用来 md5 加密

import hashlib

def MD5(key):
    hash = hashlib.md5()
    hash.update(key.encode('utf-8'))
    return hash.hexdigest()

s = MD5('1324')

在这里插入图片描述

2. 结果展示

    1. 英文 -> 中文
      在这里插入图片描述
    1. 中文 -> 英文
  • 在这里插入图片描述

3. 代码

#!/usr/bin/env python
# encoding: utf-8
# @software: PyCharm
# @time: 2019/5/21 15:38
# @author: Paulson●Wier
# @file: youdao_fanyi.py
# @desc:
import random

import requests
import time
import hashlib


def md5_b(key):
    m = hashlib.md5()
    m.update(key.encode('utf-8'))
    return m.hexdigest()


def sign_b(key, salt):
    sign = 'fanyideskweb' + key + str(salt) + '@6f#X3=cCuncYssPsuRUE'
    return md5_b(sign)


def translate(key):
    url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
    salt = str(int(time.time()*1000) + random.randint(0, 10))
    data = {
        "i": key,
        "from": "AUTO",
        "to": "AUTO",
        "smartresult": "dict",
        "client": "fanyideskweb",
        "ts": salt[:-1],
        "salt": salt,
        "sign": sign_b(key, salt),
        "bv": md5_b("5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
                    "(KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"),
        "doctype": "json",
        "version": "2.1",
        'keyfrom': 'fanyi.web',
        'action': 'FY_BY_REALTIME',
        # 'typoResult': 'false'
    }

    headers = {
        'Accept': 'application/json, text/javascript, */*; q=0.01',
        'Accept-Encoding': 'gzip, deflate',
        'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
        'Connection': 'keep-alive',
        "Content-Length": "272",
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
        'Cookie': 'OUTFOX_SEARCH_USER_ID=-995880639@10.168.8.64; JSESSIONID=aaa4S2JviOjAFe8LvizRw; '
                  'OUTFOX_SEARCH_USER_ID_NCOO=2146618943.795375; ___rl__test__cookies=1558425516486',
        'Host': 'fanyi.youdao.com',
        '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/74.0.3729.157 Safari/537.36',
        'X-Requested-With': 'XMLHttpRequest'
    }

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

    result = res['translateResult'][0][0]
    result_tgt = result['tgt']
    result_src = result['src']

    print(f"""‘{result_src}’,的翻译是: ‘{result_tgt}’""")

    try:
        #  有时返回数据中会有其他翻译的,如果有的话,就打印出来。
        print('其它翻译:\n'+''.join(res['smartResult']['entries']))
    except KeyError:
        pass


if __name__ == '__main__':
    translate("You are such a smart kid!")
    # translate("你可真是个小机灵鬼!")

关注,star,点赞,谢谢~
点击前往Github(有道、百度、谷歌google 翻译JS逆向破解参数项目地址)
在这里插入图片描述

  • 14
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值