京東滑塊js逆向
?

聲明:文章內(nèi)容僅供參考學(xué)習(xí),如有侵權(quán)請聯(lián)系作者進(jìn)行刪除。
本次介紹下js逆向的思路
js逆向步驟:
????????通過接口獲取兩張驗(yàn)證碼圖片 ——>? 在內(nèi)存里面處理圖片 ——>? 通過opencv計(jì)算出缺口的距離 ——>? 模擬封裝滑塊的軌跡參數(shù)? ——>? 逆向加密軌跡的參數(shù) ——>? 加密并請求驗(yàn)證接口。
首先,在京東登錄頁面輸入任意的賬號密碼點(diǎn)擊登錄,即可觸發(fā)滑塊

在F12下,隨意拖動滑塊,可以獲取到以下3個(gè)接口



通過接口返回值可以判斷出第二個(gè)接口是獲取圖片的接口,第三個(gè)接口是驗(yàn)證滑塊的接口。
圖片接口的bg是背景圖,patch是滑塊都是base64編碼的
????????和之前不同的是網(wǎng)頁上面的base64編碼多了一個(gè)頭
opencv測算滑塊距離代碼如下
有一個(gè)需要注意的是,js逆向里面距離是需要額外加上一個(gè)初始值的,在23-25之間。
回到第三個(gè)接口,從參數(shù)上面看,很明顯d是滑塊軌跡加密的參數(shù)

通過多次觸發(fā)接口,我們可以發(fā)現(xiàn),除了d外,c和s也是會變化的;
通過參數(shù)搜索,可以確定c是圖片接口返回值里challenge的值
s?是某個(gè)接口返回值里_jdtdmap_sessionId的值

雖然e的值不變,但是值挺長的(沒辦法忽視0_0),后面查了下發(fā)現(xiàn)是cookie里面的

接下來就輪到加密d上面了
從堆棧里面尋找運(yùn)行了哪些js文件,這個(gè)接口只運(yùn)行一個(gè)js文件,從submit可以推測第二個(gè)可能就是我們需要的斷點(diǎn)位置

?進(jìn)入里面發(fā)現(xiàn)過于簡單,直接斷點(diǎn),重新觸發(fā)滑塊

可以知道b就是我們要封裝的軌跡,前面a['getCoordinate']就是加密方法
進(jìn)入加密里面

結(jié)合之前堆棧的內(nèi)容,可以知道,加密都在這個(gè)文件里面,可以整個(gè)文件直接拿(也可以扣取出加密的部分⊙?⊙)
通過js運(yùn)行的部分

發(fā)現(xiàn)結(jié)構(gòu)簡單(這京東是把所有驗(yàn)證都扔給軌跡識別了是吧? Σ(っ °Д °;)っ
直接上代碼
關(guān)于滑塊軌跡的模擬,這個(gè)網(wǎng)上的代碼挺多的,我直接參考翻譯了一個(gè)python的版本出來
源碼底下自己拿
我來簡要說下思路≡ω≡
? ? ? ? ?首先,復(fù)制參數(shù)b的軌跡,這個(gè)軌跡需要正?;瑒雍妥詈髞砘鼗蝿觾蓚€(gè)種
? ? ? ? ?注意:晃動的軌跡x是要從0開始的,可以通過擴(kuò)大F2的大小,壓縮頁面的大小
? ? ? ? ?然后,將計(jì)算得到的距離 +?復(fù)制的正常滑動軌跡的初始距離來截取正?;瑒拥膮^(qū)間
? ? ? ? 重點(diǎn),取當(dāng)前時(shí)間戳前9位和復(fù)制下的正常軌跡的時(shí)間后4位,拼接成完整的時(shí)間
? ? ? ? 之后,通過復(fù)制的晃動軌跡 +?最終軌跡的值來模擬晃動;時(shí)間處理和上面差不多
結(jié)果如下

以下是源碼鏈接
??????? https://gitee.com/tkgzone/CSDN.git

