真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

【JS 逆向百例】cnki 學(xué)術(shù)翻譯 AES 加密分析

成都創(chuàng)新互聯(lián)公司專注于企業(yè)成都營銷網(wǎng)站建設(shè)、網(wǎng)站重做改版、班瑪網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、商城開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為班瑪?shù)雀鞔蟪鞘刑峁┚W(wǎng)站開發(fā)制作服務(wù)。

關(guān)注微信公眾號:K哥爬蟲,QQ交流群:,持續(xù)分享爬蟲進(jìn)階、JS/安卓逆向等技術(shù)干貨!

聲明

本文章中所有內(nèi)容僅供學(xué)習(xí)交流,抓包內(nèi)容、敏感網(wǎng)址、數(shù)據(jù)接口均已做脫敏處理,嚴(yán)禁用于商業(yè)用途和非法用途,否則由此產(chǎn)生的一切后果均與作者無關(guān),若有侵權(quán),請聯(lián)系我立即刪除!

逆向目標(biāo)

  • 目標(biāo):cnki 學(xué)術(shù)翻譯 AES 加密
  • 主頁:aHR0cHM6Ly9kaWN0LmNua2kubmV0L2luZGV4
  • 接口:aHR0cHM6Ly9kaWN0LmNua2kubmV0L2Z5enMtZnJvbnQtYXBpL3RyYW5zbGF0ZS9saXRlcmFsdHJhbnNsYXRpb24=
  • 逆向參數(shù):Request Payload:words: "kufhG_UJw_k3Sfr3j0BLAA=="

逆向過程

本期逆向素材來源于K哥爬蟲交流群里某位群友的求助,目標(biāo)是 cnki 學(xué)術(shù)翻譯,粉絲想實現(xiàn)兩個功能:1、突破英文1000個字符的限制;2、逆向加密過程。

來到翻譯首頁,抓包定位到翻譯接口,可以看到 Request Payload 里,待翻譯文本會被加密處理,如下圖所示:

這里如果直接搜索關(guān)鍵字 words,會發(fā)現(xiàn)結(jié)果非常多,不太好找,注意到 Payload 參數(shù)里還有個 translateType,那么就可以直接搜索 translateType,因為這兩個參數(shù)一般都是挨著的,當(dāng)然也可以使用 XHR 斷點的方式來找,只不過麻煩一些,搜索結(jié)果都在 app.9fb42bb0.js 里,注意到最后一個結(jié)果里有 encrypto,加密的意思,基本上就是加密的地方了:

控制臺打印一下 (0, h.encrypto)(this.inputWord),正是加密結(jié)果:

繼續(xù)跟進(jìn)一下 h.encrypto,很明顯的 AES 加密,n = "4ecfd3a45fe",n 就是 key,模式 ECB,填充 Pkcs7,最后做了一些字符串的替換處理,如下圖所示:

知道了加密算法,key 等關(guān)鍵參數(shù),那么直接引用 crypto-js 模塊來實現(xiàn)就 OK 了,JavaScript 代碼如下:

// 引用 crypto-js 加密模塊
var CryptoJS = require('crypto-js')

function s(t) {
    var n = "4ecfd3a45fe"
    var e = {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    }
      , i = CryptoJS.enc.Utf8.parse(n)
      , s = CryptoJS.AES.encrypt(t, i, e)
      , r = s.toString().replace(/\//g, "_");
    return r = r.replace(/\+/g, "-"),
    r
}

console.log(s("測試"))

// kufhG_UJw_k3Sfr3j0BLAA==

使用 Python 翻譯的一個小 demo:

# ==================================
# --*-- coding: utf-8 --*--
# @Time    : 2021-11-05
# @Author  : 微信公眾號:K哥爬蟲
# @FileName: cnki.py
# @Software: PyCharm
# ==================================


import execjs
import requests


token_url = "https://dict.cnki.net/fyzs-front-api/getToken"
translation_api = "https://dict.cnki.net/fyzs-front-api/translate/literaltranslation"
UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36"

session = requests.session()


def get_token():
    headers = {"User-Agent": UA}
    response = session.get(url=token_url, headers=headers).json()
    token = response["data"]
    return token


def get_encrypted_word(word):
    with open('cnki_encrypt.js', 'r', encoding='utf-8') as f:
        cnki_js = f.read()
    encrypted_word = execjs.compile(cnki_js).call('s', word)
    return encrypted_word


def get_translation_result(encrypted_word, token):
    payload = {
        "translateType": None,
        "words": encrypted_word
    }
    headers = {
        "Token": token,
        "User-Agent": UA
    }
    response = session.post(url=translation_api, headers=headers, json=payload).json()
    result = response["data"]["mResult"]
    return result


def main():
    word = input("請輸入待翻譯字符串: ")
    token = get_token()
    encrypted_word = get_encrypted_word(word)
    result = get_translation_result(encrypted_word, token)
    print("翻譯結(jié)果為: ", result)


if __name__ == "__main__":
    main()

粉絲還有一個問題就是字符數(shù)限制問題,看能不能突破,實測英文限制1000字符,中文限制500字符,如下圖所示:

這種限制其實大概率不僅僅是前端的限制,服務(wù)端應(yīng)該也是有限制的,我們可以攜帶超過500字符的中文去請求一下,前面的字符是“測試1”,最后三個字符是“測試2”,此時已超過了500個字符,我們看到翻譯結(jié)果里并沒有出現(xiàn) Test 2,所以想要翻譯很多字符串,只能將其分割成幾份來處理了。



分享名稱:【JS 逆向百例】cnki 學(xué)術(shù)翻譯 AES 加密分析
本文地址:http://weahome.cn/article/dsojscc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部