水一篇,和大佬們的差距不是一丁點的大啊~~~~~
URL:http://match.yuanrenxue.com/match/1
就是計算所有費用的平均值。
F12,debugger出現
右鍵點擊,選擇箭頭這個
接下來刷新,就可以跳過debugger了查看網絡面板
明顯的XHR請求
看一下請求參數
直接打上XHR斷點,查看堆棧進行調試,不熟的話,推薦這個:https://www.cnblogs.com/ajaxlu/p/11855343.html
還有各偷懶的地方
直接點這個跳轉,進去看到一長串,這行沒法格式化,直接找在線js解析,或者創建html,把該刪除的一刪除
下方點擊美化,然后看着點刪除
然后就剩這么點了
下方點擊美化,這下就看着很清爽了
建議下載個webstorm,隨便搞個激活碼,這里推薦:微信公眾號 -- 前端碼農仔,回復:獲取webstorm激活碼
webstorm新建js文件,把美化過的js代碼放進去,Ctrl+Alt+L再次格式化代碼,剩下的該手動的手動調下
差不多這樣,然后最后一行加:
console.log(oo0O0())
缺啥補啥就行,下面的錯誤截圖稍微記錄下
干掉這行,順帶e,f,g,h,w()都干掉,就剩個dd(),一看就是調用嘛,那就是沒扣的,接着去扣代碼
還是剛才那個界面,Ctrl+F,輸入dd(),然后把上面那個dd()函數扣下來
不太好復制,有點惱火啊
接着跑,又出錯
這里加個window = {};
再跑,又錯
加window.a,還是一樣,在剛才的查看源碼界面搜索 :window.a
你沒看錯就是這一長串,好好粘貼,不要偷懶搞錯了,我就是這里馬馬虎虎的粘貼的,后面一直找錯誤
接着跑,又錯
差不多就是這樣吧,接着控制台輸出下這個f和h
包括前面的e和g也都輸出下
拼接起來你就看的出來這是js的方法
window.b += String.fromCharCode(window.a[i].charCodeAt() - i - window.c)
改寫完就是這樣,接着跑,又報錯
atob這個函數可以去搜一下,js中base64轉碼的函數,在控制台輸出下
window['b']其實就是一長段base64的代碼,J('0x0', ']dQW')和J('0x1', 'GTu!')可以在webstorm中輸出看一下
還有'\x27' + mw + '\x27'
就是把'mw'替換成了oo0O0(mwqqppz)
注意看下面,oo0O0(mwqqppz)也就是返回了一個空
那么也就是m = window.f
那這個window.f是哪里的值呢?
還記得剛才的window.b的轉碼嗎,將控制台輸出的那段base64的代碼放在js在線解析的在線工具中美化查看下
最后一行,我們看到了window.f的操作,熟悉的mwqqppz,也就是說將oo0O0(timestamp.toString())傳入hex_md5()中就出來了
將轉碼的這段代碼復制下來,創建js文件
將window.f = hex_md5(mwqqppz)
修改為:
var timestamp=Date.parse(new Date()); f = hex_md5(timestamp.toString()) + "|" + timestamp/1000;; console.log(f)
就是和之前辛辛苦苦扣下來的代碼沒有關系了,然后運行,提一嘴,安裝個node.js環境
這樣就出來了,用python代碼去執行這個js文件,再拿着結果去請求這個網站就可以了
第二種的話,你可以選擇去修改之前扣下來的代碼
細看之后發現這兩行沒啥用,那就干掉
關於這里,簡單來說這個atob不行,那就換個方式去解碼base64
m = eval((new Buffer.from(window['b'], 'base64').toString('utf8')).replace('mwqqppz', "'" + mw + "'")) return m + '丨'+timestamp / 1000
可以搜一下from和atob方法的解釋哈
現在呢后面的時間戳已經出來了,然后我們把oo0O0()和dd()合並在一起
m呢就是mw,也就是mwqqppz,所以在dd()函數中定義下,list這個變量可以干掉,至於m我們已經重新在dd()中已經定義了
所以mw呢就是timestamp.toString(),window.f就是下面轉碼計算出來的了
整體代碼如下:
運行結果如下:
爬取結果如下: