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