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


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

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

整體代碼如下:

 

 

運行結果如下:

 

 

爬取結果如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM