【驗(yàn)證碼逆向?qū)凇磕扯然瑝K、點(diǎn)選胆敞、旋轉(zhuǎn)驗(yàn)證碼 v1着帽、v2 逆向分析

00.png

聲明

本文章中所有內(nèi)容僅供學(xué)習(xí)交流使用,不用于其他任何目的移层,不提供完整代碼启摄,抓包內(nèi)容、敏感網(wǎng)址幽钢、數(shù)據(jù)接口等均已做脫敏處理歉备,嚴(yán)禁用于商業(yè)用途和非法用途,否則由此產(chǎn)生的一切后果均與作者無(wú)關(guān)匪燕!

本文章未經(jīng)許可禁止轉(zhuǎn)載蕾羊,禁止任何修改后二次傳播,擅自使用本文講解的技術(shù)而導(dǎo)致的任何意外帽驯,作者均不負(fù)責(zé)龟再,若有侵權(quán),請(qǐng)?jiān)诠娞?hào)【K哥爬蟲】聯(lián)系作者立即刪除尼变!

逆向目標(biāo)

  • 目標(biāo):百度滑塊驗(yàn)證碼利凑、點(diǎn)選驗(yàn)證碼浆劲、旋轉(zhuǎn)驗(yàn)證碼,v1哀澈、v2 逆向分析
  • v1 旋轉(zhuǎn)驗(yàn)證碼:
aHR0cHM6Ly93YXBwYXNzLmJhaWR1LmNvbS9zdGF0aWMvY2FwdGNoYS90dXhpbmcuaHRtbD9haz0zM2M0ODg4NGI3ZGY4M2Q0MjMwZTA3Y2JjZDBkMDdmZCZiYWNrdXJsPWh0dHBzJTNBJTJGJTJGYWlxaWNoYS5iYWlkdS5jb20mdGltZXN0YW1wPTE2MzE0MzQ0MjUmc2lnbmF0dXJlPWM2ODRhODJiNzk4MjAyOTg3NWJmZDhlMGE2NjBiNzdm
  • v2 旋轉(zhuǎn)驗(yàn)證碼:
aHR0cHM6Ly93YXBwYXNzLmJhaWR1LmNvbS9zdGF0aWMvY2FwdGNoYS90dXhpbmcuaHRtbD8mYWs9YzI3YmJjODlhZmNhMDQ2MzY1MGFjOWJkZTY4ZWJlMDY=
  • v2 滑塊驗(yàn)證碼:
aHR0cHM6Ly93YXBwYXNzLmJhaWR1LmNvbS9zdGF0aWMvY2FwdGNoYS90dXhpbmcuaHRtbD8mYW1wO2FrPWMyN2JiYzg5YWZjYTA0NjM2NTBhYzliZGU2OGViZTA2
  • v2 點(diǎn)選驗(yàn)證碼:
aHR0cHM6Ly93YXBwYXNzLmJhaWR1LmNvbS92Ni9nZXRQYXNz

PS:v1牌借、v2 是作者自己為了區(qū)分而命名的版本號(hào),主要依據(jù)是核心 JS 文件分為 mkd.js 和 mkd_v2.js 兩個(gè)版本割按,如下圖所示:

01.png

此外膨报,在界面上也有所區(qū)別,v2 版本的旋轉(zhuǎn)适荣、滑塊圖片有很明顯的陰影现柠、線條干擾,如下圖所示:

02.png

上面給的地址中弛矛,點(diǎn)選驗(yàn)證碼的地址有時(shí)候是點(diǎn)選够吩,有時(shí)候會(huì)變成旋轉(zhuǎn),估計(jì)是異常等級(jí)不同導(dǎo)致的丈氓,此外周循,傳聞還有一種無(wú)感驗(yàn)證,不過(guò)作者到處找也沒(méi)找到個(gè)地址扒寄,估計(jì)邏輯都是差不多的鱼鼓,無(wú)感驗(yàn)證如下圖所示:

03.png

抓包分析

以下以 v1 旋轉(zhuǎn)驗(yàn)證碼為例(v2 接口名稱不一樣,但邏輯是一樣的)该编,第一次 viewlog 接口迄本,請(qǐng)求的 ak 是固定值,當(dāng)然不同場(chǎng)景不同網(wǎng)站是不一樣的课竣,callback 回調(diào)值嘉赎,_ 時(shí)間戳,返回值 as于樟、tk 都是后面會(huì)用到的公条。

04.png
05.png

然后是一個(gè) getstyle 接口,其中的 tk 就是前面 viewlog 接口返回的迂曲,返回值里 backstr 后續(xù)參數(shù)加密會(huì)用到靶橱,img 就是旋轉(zhuǎn)圖片地址,info 是一些版權(quán)信息路捧。

06.png
07.png

旋轉(zhuǎn)驗(yàn)證碼開(kāi)始驗(yàn)證关霸,此時(shí)第二次出現(xiàn) viewlog 接口,astk 參數(shù)是第一次 viewlog 返回的杰扫,fs 參數(shù)需要我們逆向队寇,包含了旋轉(zhuǎn)角度等信息,如果旋轉(zhuǎn)角度正確且參數(shù)沒(méi)問(wèn)題章姓,則返回值里的 op 為 1佳遣,另外返回的 dstk 后續(xù)還會(huì)用到识埋。

08.png
09.png

上一步驗(yàn)證走完后,并不意味著通過(guò)驗(yàn)證了零渐,后續(xù)還會(huì)有一個(gè) viewlog/c 的接口需要進(jìn)一步驗(yàn)證窒舟,其中的 tkds 參數(shù)就是上一步返回的相恃,如果驗(yàn)證失敗辜纲,返回值 code 為 1笨觅,驗(yàn)證成功拦耐,code 則為 0。

10.png
11.png
12.png

逆向分析 fs

接下來(lái)分析主要加密參數(shù) fs见剩,跟棧到 mkd.js:

13.png
14.png

可以看到 o 就是 fs杀糯,而 o 又是 r.rzData 經(jīng)過(guò)加密后得到的,輸出一下 r.rzData苍苞,結(jié)構(gòu)如下圖所示:

15.png

重要參數(shù):

  • ac_c:一看就知道和旋轉(zhuǎn)的角度有關(guān)固翰;
  • backstrgetstyle 接口返回的;
  • cl:x羹呵,y 坐標(biāo)以及時(shí)間戳骂际,量一下就知道這個(gè)坐標(biāo)是鼠標(biāo)點(diǎn)擊下面那個(gè)滑動(dòng)條按鈕的時(shí)候的坐標(biāo);
  • mv:鼠標(biāo)軌跡冈欢,鼠標(biāo)動(dòng)一下就記錄一下坐標(biāo)和時(shí)間戳歉铝;
  • cr:屏幕長(zhǎng)寬高等信息;
  • 其他值都是空或者0凑耻。

實(shí)際測(cè)試太示,clmv 都不校驗(yàn),寫死或者置空都行香浩,當(dāng)然想要自己偽造一下也是可以的类缤,量一下滑動(dòng)按鈕在屏幕中的位置,cl 根據(jù)這個(gè)位置隨機(jī)生成就行了邻吭。重點(diǎn)看看 ac_c餐弱,直接搜索即可定位:

16.png
17.png

可以看到這個(gè)值的計(jì)算方法為 parseFloat(o / a).toFixed(2)a 是定值 212囱晴,實(shí)際上就是滑動(dòng)條能夠滑動(dòng)的最大長(zhǎng)度膏蚓,o 是滑動(dòng)的距離,如果我們識(shí)別出來(lái)的是旋轉(zhuǎn)角度 angle速缆,則 ac_c 計(jì)算方法如下:

var o = angle * 212 / 360
var ac_c = parseFloat(o / 212).toFixed(2)

// 也可以直接寫成:
var ac_c = parseFloat(angle / 360).toFixed(2)

r.rzData 搞定后降允,就只有個(gè) r.encrypt() 方法了,直接跟進(jìn)去就是我們熟悉的 AES 算法艺糜,其中 iv 是 viewlog 接口返回的 as 值加上一個(gè)定值 appsapi0剧董,其他就不用多說(shuō)了幢尚。至此加密參數(shù)就搞完了,還是非常簡(jiǎn)單的翅楼。

18.png
19.png

旋轉(zhuǎn)角度識(shí)別

這里推薦一個(gè)國(guó)外大佬的 RotNet 項(xiàng)目尉剩,可以用于預(yù)測(cè)圖像的旋轉(zhuǎn)角度以糾正其方向,還有基于此項(xiàng)目開(kāi)發(fā)的毅臊,Nanda 大佬的 RotateCaptchaBreak理茎、另一個(gè)大佬的 rotate-captcha-crack 等,鏈接如下:

深度學(xué)習(xí)大佬可以基于這些項(xiàng)目進(jìn)一步訓(xùn)練管嬉,像我這種對(duì)這方面一竅不通的當(dāng)然是選擇打碼平臺(tái)了皂林,云碼打碼還不錯(cuò),只不過(guò)官網(wǎng)只放出了 v1 版本沒(méi)有陰影干擾的蚯撩,找他們客服可以拿到 v2 版本有陰影干擾的類型础倍,這里就不多說(shuō)了,免得被認(rèn)為是打廣告了哈哈哈胎挎。

20.png

v2 版本分析

v2 版本和 v1 版本基本上差不多沟启,區(qū)別在于 rzData 的結(jié)構(gòu)不太一樣,ac_c 的計(jì)算方法不一樣犹菇,以及 AES 的 IV 不一樣德迹,先看 AES 的 IV,v2 版本是 as 值加上固定值 appsapi2

21.png

然后再看看 rzData揭芍,common 字段下基本上就是 v1 的 rzData 的格式胳搞,captchalist 下,至少有 spin-0(旋轉(zhuǎn))沼沈、``puzzle-0(滑塊)流酬、click-0(點(diǎn)選)三種,ac_c` 依舊是旋轉(zhuǎn)角度占比列另、滑動(dòng)占比以及點(diǎn)選坐標(biāo)信息芽腾,其他的依舊是寫死或者置空就行。

22.png

然后就是 ac_c 的計(jì)算方法了页衙,首先是旋轉(zhuǎn)驗(yàn)證碼摊滔,直接搜索 ac_c

23.png

往上跟棧,有個(gè) percent 的地方店乐,一個(gè)三目表達(dá)式艰躺,e 是固定值 290,e - 52 = 238眨八,238 也就是滑動(dòng)條能夠滑動(dòng)的最大長(zhǎng)度:

24.png

如果我們識(shí)別出來(lái)的是旋轉(zhuǎn)角度 angle腺兴,則 ac_c 計(jì)算方法如下:

var distance = angle * 238 / 360
var ac_c = Number((distance / (290 - 52)).toFixed(2))

// 也可以直接寫成:
var ac_c = Number((angle / 360).toFixed(2))

而對(duì)于滑塊驗(yàn)證碼就有所不同,同樣是這個(gè)地方的三目表達(dá)式廉侧,但是要走后面的邏輯:

25.png

如果我們識(shí)別出來(lái)的是滑動(dòng)距離 distance页响,則滑塊 ac_c 的計(jì)算方法如下:

var ac_c = Number((distance / 290).toFixed(2))

同樣對(duì)于點(diǎn)選驗(yàn)證碼來(lái)說(shuō)篓足,也不一樣,ac_c 的值是點(diǎn)擊的 xy 坐標(biāo)以及時(shí)間戳:

26.png

其他問(wèn)題

前面我們說(shuō)了百度的驗(yàn)證應(yīng)該有兩次闰蚕,對(duì)于第二次驗(yàn)證栈拖,也就是 v1 的 viewlog/c 接口,v2 的 cap/c 接口没陡,即便你第一次校驗(yàn)通過(guò)了涩哟,這個(gè) c 接口校驗(yàn)也有可能不通過(guò),出現(xiàn)這種情況的原因是通過(guò)的時(shí)間太短了盼玄,隨機(jī) time.sleep 1-3 秒即可贴彼,如果時(shí)間太短,c 接口可能會(huì)報(bào)以下驗(yàn)證錯(cuò)誤:

{'code': 1, 'isRectified': False, 'msg': 'Verification Failed'}

還有一種情況就是提示存在安全風(fēng)險(xiǎn)强岸,請(qǐng)?jiān)俅悟?yàn)證锻弓,出現(xiàn)這種情況你會(huì)發(fā)現(xiàn)去瀏覽器手動(dòng)滑也是一樣的砾赔,所以在本地加個(gè)再次驗(yàn)證的邏輯就行了蝌箍,一般來(lái)說(shuō)第二次驗(yàn)證就能通過(guò)。

{'code': 0, 'msg': 'success', 'data': {'f': {'feedback': 'https://www.baidu.com/passport/ufosubmit.html', 'reason': '存在安全風(fēng)險(xiǎn)暴心,請(qǐng)?jiān)俅悟?yàn)證'}}}

然后就是請(qǐng)求 header 里沒(méi)有 Referer 或者 Referer 不正確的話妓盲,會(huì)報(bào)錯(cuò):

// v1 沒(méi)有 Referer
{'code': 1, 'msg': 'Unregistered Host'}
// v1 Referer 不正確
{'code': 1, 'msg': 'Invalid Request', 'data': []}
// v2 沒(méi)有 Referer 或者 Referer 不正確
{'code': 100600, 'msg': 'Unauthorized Host'}

還有一個(gè)小技巧,如果你想自己驗(yàn)證一下旋轉(zhuǎn)的角度對(duì)不對(duì)专普,怎么去測(cè)量這個(gè)角度呢悯衬?我們可以借助一些做圖軟件,簡(jiǎn)單點(diǎn)兒的比如美圖秀秀檀夹,新建一個(gè)畫布筋粗,然后直接將驗(yàn)證碼圖片拖進(jìn)去,就可以自由旋轉(zhuǎn)了炸渡,旋轉(zhuǎn)的時(shí)候軟件會(huì)自動(dòng)標(biāo)注出旋轉(zhuǎn)的角度娜亿,如下圖所示:

27.png

結(jié)果驗(yàn)證

28.png
29.png
30.png
31.png

爬蟲工具站

K哥新上線了一個(gè)爬蟲工具站,歡迎測(cè)試:https://www.kgtools.cn/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蚌堵,一起剝皮案震驚了整個(gè)濱河市买决,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌吼畏,老刑警劉巖督赤,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異泻蚊,居然都是意外死亡躲舌,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門性雄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)没卸,“玉大人枯冈,你說(shuō)我怎么就攤上這事“煳颍” “怎么了尘奏?”我有些...
    開(kāi)封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)病蛉。 經(jīng)常有香客問(wèn)我炫加,道長(zhǎng),這世上最難降的妖魔是什么铺然? 我笑而不...
    開(kāi)封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任俗孝,我火速辦了婚禮,結(jié)果婚禮上魄健,老公的妹妹穿的比我還像新娘赋铝。我一直安慰自己,他們只是感情好沽瘦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布革骨。 她就那樣靜靜地躺著,像睡著了一般析恋。 火紅的嫁衣襯著肌膚如雪良哲。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天助隧,我揣著相機(jī)與錄音筑凫,去河邊找鬼。 笑死并村,一個(gè)胖子當(dāng)著我的面吹牛巍实,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播哩牍,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼棚潦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了姐叁?” 一聲冷哼從身側(cè)響起瓦盛,我...
    開(kāi)封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎外潜,沒(méi)想到半個(gè)月后原环,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡处窥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年嘱吗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡谒麦,死狀恐怖俄讹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情绕德,我是刑警寧澤患膛,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站耻蛇,受9級(jí)特大地震影響踪蹬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜臣咖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一跃捣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧夺蛇,春花似錦疚漆、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至截型,卻和暖如春趴荸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宦焦。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留顿涣,地道東北人波闹。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像涛碑,于是被迫代替她去往敵國(guó)和親精堕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容