首頁>技術>

網站分析抓包首先我們先看一下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逆向實戰,大佬勿噴哈。

5
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 程式設計師威客之路——在網站建設時如何做好伺服器維護