巨量jsvmp,扣逻辑分析
聲明:本文只作學習研究,禁止用于非法用途,否則后果自負,如有侵權,請告知刪除,謝謝!
目標網址:aHR0cHM6Ly90cmVuZGluc2lnaHQub2NlYW5lbmdpbmUuY29tL2FyaXRobWV0aWMtaW5kZXgvYW5hbHlzaXM/a2V5d29yZD13bw==
前言
走過路過不要錯過呀。
1.網址分析
闊以看到這里有四個網址,并且每個網址都帶有_signature參數,所以目標就是這個參數是如何生成的。
可以看到這里的send函數被重寫了,然后經過這個函數過后就還使url帶上_signature這個參數,感覺這都是jsvmp在url后面添加參數的常規了操作了,當然有時候還闊hook其他發送請求的函數。
進入函數后,就會發現關于jsvmp的特征
2.本地化函數(方便分析)
這里可以看到大循環,同時還注意到S=[],這個S數組都參與了后面的所有運算,這里可以輸出看一下
這一長串應該就是我們需要的_signature,如果一直在這個界面日志輸出,調試邏輯,總感覺有些麻煩,因為每次都要先下條件斷,在加密前斷下,然后才能一步一步分析。當然也可以采用本地方式,找出調用加密的函數,然后就方便調試了。聽前輩講,巨量和頭條都是抖音系的,所以我猜測加密函數調用的方式也應該是一樣的,果不其然確實是一樣的。
而看著長度也不對,這里生成47位是因為,再次之前初始化了,就是我注釋掉的那部分。
這里需要注意的:如果這里采用在片段中去還原邏輯,會出一些小問題,而這些問題是關于環境值方面的問題,但是整體的邏輯是不會變的,只是在這里還原后,還是需要回到原網頁去找到對應的環境值的。
這里為了方便我就這樣分析邏輯了。雖然這里有長短的區分,但是聽前輩講,短的也能訪問成功,后面就是具體分析短的是如何生成的。
3.入口函數分析
前面分析到,幾乎所有的步驟都涉及 S 這個數組,所以S就是我們分析的關鍵點
分別在每個循環的開頭下條件斷點輸出日志信息
到此,按照我自己之前的思路:
1.這個時候就需要尋找那一長串的帶有±*/>>,>>>,<<,|,&,^,%在一起運算符,這也算是jsvmp的一個破解點,因為jsvmp所有可見的信息都是匿名的,并不會看到很明顯的函數名字和參數
2.函數名和參數,最好還能輸出結果。
但是很可惜,這里的案例并不一樣,并沒有很好的看到那一場串的帶有運算符的或者在入口函數找到函數名這東西。這個時候就會想到,如果想要調用一個函數一般的常見形式都有: xx(),xx.call(),xx.apply()
所以就可以到這里看一看有沒有以上的這種形式代碼
然后關于運算符的,這個運算符一般而言是很重要的,當然要是你很熟悉,可以僅通過參數就可以猜出是什么運算,闊以忽略這一步呀。
這里藏得比較深的,因為是if控制的不同分支的,所以這些運算符也是在不同分支下的,好不容易找到
了
既然在本地,我們可以在這里直接輸出日志,如果采用條件斷是有些復雜的。大伙可以用正則去搜索
以上日志輸出弄完后,效果是這樣的
4.算法淺談
一般整個還原流程,是從最后開始倒起推,但是這里我就從頭開始分析起,不過再次之前先,淺淺熟悉一下某些關鍵部分的函數。
在這里就可以看到加密數字的生成就是由數字轉uincode編碼,而116是怎么來的呢
從日志就可以很清楚的看出來,116是怎么生成而來的,而35393565617484這個長字符串是從哪里來的,等后面再細說,這里按照以上步驟就會發現,加密字段_02B4Z6wo00f01tOftTAAAIDAIAL0qNFcUbbTvrGAANa.15
前面的_02B4Z6wo00f01是固定的,最后兩位也是通過一種方法生成的,也后面細說,而中間部分就分成了 tOftT AAAID AIAL0 q NFcUb bTvrG AANa. 這七個部分
大伙可以自己去把每個部分的運算規則都復制下來看一下,就會發現,每部分最重要的就是開頭部分數字生成,而同一組下的規則幾乎是一樣的。這就是我整理的一部分每部分開頭數字生成邏輯。(這里因為加密生成是和時間戳有關系的,所以每次都是不一樣的,但是加密規則還是相同的)
這里我就單獨分析一下C這個字符開頭和倒數第二個部分y開頭的,因為這兩個算是較為復雜的,而且 y 字符開頭的是和環境值有關系的。
4.1 C字符及其下四個字符
目標數字就是 -1035507532
進過多次實驗發現 運算 << 參數: 8240 26 結果: -1073741824 這個是固定的(可以自己試一試,看一下)。
所以最終目標就是 3169276006 ,,,,35391289523574,這兩個數字的生成。
35391289523574
這里我就要插一句,可以看到
這里加了兩個00,同時每次這里也是不一樣的,因為通過aa.toString(【2】)生成的二進制位數,沒有32位,所以在前面補0,差幾位補幾位。
看完上邊,這次目標數字就變為 759004534。
然后這一步可以按照常理是從最后一步一步回溯,我就直接跳過這一步,然后直接定位開始生成這個數字的第一步
這里要注意的 “newtab/” 這是一個環境值,需要后面會到原網頁調試出來
然后這里簡單的說一下流程,
后面也是相同的流程了,就會生成我們需要的數字759004534
進過上面分析,目標數字就轉為1386972362
這里分析是和上面那個數字差不多的流程,只是運算數字不同。
這里就是我按照步驟還原的函數。到此,C字符分析完成了,其他部分也是差不多類似的分析方式。
4.2 y字符
因為重新運行了一遍,倒數第二部分變成了LY7Sl,我們來看下這里 L 生成的關鍵數字
這里的關鍵數字就是 -1956399963,L一組的加密都和它相關,而生成-1956399963這個數字的關鍵數字就是我畫紅線的2113,這個數字必須去原網站查看,不然就會錯誤的。目前,就是我看到原網址上是257,不知道會不會變,因為我也看不出邏輯,不過好像是固定的。這里是需要注意的啊
4.3字符過濾規則
可以看到這里在最后一步有±某個數字,這可是有規律的呀,請看下圖:
如果單純不加入過濾規則,有些字符不會出結果的。那么就有個問題了,范圍呢?我們也是可以猜測的嘛,要生產a-z,A-Z 那肯定也是在這個范圍呢,我們也看到+有65,71,那估計就是這兩了。
當然還有一些其他規則,大伙也可以自己去看看,我這里就把我自己目前發現的搜集了一下
4.4最后兩位數字
就是把"_02B4Z6wo00f01tjMLfwAAIDAK1FsZj1UZyLY7SlAANRy"按照一定的運算規律得到一個數字,然后轉為16進制取最后兩位
4.5 data:…(很長的,canvas.toDataURL)涉及的加密部分
它這里并不是從0開始的,而且一個數(可以倒推出來的)%886,這個886就是data:…的長度,這里也是需要注意的
還有就是不同的data…最后結束循環是不一樣的,但每一個data最后的都是對應固定的值的。
5.大佬文章推薦
累了,不想寫了,推薦大佬的文章給大家看看,文章里大佬沒有詳細講,我上面應該說得比較明白吧。
這里提示一下,如果你是按照這樣把代碼弄下來,在片段調試的話,后面需要回到原網頁修改一些環境值,也不太麻煩,方法也和上面的一樣。添加修改的也不多哈。
十一姐yyds
如果有啥問題,歡迎和大佬很一起交流學習呀!!!
6.結果展示
我這里比較懶,沒有還原成python,只還原成js,不過從還原后的js還原成python問題也不大呀,還有呀沒有把解密函數弄出來,不過位置找到啦,是個webpack,大伙可以自己去弄出來看看呀,就在這里。
好啦完結啦啦啦。
總結
以上是生活随笔為你收集整理的巨量jsvmp,扣逻辑分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何解析字符串指令
- 下一篇: 基于51单片机的水族箱温度水质监测智能宠