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