Hello,大家好,這里是超級勤奮的小澤親~

因為不會用目錄所以直接不用目錄…
那么今天要干什么呢?
標題不都說了嘛,進攻,有道翻譯!
雖然說我們昨天已經試圖進攻過有道翻譯了,而且也貌似實作了效果,但是那只是一種錯覺,其實昨天可以借鑒的主要是思路,總體來說是比較不合格的,鑒于讓大家都能學會的原則呢,今天要再一次向有道翻譯發起進攻!
首先,打開我們的有道翻譯:
神奇的傳送門

在當前頁面呢,按下F12,或者右鍵,然后找到檢查或者開發者工具,這里用谷歌瀏覽器或者360極速瀏覽器都是可以的哈,
然后打開我們的Network界面:

可以看到我們的Network界面里面是有一條資訊的,當然如果你的沒有也不打緊,點擊紅點點旁邊的按鈕,全部清空空一個都不留,

然后不要關掉這個視窗,也不要重繪頁面,直接翻譯一個詞,

好的,蹦出來了很多資訊,不要慌,讓我們一起摸著前進!

這里讓我們點開XHR界面,為什么要點開這里呢?
這樣想,我們翻譯的話,肯定要給服務器發送請求的吧,既然發送了請求,就會收到資料吧,不管是要的資料還是警告我們的資料,都要回傳一個東西吧,所以呢這個東西就可以理解為動態的,就是我們需要跟服務器進行一個“交流”,所以就要在這個XHR里面找我們向服務器發送的請求,如果還是覺得很暈聽不懂,說明你有在認真思考這個問題,說明你是真的…愛學習!
但是呢,有的時候也不要太過分追究到底是為什么,要知道,知道的太多,就會被滅口的!

打開這個XHR后,世界頓時清凈了~
隨便點開一個看看,因為都是一樣的嘛:

看到沒,紅框框的都是我們要注意的,第一個紅框框里面就是我們要的url,這里先記錄一下:我們這次的url是:
url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
要養成一邊摸索一邊記錄的好習慣呦(?▽?)
然后就是我們這次請求呢,是POST請求,還有就是回傳的資料是json資料,
好啦,繼續往下滾:

可以看到有一個Referer,這里呢,我們要把它寫到headers這個字典里,跟著headers一起發送到服務器那邊,以前沒有管,但是以后看到要記得加進去哦,至于怎么加進去,先別急嘛,讓我說完先~
還有Cookie,為了以防萬一,我們也一起帶上!
也就是說我們的headers要改成:
headers = {
'Cookie': 'OUTFOX_SEARCH_USER_ID=2006217193@10.108.160.18; OUTFOX_SEARCH_USER_ID_NCOO=302812442.2493042; JSESSIONID=aaadiUSBQLdhe5_m5Rvzx; ___rl__test__cookies=1607756476599',
'Referer': 'http://fanyi.youdao.com/',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
聽懂掌聲!
hhh,可以看到,這個headers里面不僅有我們以前經常用到的User-Agent,還有Cookie和Referer,當然如果你打上去報錯的話,注意看一下是不是沒有用逗號分隔,
這個headers是可以變得哦,我們起成a也可以的,用headers主要是方便我們對號入座,用的多了也會自然而然的記住這個單詞,麻麻再也不用擔心我過不了四六級啦~

再往下翻,可以看到我們的Data一家,不要猶豫,全部拷走!
data = {
'i': '點贊',
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': '16077564766152',
'sign': '63a299cbcbb39c939542215f811da390',
'lts': '1607756476615',
'bv': '79d103f0086f0e2586344a7cd1b549d7',
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTlME'
}
這里小澤已經給各位小懶豬整理好了一個data字典,然后讓我們開始分析吧!
'i': '點贊' #可以明顯的看出來,這個i指的就是我們要翻譯的單詞,所以不用管它,
#from就是指的我們輸入的詞的語種,語種是語言的意思哦,比如點贊就是中文,也就是zh
'from': 'AUTO'
#to就是指的我們要翻譯的語種,英語應該是en,AUTO是自動的意思哦,
'to': 'AUTO'
#這兩個就是寫死了,不用動的東西,至于為什么呢…
#你多翻譯幾次多看看這些引數的變化就知道了
'smartresult': 'dict'
'client': 'fanyideskweb'
'salt': '16077564766152' #這個就是時間戳乘以1000然后再取整然后再加一個亂數嘛
嗯?
什么是時間戳?

在python里面就是:
a = time.time()
print('time.time()=',a)
print('time.time()X1000=',a*1000)
print('int(time.time()X1000)=',int(a*1000))

嗯?
你問我怎么知道的…其實我是從未來穿越過來的,現在就要帶你體驗一遍我經歷過的事,這樣你就知道我是怎么知道的了~
'sign': '63a299cbcbb39c939542215f811da390' #動態變化且加密的字串,今天搞他,
'lts': '1607756476615' #時間戳嘛,不用多說了
'bv': '79d103f0086f0e2586344a7cd1b549d7'
'doctype': 'json'
'version': '2.1'
'keyfrom': 'fanyi.web'
'action': 'FY_BY_REALTlME'
可以看出來,除了sign是加密的之外,其他的我們都能大致知道是什么,
如果你還是看不出來,說明你只抓了一次包,沒有對比這些引數,懂我意思吧,快去多翻譯幾次抓包對比引數吧~
好的,知道了這些,我們能干什么呢…
先擼一下思路:我們要向已經找到的url發起post請求,然后攜帶了三個引數的請求頭,還有一堆引數的data,就能回傳一串json字串,現在我們的問題就是解決sign,好嘞,思路明確,開沖!


直接在抓包工具中按下CTRL+F,進行一個全域搜索,當然如果你按不出來的話,也可以在這里這里這里找到他:

好吧,我說錯了,是Ctrl+Shift+F,
然后直接全域搜索sign!

還是讓我找到你啦,小老弟,點開這個js檔案:

點進去之后是不是只有一行鴨,沒關系,點擊紅框框里面的{ }按鈕,見證奇跡的時刻到了!

鐺鐺襠,整理好啦~

然后我們就在這個檔案里區域的搜索sign這個引數,如果看到比較像是加密程式的,就給它打一個斷點,為什么呢?
因為打了斷點之后我們在試著翻譯啊,本地向服務器發送的資料就會被截胡,我們就可以看到她到底,是怎么加密的!
第一個很明顯不是加密相關的代碼,繼續往下找:

有15個呢,一個個找吧,這里小澤就把幾個疑似加密代碼的截圖下來:

打斷點就是在8376那里點一下就好啦~
找到一個了,繼續找:

這里是第二個疑似點,打上斷點!
兜兜轉轉一圈就發現倆,都打上了斷點,這個時候我們隨便翻譯一個詞:

成功截胡!
接下來分析資料吧~

我們把滑鼠移到這個e上面,會發現這個e是點贊,也就是我們要翻譯的詞,繼續往下走吧:

可以看到上面的r是我們說的時間戳哈,然后i就是r后面跟了一個0到1之間的亂數乘以10的整數,也就是說是時間戳后面跟了一個亂數!
然后還可以看出來,這個sign是通過md5加密的,至于md5到底是個什么,我們后面再說,
到了這里就可以大致得出結論:
salt是時間戳加一個亂數
lts是時間戳
sign =md5( “fanyideskweb” + 要翻譯的詞 + salt + “Tbh5E8=q6U3EXe+&L[4c@”)
也就是說我們剩下要解決的就是這個md5加密到底要怎么破解,對吧,往下走吧:

移到這個md5上面,點開上面的藍色字體,

會發現,我們找到了md5加密的方式,但是讓你看你肯定是看不懂的嘛,

把這一串資料呢,就是{ } 花括號里的資料,都給復制一下,放到我們的…

這個軟體里!
當然如果你比較懶,可以加我們的交流群,群里面有分享這個軟體哦~

可以看到呢,有88%的妹紙,這個數量代表著什么不用我多說了吧!!!
快點進來撩妹紙把!!!


這里我們要把這個md5后面的:改成=才可以加載代碼哦~

點擊這個加載代碼,然后可以看到函式串列里有個md5,說明我們已經可以在這里用這個md5加密的方法了!

然后我們再直接呼叫這個md5函式,隨便放點東西進行加密,可以看到我們點擊了這個計算運算式后程式給我們報錯了哈,為什么呢?

這就不怪我了…你們沒有物件,跟我可沒有關系,
什么是缺少物件呢,不僅是說各位都找不到物件,還有一層意思就是說有一些引數是呼叫的外面的函式,我們回傳最開始的js檔案里往上找一找,看能不能找到物件!



可以看到,很多啊,那么這種時候我們怎么辦呢?
全部復制!
喂喂喂,不是把全部js都復制啦!

從這里開始復制哦~
然后一直復制到…

md5上面的分號那里,給她粘貼到我們的js除錯工具里面:


當你點擊加載代碼出來這么一堆資料的時候,就說明你粘貼對了,

我們再度呼叫這個md5的函式,可以看到,這次是成功的給我們加密了對吧,要注意md5的括號里是要加字串的哦!
接下來的操作,不要問我為什么,好好看好好學!

先點開檔案,然后匯出,保存成js檔案,然后拖動到我們的py檔案的錄下哈,

這里我起的名字是get_sign哦,很接地氣的名字,
然后就開始我們的,代碼撰寫!


這個execjs模塊呢,就是上圖的用法啦,可以呼叫我們js代碼中的函式,來為我們的python服務,

大功告成!

完整代碼會分享到交流群里,如果哪里還是不懂,在留言里說哦!
最后的最后呢,小澤想問一下大家想不想學習怎么做軟體,就是讓我們的代碼能變成像QQ,網易云這些的有視窗的軟體,想的話在留言里扣我愛你,人多就考慮開一個坑,
最后的最后的最后呢,在交流群里已經開始了“拼課”哈,也就是說如果你有哪個特別想買的課呢,但是又囊中羞色,就可以來一起拼一拼,讓每一個貧窮的孩子都讀得起書!
愛你們,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/234263.html
標籤:python
上一篇:演算法題:只出現一次的數字
下一篇:網頁自動填寫
