JS逆向:網易某版本滑塊驗證分析(上)——生成瀏覽器指紋

前言

滑塊驗證碼是比較常用的驗證碼之一,不過目前越來越多的網站將驗證碼改為點選漢字了,點選漢字確實要比滑塊難的多。滑塊用selenium過可以說是基本沒什么技術含量,要解決的也只有對driver的檢測問題。如果想用代碼過,那確實是有點意思。最難的地方,當屬偽造軌跡。本篇針對W易Y盾某版本滑塊驗證,分析指紋及軌跡的檢測。

Go

原網址:aHR0cHM6Ly9saXZlLnYud28uY24vcGxhdGZvcm0veXRweHovdHRkcmF3Lmh0bWw=(b64)

點擊獲取驗證碼,會出現滑塊驗證,通過抓包找到這一個請求,滑塊驗證碼的圖片鏈接都在這里面了:
參數還是挺多的,首先要搞定這些。

這次換一種找入口的方式:在network列表中點擊initiator直接定位到對應代碼處:
下好斷點并刷新驗證碼,成功的斷下來了。
逐個擊破,首先這個id,經過多次刷新,發現這個id是寫死不變的,那就不用管它了。
然后fp,很明顯就是瀏覽器指紋了,為啥?FingerPrint啊。根據調用棧一層一層往上找可疑的地方。
跟到這里的時候,我們發現了這個FP的全稱。。。果然是FingerPrint。看一下a是從這里來的(state commit dispatch 三兄弟。。Vue.js石錘了):

再往上找,也沒有找到太像的地方。搜一下fingerprint,一共有6處,觀察一番后鎖定這里:
fingerprint的值是i賦給它的,i又是什么?向上看發現i就是window.g什么東西的。
他把這個指紋掛在window對象上了,那就好辦了,HOOK大法安排!直接上油猴腳本了
然后清掉cookie,刷新頁面。
搞定。

調試觀察一下指紋里都取了什么。
在這里取完h后,進行了拼接。
最后面加了:和時間戳,即使沒有找到代碼也能一眼看出來。往上找h的來源:
發現h是Oe,Oe是由數組k轉換的字符串,K又來源于對Y的元素進行了一些操作。。。一層一層套娃,往上翻,最后找到這里:
S就是原本的指紋了,打印看看他檢測了什么:

我們發現在這里,W函數開始的地方,做了一些操作,看樣子就是在定義指紋的內容。
v:v1.1,版本號唄,寫死固定。然后h:live.v.wo.cn,域名。u:先取了時間戳p,再對p加了de,瀏覽器中可以查看到de是個常量900000。這里的u[86]就是字母u,取完p后對p加鹽,前面和后面分別加上了三個字母,$這個函數每次執行結果都不一樣,應該是取隨機字符
找過去證實確實是在取隨機字符:

繼續跟,然后發現了驚喜:
不好意思發錯圖了,是這個:
canvas出現!繼續跟,跟到他做完所有操作進行加密的地方。這里他把數組o和數組i分別通過join拼接,s[139]是###,也就是轉成字符串,到m.e方法里加密,加密完再用逗號拼接好兩個結果,就是fp的值。
打印看看o和i的值。
i是canvas相關的參數,o是ua之類的東西。先說說這個o,o里面包括ua、屏幕分辨率、語言、版本等,這里可以寫死固定。如果只驗證這些信息,那么以上都可以隨機。但是結合canvas一起發給服務器,那么隨機可能會過不了。
然后參數i,canvas是個相當頭疼的地方。canvas是一種HTML5的標簽,非瀏覽器中是絕對弄不出來的。這個也是目前取瀏覽器指紋比較復雜的一種算法,與其類似的還有WebGL,也就是3D版的Canvas。這里我也沒有太好的方法,但是有一件事,你取了一個這么長的base64,到最后向瀏覽器傳的也只是一個十幾位的數值,我可以把一個長度幾萬個字符的字符串通過算法轉為十幾位的數字,但是你服務器怎么去通過這十幾位的數字還原原本的幾萬個字符呢?是做不到的,這個東西雖然難搞,同時服務器也很難檢測出來。一般來講,如果不是和瀏覽器信息一同返回,那么canvas這個東西可以直接隨機。如果不行,那可以試試改掉圖片base64的最后幾個字符,讓最后幾個字符隨機。如果還是不通過,那么需要去看看他的加密函數做了什么,針對加密函數做出調整。還還還不行,那只能想辦法去搞這個canvas數據了。通過前面我們分析出這個網站是把canvas和瀏覽器信息加密后一同返回給服務器的,那么這里把i完全隨機應該不大行,不過還是僥幸一下,萬一過了呢。
先嘗試全部隨機,在這里下一個斷,重新給n賦個值,隨便改幾個字符:
然后一路F8:
我們發現,他也能成功加載驗證碼。但是經過一番測試,我發現無論怎么滑動都無法通過驗證。看來這個方法確實不行,那就方案二,改他的圖。
一樣的方法,下斷->輸出原本的圖片代碼->修改代碼->替換。這里可以借助在線base64圖片互轉的網站,改掉幾個末尾的字符,確定圖片還是原來的樣子。

我們發現fp確實已經改變了
加載驗證碼,滑動,驗證通過。這個地方的偽造需要多考慮一些,不能夠完全隨機,也不能夠完全寫死,fp那兩個串是否需要配合變動。

關于這個地方摳代碼,首先找到W所在函數的頭和尾,一共1000行左右代碼。剪出來。直接剪出來是不能運行的,前面既然已經發現了他前端是vue做的,那么必定是用了webpack之類的工具構建打包,我們需要把webpack入口相關的代碼也剪過來。這個入口,無非就兩種,有的網站會把webpack入口代碼單獨提到一個js文件中,另一種就是和邏輯代碼在一個文件中。webpack執行的地方,往往伴隨著apply、call、及數組的push操作。

我們發現這個js里,入口代碼就在最上面,他直接定義了一個大數組,包裹所有的function,我們把這段也摳走。
把這些代碼貼到vscode里補環境。還是那句話,缺啥補啥。先把window和navigator這倆大哥定義了:

運行:
這是個啥。。不知道就去瀏覽器里找,在對應代碼處下斷:
G實際是document,u[160]是cookie,看代碼,他這里應該是遍歷cookie,如果有就直接賦值,否則返回null。返回null的下一步,就是重新生成唄。把這段for循環直接注掉。另外一處G[u[160]]的地方一樣。
按照如上邏輯補全環境即可,需要注意的是域名,我們要手動把live.v.wo.cn填進去,然后里面的fp。。半隨機半固定,看你心情搞就行。和canvas有關的代碼直接干掉,反正我們已經知道他驗證了些什么了,在關鍵處直接攔截改值就OK。
最后是cb參數,全局搜cb一共就4個地方,都打下斷點。刷新驗證碼,斷下來了:

進入s方法:
醒目的uuid,遇見uuid,直接隨機。。A方法我們要看一看:
跟著單步走一圈,沒有太復雜的算法,加鹽+二進制處理。這里可以直接摳出來運行。
具體步驟略過(PS:我也比較懶..),這里比較重要的地方我們都已經分析過了。
然后是軌跡生成。欲知后事如何,且聽下回分解。

總結

到目前為止,網站整體沒什么太復雜的地方,比較棘手的只有canvas,這個東西我也是沒什么太好的應對方法。之前看過一個大佬專門開發了一個瀏覽器,修改底層得到各種類型的指紋,絕無重復,需要的時候調一下就出來了,是個很好的想法。下篇找一找軌跡的算法。

聲明:本文分析過程僅供學習,并無任何個人以及商業或其他用途。如有不慎侵權,請聯系我刪除。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,797評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,179評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,628評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,642評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,444評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,948評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,040評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,185評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,717評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,794評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,418評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,414評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,750評論 2 370

推薦閱讀更多精彩內容