js逆向破解百度翻譯

破解百度翻譯

1. 首先要分析瀏覽器是怎麼發送請求的。

圖片

2. 構造請求

找到關鍵請求以後,就要分析請求,而後去構造請求。分析請求有一下幾個要素,url,請求方法,請求頭,請求參數。html

圖片

請求參數有七個,能夠經過反覆請求而後比較的方法得出from,to是表示翻譯語言的,transtype,simple_means_flags這兩個的值沒有變。最關鍵的是query,sign,token參數,其中query是要查詢的單詞字符串。signtoken須要分析。python

3. 關鍵參數token的分析

請求的參數有三個來源ajax

  1. 第一個請求返回的頁面html源碼中瀏覽器

  2. 前面的某次請求返回的數據cookie

  3. 請求以前由js動態生成ide

打開百度翻譯頁面源碼,複製上面請求中token的值而後搜索,果真在頁面源碼中發現了token的值。函數

圖片

4. 關鍵參數sign的分析

通過分析,發現sign的值隨着單詞的不一樣而不一樣,而且由於當前請求是ajax的,因此sign必定是js動態生成的。工具

js逆向的三種方法測試

  1. 經過頁面元素觸發函數進行定位請求執行js代碼url

  2. 經過開發者調試工具network選項中的initiator欄進行定位

  3. 經過搜索參數名進行定位

我把sign搜它出來image.png發現sign函數image.png去這是js看下

圖片

打斷點,回車,運行下js

圖片

最後一步一步來調試

圖片

很快找到了來源

圖片

發現處理的方法就是e,n兩個函數,經過PyExecJS模塊進行js測試。由於這js函數看不懂,不建議改寫成python函數,將這兩段函數代碼複製到文本中,保存爲baidu.js文件

5. PyExecJS模塊

PyExecJS是一個實現經過python執行js代碼的庫。

安裝:

$ pip install PyExecJS

PyExecJS入門

圖片

直接運行e,n兩個函數

圖片

分析js代碼,發現其中有個window的變量,原來window沒定義

圖片

不知道它是啥,打斷點,看下啥東西

圖片

window[gbk] ,window不就是一個變量來的,去看下local變量

圖片

local沒有,看global

圖片

在window中尋找gbk

圖片

在js先用"320305.131321201" 代替window[l],運行

圖片

這就是我找了很久的的sign

5. 分析window[l]

是否是每一個單詞的sign都是同樣的呢?

嘗試到html頁面中去查找,發現是一個在html頁面中定義的變量。

圖片

這是個固定值,能夠直接寫成常量,也能夠取頁面獲取。

6. 代碼編寫

思路

  • 利用正則將頁面的token拿下來

  • window[gbk]是固定的,封裝函數來獲得sign

  • 這裏有個神坑:發現頁面請求了兩次,第一次的頁面token不是合法token

  • 用seesion來訪問保存cookie這樣成功率高點


image.png聲明:本文只作技術交流,不提供源碼,若有侵權,請告知刪除,謝謝。

image.png

一直原創,從未轉載

請認準我,將我置標

圖片


轉發,好看支持一下,感謝

相關文章
相關標籤/搜索