Python網路爬蟲之數美滑塊的加密及軌跡之動態js參數分析

来源:https://www.cnblogs.com/123456feng/archive/2022/04/30/16203313.html
-Advertisement-
Play Games

前言 數美滑塊的加密及軌跡等應該是入門級別的吧,用他們的教程和話來說 就一個des 然後識別缺口位置可以用cv2或者ddddoc 軌跡 也可以隨便模擬一個,這些簡單的教程 在csdn已經有一大把可以搜到的,但是卻很少人告訴你,它的js好像是一周更新一次,更 新之後post的參數key和des的key ...


前言

數美滑塊的加密及軌跡等應該是入門級別的吧,用他們的教程和話來說 就一個des 然後識別缺口位置可以用cv2或者ddddoc 軌跡

也可以隨便模擬一個,這些簡單的教程 在csdn已經有一大把可以搜到的,但是卻很少人告訴你,它的js好像是一周更新一次,更

新之後post的參數key和des的key會變,混淆的js結構也會變,現在我準備說的就是分析動態的參數和des加密的key值。

滑塊預覽圖如下圖所示:

在這裡插入圖片描述

抓包

在這裡插入圖片描述

進入正題 首先看這個介面 /ca/v1/conf 返回功能變數名稱和js地址 包含版本號

Python學習交流Q群:906715085####
{
code: 1100
detail: {css: "/pr/auto-build/v1.0.3-151/style.min.css",…} 
css: "/pr/auto-build/v1.0.3-151/style.min.css" 
domains: ["castatic.fengkongcloud.cn", "castatic.fengkongcloud.com", "castatic-a.fengkongcloud.com",…]  
0: "castatic.fengkongcloud.cn"  
1: "castatic.fengkongcloud.com"  
2: "castatic-a.fengkongcloud.com"  
3: "castatic2.fengkongcloud.com" 
js: "/pr/auto-build/v1.0.3-151/captcha-sdk.min.js"
message: "success"
requestId: "88aac752cd02b26a54e13b5c577652cc"
riskLevel: "PASS"
score: 0
}

 

得到js地址 這個js就是滑塊用的。

再看提交滑塊時的參數

在這裡插入圖片描述

一大堆的參數,除了sdkver,organization,rid,act.os,rversion,ostype,callback以外,另外的11個名字不固定 值也會更新,所以需要

在上面的js里搞出來(我用的正則匹配)大佬們都用ast的 可是我不會啊,難頂。

下圖是我之前小記的大概位置:

在這裡插入圖片描述

先全局搜個參數名 定位到這邊,下個斷點 隨便滑滑塊,斷下來找參數。

在這裡插入圖片描述

已經很明顯的 11個參數有8個就在這裡能用。

看代碼分析 後面這一段 有的是_0x27c7fb(0x46e) 這種函數傳參(16進位)得到des的key值 也有的是直接就是明文des的key值,所以我們還要得到_0x27c7fb解密的函數。

1.獲得解密函數

在這裡插入圖片描述

整個js可以看為兩個部分,第一部分就是寫一個解密函數 你傳一個整數過來 減一個整數 再把結果給大數組當下標返回一個字元

串,上面那些要解密的都調用這個函數就行。不要漏了後面的代碼_0x2abc是返回大數組 然後匿名函數1是對大數組做偏移處理,

匿名函數2也就是第二部分好像是webpack導出的 不用管他 它只是讓我們用來匹配東西的

###
Python學習交流Q群:906715085###
main_reCom = re.compile(',function\(\)\{function(.+)\]\)') 
#匹配到匿名函數2 並且正則替換掉 剩下的就是解密數組了
main_array_dec = re.sub(main_reCom, "", content)
js = execjs.compile(main_array_dec)
#get_array_functionName = re.search('function (_0x\d\w+)\(\)', main_array_dec).group(1)
get_arrayValue_FcuntionName = re.search('function (_0x\d\w+)\(_\d\w+,', main_array_dec).group(1)
print("通過傳參獲得數組返回值的函數名叫:", get_arrayValue_FcuntionName)

 

這樣把解密函數的js和函數名都獲取到了,那下一步就匹配參數了。

2.這裡的全部[“2位數的參數”]=(…,“key”|函數(16進位)) 匹配下來

正則代碼1

all_args_rule: str = '\[\'(\w{2})\'\]=this.*?,(_0x[\d\w]{6}\((0x[\d\w]{3})\)\)|\'([\d\w]{8})\')'
all_args = re.findall(all_args_rule, content)

 

在這裡插入圖片描述

在這裡插入圖片描述

匹配19個,就上面那些圖中可見的都匹配下來了,自己再根據slide是那些參數去保存。

3.找另外的3個動態參數 搜名字

在這裡插入圖片描述

正則代碼2

 # 獲取checkapi的另外3個參數 及要解的des密鑰或者密鑰 
 checkApi_args_rule = '\'(\w{2})\',this.*?,(_0x[\d\w]{6}\((0x[\d\w]{3})\)\)|\'([\d\w]{8})\')' 
 checkApi_args = re.findall(checkApi_args_rule, content)

 

十一個動態參數就已經匹配出來了。

下麵說說怎麼去得到值。

2位數的明文參數就不說了 迴圈 然後下標0就是。然後有的下標2有值(16進位的參數) 有的是直接下標3有值(明文des的密鑰) 寫個判斷 然後上面不是定義了js函數和獲得瞭解密的js函數名嗎?16進位轉成int類型 然後執行js函數傳參解密得到密鑰就行。

我的代碼大概這樣的

data_json = {}
data_json["QueKouWeiZhi"] = [all_args[5][0], all_args[5][3] if all_args[5][3] != "" else get_des_key(int(all_args[5][2], 16))]

 

最後返回data_json

在這裡插入圖片描述

要提交滑塊信息的時候,定義個params字典先 把固定的先寫好,動態的就動態修改。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 所謂軟體過程模型就是一種開發策略,這種策略針對軟體工程的各個階段提供了一套範形,使工程的進展達到預期的目的。對一個軟體的開發無論其大小,我們都需要選擇一個合適的軟體過程模型,這種選擇基於項目和應用的性質、採用的方法、需要的控制,以及要交付的產品的特點。一個錯誤模型的選擇,將迷失我們的開發方向。 ...
  • 很多 C++ 方面的書籍都說明瞭虛析構的作用: 保證派生類的析構函數被調用,並且使析構順序與構造函數相反 保證資源能夠被正確釋放 很久一段時間以來,我一直認為第 2 點僅僅指的是:當派生類使用 RAII 手法時,如果派生類的析構沒有被調用,就會產生資源泄露。就像下麵的代碼: #include <io ...
  • 在一些web開發或者是數據存儲的時候,肯定會使用到資料庫來進行數據存儲。而在Java裡面需要調用JDBC來對資料庫進行操作。每次用jdbc很麻煩,就可以採用一些連接池來解決這個問題 ...
  • 數字輸入、輸出、排序輸出和去重 這是我最近做的交互作業。它和我之前學C語言時寫的程式相比多了對用戶提示的語句,對用戶使用程式更友好。 我參考了一些代碼的思路並按照自己的需求進行了修改,其間調試程式、寫函數花了不少時間(有點生疏了,在寫參數那經常會忘記定義參數類型…)最終成功做出來了,蠻有成就感的! ...
  • python 學習筆記 變數、運算符與數據類型 點擊標題進行跳轉 容器序列類型 列表 列表是有序集合,無定長,能存儲任意數量和類型的數據,語法為:[元素1, 元素2, ..., 元素n] 創建列表 使用range()創建 使用推導式創建 由於列表中的元素可以任何對象,因此列表中保存的是對象的指針,使 ...
  • 建設目標 平臺介面建設規範旨在為介面開發、測試、使用劃定一個框架邊界,明確技術目標與要求,並要求提供完備的介面文檔說明,為自有平臺與第三方平臺提供數據及服務支持。 建設標準 介面規範 命名規範 在標準的RESTful架構中,每個網址代表一種資源(resource),所以網址中不能有動詞,只能有名詞。 ...
  • 對於從事數據科學和人工智慧領域的人們來說,Python 是大家的首選編程語言。根據最近的一項調查,27% 的程式員開發職位要 求掌握 Python 語言,今年年初這一數字還只是 18.5%。 Python 流行的原因在於其擁有非常直觀的能力:這門語言擁有大量的庫、足夠高的生產效率,還相對易於學習。2 ...
  • 參考資料 The WebSocket Protocol(RFC 6455) Spring Boot 2.6.6 官方文檔 SockJS 什麼是 WebSocket ? WebSocket協議提供了一種標準化的方法,通過單個TCP連接在客戶機和伺服器之間建立全雙工、雙向的通信通道。它是一種不同於HTT ...
一周排行
    -Advertisement-
    Play Games
  • 1. 說明 /* Performs operations on System.String instances that contain file or directory path information. These operations are performed in a cross-pla ...
  • 視頻地址:【WebApi+Vue3從0到1搭建《許可權管理系統》系列視頻:搭建JWT系統鑒權-嗶哩嗶哩】 https://b23.tv/R6cOcDO qq群:801913255 一、在appsettings.json中設置鑒權屬性 /*jwt鑒權*/ "JwtSetting": { "Issuer" ...
  • 引言 集成測試可在包含應用支持基礎結構(如資料庫、文件系統和網路)的級別上確保應用組件功能正常。 ASP.NET Core 通過將單元測試框架與測試 Web 主機和記憶體中測試伺服器結合使用來支持集成測試。 簡介 集成測試與單元測試相比,能夠在更廣泛的級別上評估應用的組件,確認多個組件一起工作以生成預 ...
  • 在.NET Emit編程中,我們探討了運算操作指令的重要性和應用。這些指令包括各種數學運算、位操作和比較操作,能夠在動態生成的代碼中實現對數據的處理和操作。通過這些指令,開發人員可以靈活地進行算術運算、邏輯運算和比較操作,從而實現各種複雜的演算法和邏輯......本篇之後,將進入第七部分:實戰項目 ...
  • 前言 多表頭表格是一個常見的業務需求,然而WPF中卻沒有預設實現這個功能,得益於WPF強大的控制項模板設計,我們可以通過修改控制項模板的方式自己實現它。 一、需求分析 下圖為一個典型的統計表格,統計1-12月的數據。 此時我們有一個需求,需要將月份按季度劃分,以便能夠直觀地看到季度統計數據,以下為該需求 ...
  • 如何將 ASP.NET Core MVC 項目的視圖分離到另一個項目 在當下這個年代 SPA 已是主流,人們早已忘記了 MVC 以及 Razor 的故事。但是在某些場景下 SSR 還是有意想不到效果。比如某些靜態頁面,比如追求首屏載入速度的時候。最近在項目中回歸傳統效果還是不錯。 有的時候我們希望將 ...
  • System.AggregateException: 發生一個或多個錯誤。 > Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失敗。檢查輸出視窗瞭解更多詳細信息。 內部異常堆棧跟蹤的結尾 > (內部異常 #0) Microsoft ...
  • 引言 在上一章節我們實戰了在Asp.Net Core中的項目實戰,這一章節講解一下如何測試Asp.Net Core的中間件。 TestServer 還記得我們在集成測試中提供的TestServer嗎? TestServer 是由 Microsoft.AspNetCore.TestHost 包提供的。 ...
  • 在發現結果為真的WHEN子句時,CASE表達式的真假值判斷會終止,剩餘的WHEN子句會被忽略: CASE WHEN col_1 IN ('a', 'b') THEN '第一' WHEN col_1 IN ('a') THEN '第二' ELSE '其他' END 註意: 統一各分支返回的數據類型. ...
  • 在C#編程世界中,語法的精妙之處往往體現在那些看似微小卻極具影響力的符號與結構之中。其中,“_ =” 這一組合突然出現還真不知道什麼意思。本文將深入剖析“_ =” 的含義、工作原理及其在實際編程中的廣泛應用,揭示其作為C#語法奇兵的重要角色。 一、下劃線 _:神秘的棄元符號 下劃線 _ 在C#中並非 ...