網易滑塊協議分析(二)

這篇文章主要分析網易的滑塊軌跡算法。也就是data是怎麼生成的
在這裏插入圖片描述

我們全局搜索data,出現的地方很太多。我這裏是直接搜m:""
在這裏插入圖片描述
其中只涉及到3個js文件.這裏我們優先選擇帶版本號的js文件,可以看到這個版本號跟驗證滑塊接口中的版本號是一致的。
在這裏插入圖片描述
點進去直接繼續搜索
在這裏插入圖片描述
整個js中就只有這一處。我們直接斷點打在data身上。其中的d是滑塊軌跡,p和ext分別是兩個加密參數。
這裏先分析d的值。
p函數加密n.join(":")的值就是滑塊軌跡。 n應該是一個數組。n的生成位置在這裏
在這裏插入圖片描述
其中this.traceData就是我們鼠標滑動的所產生的軌跡信息,其中的值是被加密了的。 u的值是50.
在這裏插入圖片描述
經過a.sample函數處理完,只剩下50個軌跡信息。
在這裏插入圖片描述
接下來分析this.traceData中的這些加密信息的含義。
搜索this.traceData我們可以看到大概就是這個位置。
在這裏插入圖片描述
可以看到跟滑塊的x和y的座標還有時間有關。最終用f函數做了一下加密處理。
我們這裏不方便直接斷點。因爲,在此處斷點,每動一下鼠標都要debug。我們要觀察其中的值的變化規律的話,比較適合用console.log輸出再控制檯觀看。
這裏繼續使用抓包工具替換js的形式,來方便我們打印輸出。
在這裏插入圖片描述
控制檯輸出的值
在這裏插入圖片描述
可以很清除的看到我們滑動的軌跡信息。
第一個是橫座標的拖動距離,第二個是縱座標上下浮動的距離,第三個是當前滑動的時間-開始滑動的時間。
下面講一下軌跡生成的思路。這裏我們只需要生成50個軌跡信息就行。

  1. 獲取滑塊缺口位置。
  2. 由於網易只取50個滑塊軌跡特徵,所以我們把缺口位置/50 得出每步滑動多少距離。然後真正取值的時候取個隨機值。 實際距離=random(上一次的計劃距離,本次的計劃距離)。 比如說現在缺口位置是 100,100/50=2,那每份滑塊的增量就是2。第一次的軌跡可以設置一個固定值,比如說0。那第二次軌跡的橫座標就可以設置成random(2,4),第三次的軌跡就是random(4,6),依此類推,即可得到整個滑塊軌跡的橫座標
  3. 縱座標的值浮動不要太大,可以給定一個較小的隨機區間。例如1-3
  4. 給一個滑動計劃所需的總耗時,再除以50,得出每份軌跡所花時間,可以適當隨機加減一些值。可以參考橫座標的生成方式。實際耗時=random(上一次的計劃耗時,本次的計劃耗時)。比如說,我計劃耗時是time = random(3000,4000),這裏假設剛好time=3000,那麼計劃每次所需時間就是3000/50=60毫秒,第一次軌跡的所需時間建議給個較小固定值,10毫秒以內。第二次的實際時間是random(60,120),第三次的實際時間是random(120,180),依此類推。

這裏我們得到整個軌跡以後,把每步的軌跡用f函數進行加密。f函數的抽取過程可參考上一篇文章:網易滑塊協議分析(一) 後面還有一些加密均可使用上述方式進行抽取,最後執行使用node或者js2py等工具即可。
最後貼一下最後結果。
在這裏插入圖片描述
注意點:

  1. 完成一個參數的加密還原,儘量使用控制變量法,去測試一下。不然會把你搞的懷疑人生。
  2. 圖片識別的原始像素是 320x160,識別出來的缺口位置也是基於這個像素的。但是在網頁上有縮放,整個寬是220px. 所以識別出來的缺口位置需要等比例縮小。
  3. 如果使用截圖工具量缺口位置的話,請保持電腦的縮放比例爲100%,不然量的不準確。

滑塊缺口識別原理:https://mp.weixin.qq.com/s/xCnSupqdjzmnIM0GklEk_w
滑塊缺口識別代碼:https://github.com/crazyxw/SlideCrack

聲明: 此分析過程僅供學習使用,切勿用於非法用途。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章