JS逆向系列之谷歌翻譯

2022-09-09 22:24:22 字數 3054 閱讀 4212

分析過程

首先找到谷歌翻譯的ajax請求介面

以get方式傳送的ajax請求,多次嘗試,發現請求引數中,tkq,是不斷變化的,其中q是待翻譯的內容,tk是根據q進行js加密演算法生成的,所以我們要分析tk的產生。

加密演算法應該在translate_m_zh-cn.js檔案裡

打個斷點,請求翻譯介面的url時停止,發現在send(a)中停止了,根據call stack的呼叫關係,一步步分析,最上面的就是send函式

依次往下點選每乙個呼叫的函式,當到了qe函式的時候,發現了tk引數來自b,b又明顯來自c

於是我們順藤摸瓜,發現c是由pe(d)產生的,pe又是來自pu(a)函式,我們跳轉到pu函式的位置,似乎已經有了答案

如下是我們剛獲取的js**

var mu = function(a) 

} , nu = function(a, b)

return a

} , ou = null

, pu = function(a)

var d = mu(string.fromcharcode(116));

c = mu(string.fromcharcode(107));

d = [d(), d()];

d[1] = c();

c = "&" + d.join("") + "=";

d = b.split(".");

b = number(d[0]) || 0;

for (var e = , f = 0, g = 0; g < a.length; g++)

a = b;

for (f = 0; f < e.length; f++)

a += e[f],

a = nu(a, "+-a^+6");

a = nu(a, "+-3^+b+-f");

a ^= number(d[1]) || 0;

0 > a && (a = (a & 2147483647) + 2147483648);

a %= 1e6;

return c + (a.tostring() + "." + (a ^ b))

};

發現做了很多不必要的操作、甚至多此一舉,目的是用於混淆

如:

var mu = function(a) 

}

還用了.fromcharcode()函式,把數字轉換為字母,明顯多此一舉的操作。但是,通過分析,發現tk生成需要另一樣東西,就是tkk這個引數,**於網頁源**上,尋找一番,還是發現了,多次嘗試,發現這個值是固定的

具體實現

說明:js檔案做了精煉,把不必要的值去掉了,實行的效果是英譯中,不同語言的翻譯修改請求的引數即可

import requests

import json

import execjs

def get_tk(q):

with open('google_tk.js', 'r', encoding='utf-8') as f:

js = f.read()

j = execjs.compile(js)

tk = j.call('pu', q)

return tk

def translate_google():

q = input("請輸入你要翻譯的內容:")

headers =

q) + "&q=" + q

res = requests.get(url, headers=headers)

data = res.content.decode()

json_data = json.loads(data)

print(json_data[0][0][0])

if __name__ == "__main__":

translate_google()

//tkk = '441865.2154418832';

var nu = function (a, b)

return a

},pu = function (a)

a = b;

for (f = 0; f < e.length; f++)

a += e[f],

a = nu(a, "+-a^+6");

a = nu(a, "+-3^+b+-f");

a ^= number(d[1]) || 0;

0 > a && (a = (a & 2147483647) + 2147483648);

a %= 1e6;

return (a.tostring() + "." + (a ^ b))

};

執行效果

雜湊(hash)函式演算法

hash也稱雜湊、雜湊,對應的英文都是hash。基本原理就是把任意長度的輸入,通過hash演算法變成固定長度的輸出。這個對映的規則就是對應的hash演算法,而原始資料對映後的二進位制串就是雜湊值。活動開發中經常使用的md5和sha都是歷史悠久的hash演算法。

echo md5("這是乙個測試文案");// 輸出結果:2124968af757ed51e71e6abeac04f98d
一、不可逆,與原視資料沒有對應關係

二、輸入資料的微小變化會得到完全不同的hash值,相同的資料會得到相同的值

三、hash演算法衝突概率比較小,但是根據抽屜原理,一定會存在不同的輸入被對映成相同輸出的情況

對稱加密演算法

秘鑰:加密解密使用同乙個金鑰、資料的機密性雙向保證、加密效率高、適合加密於大資料大檔案、加密強度不高(相對於非對稱加密)

非對稱性加密演算法

秘鑰:加密解密使用的不同秘鑰、有兩個金鑰、需要使用金鑰生成演算法生成兩個秘鑰、資料的機密性只能單向加密、如果想解決這個問題、雙向都需要各自有一對秘鑰、加密效率低、加密強度高

js逆向分析 有道翻譯

js加密一直是困擾資料抓取的難題,但總有辦法,總結下經驗一起學習 請求是通過非同步往伺服器傳送資料 主要有以下引數,一群看不懂的東西不用說肯定是加密資訊 ts 是系統時間戳 salt 時間戳 數字 bv user agent的md5加密 sign 一串字元加密 通過分析了解加密方式 就可以用 構造自...

js逆向解析之百度翻譯案例

js逆向解析即通過呼叫對方的js加密函式來獲取正確的加密資料 js逆向解析需要安裝js開發環境node.js和execjs模組 有兩個檔案,乙個py檔案存放主程式,和乙個js檔案存放從瀏覽器中找到的生成js加密資料的js 兩個檔案需在同乙個資料夾中。py py檔案 import requests 需...

2020 11 02 JS逆向入門之有道翻譯

二 引數破解 2.引數破解測試 三 salt 13位時間戳 乙個隨機數 sign 加密引數 lts 13位時間戳 bv 瀏覽器版本的加密引數 salt 13位時間戳 乙個隨機數 sign md5 fanyideskweb 翻譯引數 salt bjuetdhu zqsxf b 7m lts 13位時間...