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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...