某度旋轉驗證碼v2 逆向分析

v2主要依據是核心 JS 文件mkd_v2.js 版本,如下圖所示:

第一次?https://passport.baidu.com/cap/init?接口,請求的?ak?是固定值,當然不同場景不同網站是不一樣的,_?時間戳,ver=1,返回值?astk?都是后面會用到的。

請求https://passport.baidu.com/cap/style接口,會用到tk值,得到驗證碼圖片,如下圖:

請求https://passport.baidu.com/cap/log接口,會用到fs值,得到驗證結果,如下圖:

fs值計算方式:

v2 版本分析

v2 版本和 v1 版本基本上差不多,區別在于?rzData?的結構不太一樣,ac_c?的計算方法不一樣,以及 AES 的 IV 不一樣,先看 AES 的 IV,v2 版本是 as 值加上固定值?appsapi2

然后再看看?rzDatacommon?字段下基本上就是 v1 的?rzData?的格式,captchalist?下,至少有?spin-0(旋轉)、`puzzle-0(滑塊)、click-0(點選)三種,ac_c?依舊是旋轉角度占比、滑動占比以及點選坐標信息,其他的依舊是寫死或者置空就行。

然后就是?ac_c?的計算方法了,首先是旋轉驗證碼,直接搜索?ac_c

往上跟棧,有個 percent 的地方,一個三目表達式,e 是固定值 290,e - 52 = 238,238 也就是滑動條能夠滑動的最大長度:

如果我們識別出來的是旋轉角度?angle,則?ac_c?計算方法如下:

var distance = angle * 238 / 360
var ac_c = Number((distance / (290 - 52)).toFixed(2))
?
// 也可以直接寫成:
var ac_c = Number((angle / 360).toFixed(2))

而對于滑塊驗證碼就有所不同,同樣是這個地方的三目表達式,但是要走后面的邏輯:

如果我們識別出來的是滑動距離?distance,則滑塊?ac_c?的計算方法如下:

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

同樣對于點選驗證碼來說,也不一樣,ac_c?的值是點擊的 xy 坐標以及時間戳:

其他問題

前面我們說了百度的驗證應該有兩次,對于第二次驗證,也就是 v1 的?viewlog/c?接口,v2 的?cap/c?接口,即便你第一次校驗通過了,這個 c 接口校驗也有可能不通過,出現這種情況的原因是通過的時間太短了,隨機?time.sleep?1-3 秒即可,如果時間太短,c 接口可能會報以下驗證錯誤:

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

還有一種情況就是提示存在安全風險,請再次驗證,出現這種情況你會發現去瀏覽器手動滑也是一樣的,所以在本地加個再次驗證的邏輯就行了,一般來說第二次驗證就能通過。

{'code': 0, 'msg': 'success', 'data': {'f': {'feedback': 'https://www.baidu.com/passport/ufosubmit.html', 'reason': '存在安全風險,請再次驗證'}}}

然后就是請求 header 里沒有?Referer?或者?Referer?不正確的話,會報錯:

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/207129.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/207129.shtml
英文地址,請注明出處:http://en.pswp.cn/news/207129.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大數據的技術棧-逐步完善

目錄 1.hadoop a.HDFS分布式文件系統 b.Yarn集群資源管理器 c.MapReduce sql引擎 d.Impala sql引擎 e.工具概觀 2.數據倉庫知識 a.Hive數據庫 1)Hive Sql 2)數據庫結構 b.Doris數據庫 3.混合處理框架SPARK a.Spark b.集群架構 4.數倉模型知識 5.開發工具 a.Dbeaver b.Idea…

android項目實戰之使用框架 集成多圖片、視頻的上傳

效果圖 實現方式,本功能使用PictureSelector 第三方庫 。作者項目地址:https://github.com/LuckSiege/PictureSelector 1. builder.gradle 增加 implementation io.github.lucksiege:pictureselector:v3.11.1implementation com.tbruyelle.rxpermissio…

線性回歸實戰

3.1 使用正規方程進行求解 3.1.1 簡單線性回歸 公式 : y w x b y wx b ywxb 一元一次方程,在機器學習中一元表示一個特征,b表示截距,y表示目標值。 使用代碼進行實現: 導入包 import numpy as np import matp…

中綴表達式轉后綴表達式與后綴表達式計算(詳解)

**中綴表達式轉后綴表達式的一般步驟如下: 1:創建一個空的棧和一個空的輸出列表。 2:從左到右掃描中綴表達式的每個字符。 3:如果當前字符是操作數,則直接將其加入到輸出列表中。 4:如果當前字符是運算符&a…

QNX usleep測試

QNX usleep測試 結論 usleep時間在QNX上沒有ubuntu上運行準確&#xff0c;但是10ms以上誤差不大。 測試代碼 testsleep.cpp的代碼如下&#xff1a; #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <time.h>double usleep_…

sklearn 筆記:neighbors.NearestNeighbors 自定義metric

1 數據 假設我們有這樣的一個數據tst_lst&#xff0c;表示的是5條軌跡的墨卡托坐標&#xff0c;我們希望算出逐點的曼哈頓距離之和&#xff0c;作為兩條軌跡的距離 [array([[11549759.51313693, 148744.89246911],[11549751.49813359, 148732.97804463],[11549757.620705…

Linux 常用命令匯總

1 linux定時任務 查看定時任務&#xff1a;crontab -l 每晚一點半執行定時任務&#xff1a; 30 1 * * * sh /var/lib/pgsql/pg_db_backup.sh >> /var/lib/pgsql/pg_db_backup.log 2>&1 配置定時任務&#xff1a;crontab -e 2 linux 內核版本查詢 cat /etc/r…

P5744 【深基7.習9】培訓

題目描述 某培訓機構的學員有如下信息&#xff1a; 姓名&#xff08;字符串&#xff09;年齡&#xff08;周歲&#xff0c;整數&#xff09;去年 NOIP 成績&#xff08;整數&#xff0c;且保證是 5 5 5 的倍數&#xff09; 經過為期一年的培訓&#xff0c;所有同學的成績都…

學習-java多線程

線程的創建 *繼承Tread,重寫run *實現Runnable接口,重寫run() [匿名內部類] *實現callable接口(有結果返回) 線程的常用方法 調用join保證這個方法先執行完成, 線程安全 并發編程 進程&#xff1a;就相當一個程序的實例線程&#xff1a;就是指令流&#xff08;一個進程包含多…

無重復字符的最長子串-中等

leetcode地址 給定一個字符串 s &#xff0c;請你找出其中不含有重復字符的 最長子串 的長度。 示例 1:輸入: s "abcabcbb" 輸出: 3 解釋: 因為無重復字符的最長子串是 "abc"&#xff0c;所以其長度為 3。 示例 2:輸入: s "bbbbb" 輸出: 1 …

我有才打造私域流量的知識付費小程序平臺

在當今數字化時代&#xff0c;知識付費市場正在迅速崛起&#xff0c;而私域流量的概念也日益受到重視。私域流量指的是企業通過自有渠道獲取的、能夠自由支配的流量&#xff0c;這種流量具有更高的用戶粘性和轉化率。因此&#xff0c;打造一個基于私域流量的知識付費小程序平臺…

實現:切換頁面切換標題,擴展 vue-router 的類型

布局容器-頁面標題 網址&#xff1a;https://router.vuejs.org/zh/guide/advanced/meta 給每一個路由添加 元信息 數據 router/index.ts const router createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [{ path: /login, component: () > im…

問題:數組對象去重

問題&#xff1a;數組對象去重 var arr [{name: ‘a’,id: 1}, {name: ‘a’,id: 2}, {name: ‘b’,id: 3}, {name: ‘c’,id: 4}, {name: ‘c’,id: 6}, {name: ‘b’,id: 6}, {name: ‘d’,id: 7}]; 對數組對象name進行去重處理&#xff0c; 結果顯示為&#xff1a; [{name…

第一啟富金:新添澳大利亞(ASIC)牌照

第一啟富金&#xff1a;澳大利亞證券及投資委員會&#xff08;ASIC&#xff09; GOLDWELL GLOBAL PTY LTD 是 WHOLESALE INVESTOR SERVICES PTY LTD&#xff08;CAR 編號 001304943&#xff09;的企業授權代表開發澳大利亞客戶&#xff0c;WHOLESALE INVESTOR SERVICES PTY LT…

XML是什么

XML是是什么&#xff1f; XML&#xff08;Extensible Markup Language&#xff09;&#xff0c;中文是可擴展標記語言&#xff0c;是標準通用標記語言的子集。它是一種標記語言&#xff0c;用于標記電子文檔&#xff0c;使其結構化。 XML可以用來標記數據&#xff0c;定義數據…

【軟件推薦】文本轉語音,語音轉wav,導入ue5

文字轉語音 在線免費文字轉語音 - TTSMaker官網 | 馬克配音https://ttsmaker.cn/ 文件轉換器 語音轉wav Convertio — 文件轉換器https://convertio.co/zh/

C#應用:MQTT分析——CONNECT為例子

源代碼: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Net.Sockets;namespace ConsoleApp1 {class Program{static void Main(string[] args){Connect();}/// <summary>/// 向…

HarmonyOS應用程序框架——UIAbility實操

UIAbility概述 UIAbility是一種包含用戶界面的應用組件&#xff0c;主要用于和用戶進行交互。UIAbility也是系統調度的單元&#xff0c;為應用提供窗口在其中繪制界面。 每一個UIAbility實例&#xff0c;都對應于一個最近任務列表中的任務。 一個應用可以有一個UIAbility&…

Leetcode—901.股票價格跨度【中等】

2023每日刷題&#xff08;五十二&#xff09; Leetcode—901.股票價格跨度 算法思想 實現代碼 class StockSpanner { public:stack<pair<int, int>> st;int curday -1;StockSpanner() {st.emplace(-1, INT_MAX);}int next(int price) {while(price > st.top(…

油猴(Tampermonkey)瀏覽器插件簡單自定義腳本開發

介紹 瀏覽器插件&#xff0c;包括油猴插件和其他插件&#xff0c;通過它們可以實現瀏覽器網頁的定制化與功能增強。 其他插件一般只有某種具體的功能&#xff0c;且已經寫死而不能更改&#xff0c;比如Adblock插件只用于去廣告。 油猴插件是一款用于管理用戶腳本的插件&…