某数加密的流程与原理简析
生活随笔
收集整理的這篇文章主要介紹了
某数加密的流程与原理简析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
啃了這么長時間,基本上已經把某數的套路摸了個八九不離十,不愧是中國反爬界的集大成者,感覺收獲滿滿,這里就簡單記錄一下分析成果。
注意:某數在不同的網站上有不同的版本,其流程也略有不同,這里的流程不一定適用于其它網站。
工具和資料
- 之前的文章1?- 記錄了之前嘗試的其它方法
- 之前的文章2?- 對加密混淆后的js的一些初步分析
- awesome-java-crawler?- 我收集的爬蟲相關工具和資料
- java-curl?- 我編寫的java HTTP庫
- 另一個用了某數加密的網站的破解SDK
前端流程
應答的html中,包含以下關鍵數據:
- <meta id="9DhefwqGPrzGxEp9hPaoag">元素的content,這是加密后的數據,里面包含字符串映射表、全局方法映射表、加解密算法密鑰等;注意有些網站的meta.id不同
- <script r="m">的元素,其中有一個是外部js鏈接,另一個則包含引導JS代碼段,后面稱為bootstrap.js。這段代碼是動態生成的,每次請求均不相同。
前面的外部js鏈接,其實內容是靜態的,可以預先拿到并保存起來,里面的關鍵代碼是:
$_ts.FxJzG50F = '......';
- 這個FxJzG50F的值就是加密后的核心JS代碼段,后面稱為main.js。
- 這里比較奇妙的是:雖然加密后的內容是固定的,但是解密出來的JS里面的變量名、方法名、方法順序卻是隨機的!
執行bootstrap.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的摘要值
總結
以上是生活随笔為你收集整理的某数加密的流程与原理简析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 瑞数(裁判文书)js的加密分析
- 下一篇: 某网站高度加密混淆的javascript