
宣告
本文章中所有內容僅供學習交流使用,不用于其他任何目的,不提供完整代碼,抓包內容、敏感網址、資料介面等均已做脫敏處理,嚴禁用于商業用途和非法用途,否則由此產生的一切后果均與作者無關!
本文章未經許可禁止轉載,禁止任何修改后二次傳播,擅自使用本文講解的技術而導致的任何意外,作者均不負責,若有侵權,請在公眾號【K哥爬蟲】聯系作者立即洗掉!
逆向目標
- 目標:某片的滑動驗證碼和點選驗證碼逆向
- 主頁:
aHR0cHM6Ly93d3cueXVucGlhbi5jb20vcHJvZHVjdC9jYXB0Y2hh

抓包分析
驗證碼圖片獲取介面,GET 請求,包含四個引數:cb、i、k、captchaId,有時候可能也會有 token 引數,那是因為不是第一次加載圖片,比如重繪圖片,會將之前介面的 token 值帶上,

介面回傳,如果是滑動驗證碼,則 bg 是背景圖,front 是滑塊圖,還有個 token 值后續會用到,

如果是點選驗證碼,則 captchaImage 是底圖,wordsImage 是需要點擊的文字,同樣的有個 token 值后續會用到,

驗證介面,包含五個引數:cb、i、k、token、captchaId,其中 token 就是獲取驗證碼介面回傳的,


逆向分析
圖片介面
先來看看獲取驗證碼圖片的介面,全域搜索關鍵字 captchaId 即可定位到 key 為 jsonpRequest 的地方,下圖中的 t 就是完整的介面 URL 了:

往上挨個找,先看看 captchaId,其實就是 this.APP_ID,多次重繪你會發現,對于滑塊來講,是定值 974cd565f11545b6a5006d10dc324281,對于點選來講,是定值 e1e7be036f9242c7aed023438af66f46,這兩個值在一個 JS 里是寫死的,如下圖所示:


再往上看,HOSTS 啥的是定值就不用說了,cb 就是 r,i 就是 a.i,k 就是 a.k,通過 concat() 方法連接起來,所以只需要搞定 r 和 a 的值就行了,如下圖所示:

a 的值是通過 encrypt(e) 得到的,e 里面有 fp、address、yp_riddler_id 等值,如下圖所示:

先看看這個 encrypt 方法,最侄訓傳的是 i 和 k,瞧瞧這熟悉的 iv、parse,一看就是 AES、DES 之類的,試一下就知道了,或者跟進 lt.a.encrypt() 看看他的原始碼,對比一下標準演算法里的原始碼,就可以發現是 AES,k 就很明顯了,RSA 加密,公鑰啥的一搜就有,

然后往上有個 yp_riddler_id,貌似是從 cookie 中拿的,直接搜索這個關鍵字,可以找到其設定值的地方,就是一個 UUID,其中有個 window.performance.now() 方法,其作用是回傳一個當前頁面執行的時間的時間戳,用來精確計算程式執行時間,在 node 實作方法如下:
var perf = require('perf_hooks');
performance = perf.performance.now()
console.log(performance);


然后再往上有個 e.fp = this.fingerprint,這里用到的應該是一個指紋庫:https://github.com/fingerprintjs/fingerprintjs ,感興趣的可以了解一下,同一個瀏覽器得到的指紋是一樣的,這里固定即可,

然后就是 r 的值,preAdd 方法,直接扣就行了


然后這個 e 的值,再傳到 jsonpRequest 之前就已經有一些值了,所以我們還得往前跟堆疊看看:

來到 getCaptcha 這里,沒啥特別的,扣就完事兒了,其中有個 browserInfo 是瀏覽器的一些東西,copy 下來就行了,

驗證介面
驗證介面最后也是走的 jsonpRequest,和前面的獲取圖片介面類似,不同之處就是傳入的 e 里面包含的值不一樣,先來看看滑塊:

包含 distanceX 和 points,很明顯 points 就是軌跡了,再往前跟看看,如下圖所示,我們只需要 i 和 r 引數就行了,引數是一些圖片高寬,固定就行,offsetX 是滑動的距離,

主要看看這個軌跡 i = this.reducePoints(),跟進 reducePoints() 方法里,this.position 是軌跡資訊,這個方法對軌跡做了一些處理再回傳的,直接把邏輯扣下來即可,

滑塊就到這兒了,再來看看點選驗證,同樣的還是 jsonpRequest,傳入的 e 包含了三個點的坐標,

同樣往上跟堆疊,這里的 this.position 才是真實坐標,后面每個坐標分別對 x 和 y 與圖片的寬和高進行相除,如下圖所示:

結果驗證


轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/540339.html
標籤:Python
