首頁>技術>

背景

參與過一個爬蟲小應用,爬某招標網站釋出的招標資訊,並根據採購產品關鍵字傳送招標資訊給銷售和高管。

不得不承認,技術就是 money 啊。先從逆向的基礎知識開始入手吧,今天才知道瀏覽器的開發者模式,還有好多我不知道的功能, JavaScript 是如此博大精深!

Sources 面板

以 Chrome 為例,F12 開啟,Sources 面板裡面有三個 JS 逆向常用工具,先看看面板內容:

自定義 JS 片段

標籤 ① 下面的三個點對應的面板中,有一個可以新增 Script 片段的功能:

這比在 Console 頁簽上編寫 JS 方便多了,這個功能,想起以前在 Console 寫程式碼時沒寫完一不小心 Enter 鍵下去就執行報錯了,真的是相見恨晚吶……

程式碼格式化

標籤 ② 的 Pages ,這個很基礎,展示整個網路請求的資原始檔;標籤 ④ 這個符號,我是今天才知道的,可以直接格式化資原始檔,對雜亂無章的 jquery 點選格式化試試:

Filesystem 和 Overrides

這兩個功能對 JS 逆向也很實用,目前還沒有測試它們,暫且知道這個東西,哪天完整玩一遍後再補充這塊內容。

重寫 ajax 的事件

一直死磕的那個招標網站,這次升級採用的就是對 ajax 請求添加了鉤子事件,傳送請求額外添加了反爬的引數。引數的 key 雖然固定,但是值的生成過程相當複雜,目前測試了偽造,但是後臺通不過,會返回 400 Bad Request 。

現學現用,開啟目標網站後,新增一個 New snippet 片段,利用 prototype 重寫 Ajax 的兩個事件,程式碼如下:

(function() {    var openoverride = window.XMLHttpRequest.prototype.open;    window.XMLHttpRequest.prototype.open = function() {        console.log( arguments );        return openoverride.apply(this, [].slice.call(arguments));    };    var sendoverride = window.XMLHttpRequest.prototype.send;    window.XMLHttpRequest.prototype.send = function() {        console.log( arguments );        return sendoverride.apply(this, [].slice.call(arguments));    };})();// 隨便模擬的請求	var xhr = new window.XMLHttpRequest();xhr.open('POST','/hello',true);xhr.send('abc');gotoPage(20); // 頁面自身的函式,要破解的資料請求

點選執行:

控制檯輸出:

這兩個 ajax 請求,都被額外添加了一個 key 固定,值不明規則的引數,這個就是阻礙爬蟲的壁壘:

現在問題是,偽造引數值也無法透過。既然是在前端生成的這兩個引數,後臺是怎麼使用的呢?而且每次 ajax 請求,這兩個引數值都不同。網上有資料說這是防重放的,我模擬時用按這倆引數的長度使用隨機串,也騙不過後臺。

這是一個大坎兒吶!

17
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • linux學習之自定義服務