JS加密分析

分析流程


有道翻譯:http://fanyi.youdao.com/javascript

肯定網頁加載方式

- 翻譯內容爲動態加載【咱們在輸入內容翻譯時url不變】

- F12打開開發者工具,點擊XHR

找到真實的url地址

- 根據響應內容肯定真實的url地址
- 查看請求參數是否有加密字符串

請求接口和請求參數中攜帶的signjava

複製代碼
# General
Request URL: http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule
Request Method: POST
Status Code: 200 OK
Remote Address: 103.72.47.249:80
Referrer Policy: no-referrer-when-downgrade


# Form Data
i: hello
from: AUTO
to: AUTO
smartresult: dict
client: fanyideskweb
salt: 15638736993851     # 動態參數
sign: e9e209901e904afd37a85aba71245937   # 加密字符串,簽名  動態參數
ts: 1563873699385    # 動態參數
bv: 53539dde41bde18f4a71bb075fcf2e66   # 動態參數
doctype: json
version: 2.1
keyfrom: fanyi.web
action: FY_BY_REALTlME

# 別問我,我怎麼知道哪些參數是動態參數,每次請求這些參數都是會變得。。。。 # 通常這種在請求參數中帶有簽名的網站,咱們須要找到它加密簽名的加密方式,根據加密規則用python代碼模擬生成sign,每次請求帶上它便可; # 若是參數中沒有動態生成的簽名,那麼咱們在請求瀏覽器時是拿不到響應數據的;
複製代碼

尋找sign的加密方式

 複製sign全網頁搜索這個變量


格式化後的HTML代碼python

找到sign

 分析加密得請求參數是怎麼生成得

 

- sign也是經過md5進行加密得
- 加密得值爲("fanyideskweb" + e + i + "n%A-rKaT5fb[Gy?;N5@Tj")
- e是咱們翻譯得內容,i是當前時間戳+0-9的一個隨機數
- 咱們只需把e和i添加進去生成md5便可,他的先後兩邊的值是寫死的,

瀏覽器版本號

# -*- coding: utf-8 -*-
# @Time    : 2019/7/23 19:14
import requests
import hashlib
import random
import time


url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
search = input("請輸入您要翻譯的內容>>>:")

# 瀏覽器的版本加密
bv = hashlib.md5("5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36".encode("utf-8")).hexdigest()  # 53539dde41bde18f4a71bb075fcf2e66
print("bv",bv)

# 當前時間戳
ts = str(int(time.time()*1000))   # 1563881548992  1563881645504
print("ts",ts)

# 當前時間+0-9隨機時間  注意是字符串相加
salt = ts + str(random.randint(0,9))   # 15638815489920
print("salt",salt)

# fanyideskweb + 要翻譯的內容 + salt + n%A-rKaT5fb[Gy?;N5@Tj
sign = hashlib.md5(("fanyideskweb" + search + salt + "n%A-rKaT5fb[Gy?;N5@Tj").encode("utf-8")).hexdigest()    # 7a3f1f22b5f1a7f29a0a6f16ec668c57
print("sign",sign)

headers = {
    'Accept':'application/json, text/javascript, */*; q=0.01',
    'Accept-Encoding':'gzip, deflate',
    'Accept-Language':'zh-CN,zh;q=0.9',
    'Connection':'keep-alive',
    'Content-Length':'260',
    'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
    'Cookie':'OUTFOX_SEARCH_USER_ID=-457558277@10.108.160.18; JSESSIONID=aaaOxgG-XSZxs54rYhEWw; OUTFOX_SEARCH_USER_ID_NCOO=1830264100.2982109; ___rl__test__cookies=1563881941982',
    '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/75.0.3770.142 Safari/537.36',
    'X-Requested-With':'XMLHttpRequest',
}

data = {
    'i': search,
    '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_CLICKBUTTION',
}

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

python代碼
python代碼
相關文章
相關標籤/搜索