猿人學第一題比賽題目保姆級教程
水一篇,和大佬們的差距不是一丁點的大啊~~~~~
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就是下面轉碼計算出來的了
整體程式碼如下:
執行結果如下:
爬取結果如下: