摘要:前言啃了這么長時間,基本上已經把某數的套路摸了個八九不離十,不愧是中國反爬界的集大成者,感覺收獲滿滿,這里就簡單記錄一下分析成果。注意某數在不同的網站上有不同的版本,其流程也略有不同,這里的流程不一定適用于其它網站。
前言
啃了這么長時間,基本上已經把某數的套路摸了個八九不離十,不愧是中國反爬界的集大成者,感覺收獲滿滿,這里就簡單記錄一下分析成果。
注意:某數在不同的網站上有不同的版本,其流程也略有不同,這里的流程不一定適用于其它網站。
QQ群 - Javascript高級爬蟲 - 作者自建群,歡迎加入!
中國商標網加密接口 - 僅作演示
之前的文章1 - 記錄了之前嘗試的其它方法
之前的文章2 - 對加密混淆后的js的一些初步分析
awesome-java-crawler - 我收集的爬蟲相關工具和資料
java-curl - 我編寫的java HTTP庫
另一個用了某數加密的網站的破解SDK
前端流程請求頁面,返回應答;如果有之前生成的有效FSSBBIl1UgzbN7N80T cookie值,請求時須帶上。
應答的html中,包含以下關鍵數據:
元素的content,這是加密后的數據,里面包含字符串映射表、全局方法映射表、加解密算法密鑰等;注意有些網站的meta.id不同
的元素,其中有一個是外部js鏈接,另一個則包含引導JS代碼段,后面稱為bootstrap.js。這段代碼是動態生成的,每次請求均不相同。
如果應答中包含FSSBBIl1UgzbN7N80T的cookie,保存起來,后面更新此cookie時會用到
前面的外部js鏈接,其實內容是靜態的,可以預先拿到并保存起來,里面的關鍵代碼是:
$_ts.FxJzG50F = "......";
這個FxJzG50F的值就是加密后的核心JS代碼段,后面稱為main.js。
這里比較奇妙的是:雖然加密后的內容是固定的,但是解密出來的JS里面的變量名、方法名、方法順序卻是隨機的!
執行bootstrap.js,包含以下關鍵步驟:
把常用值、常用方法賦值給全局變量,以迷惑黑客,比如_$wy = window; _$wG = undefined; _$a1 = String.prototype.charAt
獲取頁面中的meta的content,分若干步驟解密之,這會在window中添加一堆全局變量和全局方法,包括所有的常量字符串映射
獲取window.$_ts.FxJzG50F的值,結合meta中的數據,生成核心JS代碼即main.js
執行main.js,這里的步驟就太多了,羅列一些關鍵的吧:
繼續從meta中解密一部分關鍵數據
在以下事件上掛鉤子,以記錄用戶行為:
鼠標事件,觸屏事件,鍵盤事件,輸入事件,滾屏事件,加速器事件,屏幕方向改變事件,電池充電事件,窗口隱藏/顯示事件
另外,按鍵、點擊、滾屏等事件的鉤子函數同時也會更新FSSBBIl1UgzbN7N80T的cookie值
在以下網絡請求相關對象或方法上掛鉤子,令其在發起請求時后面自動添加MmEwMD參數:
ActiveXObject, XMLHttpRequest, Request, fetch, HTMLFormElement.submit
關鍵方法檢測,測試eval等幾個方法是否被替換成非native版本
添加一個頻繁執行的定時器,其作用是檢測debugger語句是否生效,如果生效說明有黑客在調試
檢查selenium, webdriver, PhantomJS, HeadlessChrome等自動化框架的特征
檢查瀏覽器類型,收集瀏覽器特征,收集渲染器特征
執行WebGL 3D渲染測試,執行Canvas 2D渲染測試,目前看其測試結果并未實際使用,但不排除其它網站會使用此數據標識瀏覽器指紋
添加一個50秒的定時器,其作用為更新FSSBBIl1UgzbN7N80T的cookie值
對FSSBBIl1UgzbN7N80T cookie值進行首次更新
FSSBBIl1UgzbN7N80T cookie值的內容這是整個某數加密的核心了,每次請求,無論GET, POST,是否XHR,都會帶著這個cookie
此cookie的值是很多數據加密后的內容,這里就不詳細說了,至少是包含前面收集到的瀏覽器特征和用戶行為數據的,簡單的偽造User-Agent肯定是繞不過去的
更新前會驗證和重用之前的FSSBBIl1UgzbN7N80T值
根據其內容可知,某數的后端是可以知道請求來源于何種瀏覽器,用戶點擊鏈接前有何行為等,這樣他們可以做到:
驗證是否大量請求來源于相同特征的瀏覽器
有選擇的禁用某些瀏覽器
給用戶行為存疑的來源下毒
MmEwMD參數的內容這個參數只會在XHR, 表單提交等場合用到,感覺和FSSBBIl1UgzbN7N80T的作用有重復,不確定某數的后端是否真的會嚴格驗證其內容
其內容的主體部分和FSSBBIl1UgzbN7N80T一致,另外會在前面連接上URL的摘要值
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/102138.html
摘要:前言啃了這么長時間,基本上已經把某數的套路摸了個八九不離十,不愧是中國反爬界的集大成者,感覺收獲滿滿,這里就簡單記錄一下分析成果。注意某數在不同的網站上有不同的版本,其流程也略有不同,這里的流程不一定適用于其它網站。 showImg(https://segmentfault.com/img/remote/1460000018765904); 前言 啃了這么長時間,基本上已經把某數的套路...
摘要:上次提到過,模板引擎一般是要做三件事情變量值的輸出條件判斷和循環引入或繼承其他文件現在就來看看的模板引擎是如何來處理這三件事情的。引擎接下來就是本文的重點是如何編譯的。如果有興趣的話,也可以實現一個自己的模板解析引擎。 上次提到過,模板引擎一般是要做三件事情: 變量值的輸出(echo) 條件判斷和循環(if ... else、for、foreach、while) 引入或繼承其他文件 ...
摘要:模塊化原理簡析的核心原理一切皆模塊在中,,靜態資源文件等都可以視作模塊便于管理,利于重復利用按需加載進行代碼分割,實現按需加載。模塊化原理以為例,分析構建的模塊化方式。 webpack模塊化原理簡析 1.webpack的核心原理 一切皆模塊:在webpack中,css,html.js,靜態資源文件等都可以視作模塊;便于管理,利于重復利用; 按需加載:進行代碼分割,實現按需加載。 2...
摘要:碰撞檢測邊界檢測在前端游戲,以及涉及拖拽交互的場景應用十分廣泛。這就涉及到碰撞檢測或者叫邊界檢測的問題了。若四邊均未發生重合,則未發生碰撞,反之則發生碰撞。目前業務有遇到碰撞需求,所以抽時間整理了下。 碰撞檢測(邊界檢測)在前端游戲,以及涉及拖拽交互的場景應用十分廣泛。 那么啥叫碰撞?JavaScript 又是如何檢測 DOM 發生碰撞的呢? 碰撞,顧名思義,就是兩個物體碰撞在了一起,...
閱讀 922·2021-10-18 13:32
閱讀 3521·2021-09-30 09:47
閱讀 2161·2021-09-23 11:21
閱讀 1884·2021-09-09 09:34
閱讀 3485·2019-08-30 15:43
閱讀 1529·2019-08-30 11:07
閱讀 1068·2019-08-29 16:14
閱讀 731·2019-08-29 11:06