首頁>技術>

我們都知道現在是大資料時代,用爬蟲來獲取資料的越來越多,與之對應的就是破解反爬的難度也越來越大

比如現在的網站一般都有各種各樣的 JS 加密,app有引數加密或者返回的資料給你加密,甚至加殼! 所以如果不懂 JS 逆向和 app 逆向,這樣爬蟲很難生存

有幸看到群裡有朋友推薦一個 JS 逆向入門的網站,沒有經驗的朋友可以用來入門練手

有經驗的朋友可以用來加深自己的實戰經驗

網站分析

網站地址:http://www.landchina.com/default.aspx?tabid=226

我們的主要目標是需要獲取下面的資訊

第一步當然是抓包分析返回的資料,如果你不知道網站是否有 JS 加密

最好的辦法是直接用 requests 請求,然後檢視響應內容與網站原始碼是否相同

響應

上面是用程式碼請求返回的響應

顯而易見 html 中嵌入了 JS,而且很可能做了跳轉,因為有個 location 的變數

JS破解

下面是通過 Chrome 瀏覽器抓包的過程,共請求了三次才獲取到最終的資料

其中重定向的連結是在第一次請求返回的響應裡面,用 JS 生成的

location

SO, 我們將返回的 JS 扣出來,下面是我提取出來的 JS

 1function stringToHex(str) { 2 var val = ""; 3 for (var i = 0; i < str.length; i++) { 4 if (val == "") val = str.charCodeAt(i).toString(16); else val += str.charCodeAt(i).toString(16); 5 } 6 return val; 7} 8 9function YunSuoAutoJump() {10 var width = screen.width;11 var height = screen.height;12 var screendate = width + "," + height;13 var curlocation = window.location.href;14 if (-1 == curlocation.indexOf("security_verify_")) {15 document.cookie = "srcurl=" + stringToHex(window.location.href) + ";path=/;";16 }17 self.location = "/default.aspx?tabid=226&security_verify_data=" + stringToHex(screendate);18}

提取出來之後,我們可以先看下 JS 裡面的內容,然後本地進行除錯,當然前提是你電腦上安裝了 node.js 可以看到 self.location 就是我們所需要的重定向連結

其中 curlocation 這個引數並沒有用到,我們可以將相應的程式碼註釋

還有個 screen 的屬性,查詢下資料可知是獲取使用者螢幕資訊,我們直接改掉即可!

然後將 location 值返回,下面是改正後我們所需要的 JS

改正後的JS

執行這段 JS,直接生成我們所需的引數!

驗證

我們也用程式碼模擬三次請求

其中第一次和第二次都會生成驗證的 cookie

程式碼如下:

1def spider(): 2 response = session.get(url) 3 4 text = response.text 5 6 ctx = execjs.compile(correct_js) # 改正後的js 7 location = ctx.call("YunSuoAutoJump") 8 9 second_url = "http://www.landchina.com" + location1011 _ = session.get(second_url)1213 res = session.get(url)1415 selector = Selector(text=res)1617 result = selector.css("#TAB_contentTable tr")[1:]18 td_list = result.css("td")

其中 correct_js 就是上述改正後的 JS。最後我們看下能否提取出資料,結果一目了然!

驗證結果

總結

到這裡 JS 加密的破解就結束了,可以看到在流程當中比較重要的地方就是:

1.找資料,知道該網站會對哪些資料和請求頭進行驗證

2.找規律,尋找這些資料的加密規則

3.除錯 JS,使用瀏覽器或者在本地進行除錯

4.模擬資料,將這些資料通過程式碼模擬生成,然後加入到資料當中

  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 好程式設計師Java教程分享JavaScript常見面試題二