1. 程式人生 > 實用技巧 >猿人學第一題比賽題目保姆級教程

猿人學第一題比賽題目保姆級教程

水一篇,和大佬們的差距不是一丁點的大啊~~~~~

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就是下面轉碼計算出來的了

整體程式碼如下:

執行結果如下:

爬取結果如下: