網站分析抓包首先我們先看一下document裡面有沒有資料
透過預覽我們發現數據並沒有在document裡面,我們猜測資料可能是透過Ajax加載出來的,點到XHR選項,果然抓到了一個名為GetData的檔案。
這個應該就是我們要的資料檔案了,之後點開,發現是post請求,並且data裡面沒有加密引數。
心中一喜,這沒有加密引數不是很簡單嗎,之後我們預覽一下。
傻眼了,這也不是資料啊!猜測應該是JavaScript加密了,但是這也沒辦法搜尋關鍵字,這怎麼辦呢。沒辦法只能用最笨的方法,找到發起程式這個選項。慢慢的一點一點的排除吧。
中間的send和ajax引起了我的注意,不管了點開看一下吧。來到了一個js檔案,展開打斷點,重新整理
單步除錯。發現了這樣一段js語句,引起了我的注意
其中還有中文註釋,這段js語句挺好懂的,大致的意思就是構建一個url,傳送一個請求,成功傳送就把data傳過去,然後回撥。我們不關心它是怎麼請求又回撥的,我們關心的只是這個data是怎麼解析的。其中這句引起了我的注意
用python的程式碼來解釋就是,呼叫了webInstace庫裡面的shell方法,傳入一個data引數然後再解析一下。滑鼠放在這個方法的上面,會顯示這個方法的庫,點進去
這下徹底看不懂了,看不懂沒關係,我們之間把這個庫扒下來,然後利用execjs這個庫直接解析就行,我們傳入個data引數就好。不懂execjs用法的朋友可以參考一下這個篇文章execjs的使用我用的是pycharm,不會配置node.js環境的朋友可以參考一下這篇文章Pycharm配置node.js
程式碼實現我們把這個庫複製下來隨便命名為一個js檔案,然後再檔案的表頭新增一下這個行程式碼global.navigator={ userAgent: 'node.js', };
之後直接用python模擬請求即可。附上原始碼
import requestsimport execjsdef get_data(YEAR): for i in range(14): data = { 'year': YEAR, 'MethodName': 'BoxOffice_GetYearInfoData' } headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36 Edg/88.0.705.63'} url = 'https://www.endata.com.cn/API/GetData.ashx' response = requests.post(url,headers=headers,data=data) result = response.text print(result) with open("a.js","r",encoding='utf-8') as f: js = f.read() # 編譯js程式碼 resp = execjs.compile(js) # 呼叫方法 response = resp.call('webInstace.shell',result) print(response) YEAR = YEAR + 1def main(): YEAR = 2008 get_data(YEAR)if __name__ == '__main__': main()123456789101112131415161718192021222324252627282930313233
這裡我只是把資料打印出來,後續的解析,朋友們可以自行選擇方法。
附帶上程式碼執行的結果
PS:這只是簡單的一個JavaScript逆向實戰,大佬勿噴哈。