極驗(yàn)驗(yàn)證碼破解—超詳細(xì)教程(二)

極驗(yàn)驗(yàn)證碼破解—超詳細(xì)教程(一)

極驗(yàn)驗(yàn)證碼破解—超詳細(xì)教程(二)

極驗(yàn)驗(yàn)證碼破解—超詳細(xì)教程(三)

Gayhub:FanhuaandLuomu/geetest_break

2017.8.21 代碼以上傳,可供參考

[國家企業(yè)信用信息公示系統(tǒng)為例]

目錄

一、網(wǎng)站http://www.gsxt.gov.cn滑動(dòng)驗(yàn)證碼概述.

二、極驗(yàn)驗(yàn)證碼破解-抓包分析.

三、極驗(yàn)驗(yàn)證碼破解-搭建本地驗(yàn)證碼服務(wù).

四、極驗(yàn)驗(yàn)證碼破解-分析geetest.js,得到所需參數(shù).

五、極驗(yàn)驗(yàn)證碼破解-Track的獲取.

六、極驗(yàn)驗(yàn)證碼破解-獲取背景圖片及缺口距離d的計(jì)算.

七、極驗(yàn)驗(yàn)證碼破解-總結(jié).

參考文獻(xiàn).

運(yùn)行截圖.


四、極驗(yàn)驗(yàn)證碼破解-分析geetest.js,得到所需參數(shù)

1. 為了找出如何生成userresponse和a,我們?cè)趃eetest.js中搜索userrespnse,發(fā)現(xiàn)只有一處提到userresponse,如下所示:

可以看出userresponse和a都在上述代碼中賦值。

首先,我們追蹤ca.ra,得到下面代碼:

計(jì)算userresponse需要參數(shù)l和challenge,challenge我們已知,下面分析l(先猜測(cè)為滑塊移動(dòng)的距離)。

可得到a由n生成,

由上述可知oa.qa的返回值是f,下面繼續(xù)追蹤f:

由上述可知(console為我添加,目的是打印信息),f的返回值即為所求a,觀察其包含??!信息,比較所需a值:

可以發(fā)現(xiàn),目前推測(cè)無誤。

2. 我們發(fā)現(xiàn)f依賴于oa下的c函數(shù),追蹤c函數(shù):

觀察c函數(shù)的參數(shù)a,由a[h+1][1]可知a應(yīng)該是一個(gè)二維數(shù)組。

添加如下信息,輸出a的內(nèi)容:

刷新http://localhost:8000/,查看console控件下的信息:

可以發(fā)現(xiàn),這很大可能就是我們所要找的滑動(dòng)軌跡Track。

回到之前userresponse中的l參數(shù),我們?cè)谙鄳?yīng)位置輸出:

查看Console發(fā)現(xiàn):

之前我們猜測(cè)l為滑動(dòng)距離,比較l與Track最后一個(gè)坐標(biāo),可以發(fā)現(xiàn)l與Track[-1][0]相等,因此驗(yàn)證我們猜想—l是滑動(dòng)距離。

3. 要想得到userresponse,需要得到l,需要得到Track,由于Track是隨機(jī)采樣生成的離散軌跡坐標(biāo)序列,因此我們需要根據(jù)缺口的位置來模擬Track。由于Track較難模擬,我們先假設(shè)已根據(jù)缺口距離生成了Track。

則可以寫出生成userresponse的函數(shù):

def cal_userresponse(a,b):

d=[]

c=b[32:]

for e in range(len(c)):

f=ord(str(c[e]))

tmp=f-87 if f>57 else f-48

d.append(tmp)

c=36*d[0]+d[1]

g=int(round(a))+c

b=b[:32]

i=[[],[],[],[],[]]

j={}

k=0

e=0

for e in range(len(b)):

h=b[e]

if h in j:

pass

else:

j[h]=1

i[k].append(h)

k+=1

k=0 if (k==5) else k

n=g

o=4

p=""

q=[1,2,5,10,50]

while n>0:

if n-q[o]>=0:

m=int(random.random()*len(i[o]))

p+=str(i[o][m])

n-=q[o]

else:

del(i[o])

del(q[o])

o-=1

return p

參數(shù)a和b分別是l和challenge。上述函數(shù)是我根據(jù)

改寫成Python形式

至此,userresponse參數(shù)破解成功,接下來看a的生成。

4. 之前分析a是由oa下的f函數(shù)生成:

其中參數(shù)a是Track。其中f函數(shù)用到了c函數(shù)、e函數(shù)和d函數(shù)。

根據(jù)js函數(shù)源碼,我將其改寫成python函數(shù)。

# 計(jì)算每次間隔? 相當(dāng)于c函數(shù)

代碼只截取部分,具體細(xì)節(jié)后面會(huì)開源。



完整的f函數(shù)如上所示,參數(shù)為Track,返回值即為f(也就是所需的a)。

至此,參數(shù)a也破解完成!??!只差最會(huì)一步,Track如何得到。

(未完待續(xù))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容