【瑞數補環境實戰】某網站Cookie補環境與后綴分析還原

文章目錄

  • 1. 寫在前面
  • 2. 特征分析
  • 3. 接口分析
  • 3. 補JS環境
  • 4. 補后綴參數

【🏠作者主頁】:吳秋霖
【💼作者介紹】:擅長爬蟲與JS加密逆向分析!Python領域優質創作者、CSDN博客專家、阿里云博客專家、華為云享專家。一路走來長期堅守并致力于Python與爬蟲領域研究與開發工作!
【🌟作者推薦】:對爬蟲領域以及JS逆向分析感興趣的朋友可以關注《爬蟲JS逆向實戰》《深耕爬蟲領域》
未來作者會持續更新所用到、學到、看到的技術知識!包括但不限于:各類驗證碼突防、爬蟲APP與JS逆向分析、RPA自動化、分布式爬蟲、Python領域等相關文章

作者聲明:文章僅供學習交流與參考!嚴禁用于任何商業與非法用途!否則由此產生的一切后果均與作者無關!如有侵權,請聯系作者本人進行刪除!

1. 寫在前面

??瑞數相關的教程在網上可以說是層出不窮,各種技術方案均有!開源社區上多款針對瑞數定制的補環境框架,現在的過瑞數難度相比較于以前難度已經大大降低了!人均瑞數的成就人均可達成,本次我們使用補環境框架來過一下瑞數

2. 特征分析

在分析網站之前,我們需要去了解瑞數防護的一些特征。首先就是開局的無限debugger,然后4代的話請求是兩次,一次的話是一個202狀態碼!在返回HTMl內容中包含動態加載的meta標簽包含contentscript標簽,如下圖所示:

在這里插入圖片描述

可以看到有一個外鏈的JS地址,_ts=window[…]可以直接請求獲取JS代碼,如下所示:

在這里插入圖片描述

3. 接口分析

第一次請求頁面我們可以監測一下,FSSBB…就是JS代碼生成的Cookie,開頭的數字表示它是瑞數幾,如下所示:

在這里插入圖片描述

這里我們可以直接在瀏覽器Curl請求出來,進行一下重放請求驗證。如下所示:

在這里插入圖片描述

標準的202,其實到這一步我們現在需要解決的一個問題就是過瑞數的反爬蟲防護,讓我們的請求能夠正常的拿到頁面的響應信息

3. 補JS環境

既然是使用補環境的框架(開源的rs框架很多,大家可以自行去查找測試),環境相關的東西基本都是借助Proxy模式讓它自吐出來!

有時候使用框架并頁不一定就好使,可能拿到的結果會跟你瀏覽器的不一樣,這個時候就需要再回過頭去分析JS,將框架監測到的環境盡可能跟瀏覽的一致!

這個地方還會有很多的細節坑,也是很多初學者或者rs新手經常補不出來的一個原因!JS的檢測點很多,多次補的結果都跟瀏覽器的不一樣,那就需要繼續去分析,肯定是JS中沒有補到或者監測到的環境

這里的補環境的JS源碼很長。文章內作者不對其進行貼出,有需要的小伙伴可以找作者獲取學習

這里我們直接運行補環境的框架,檢測對象并進行自動代理。然后打印可以看到所有對象的屬性信息,如下所示:

在這里插入圖片描述

這里我們先使用Python來構造請求,將開始分析得到的content跟自執行JS提取出來(需要放到補出來的JS中執行調用),代碼實現如下:

import requests
import re
import logginglogger = logging.getLogger(__name__)class WebScraper:def __init__(self, head_url, headers):self.head_url = ""self.headers = headers = {"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9","Accept-Language": "zh-CN,zh;q=0.9","Cache-Control": "no-cache","Connection": "keep-alive","Pragma": "no-cache","Upgrade-Insecure-Requests": "1","User-Agent": "" # 自行獲取}def fetch_page(self):response = requests.get(self.head_url, headers=self.headers, verify=False)logger.info(f"請求響應狀態: {response.status_code}")meta_content_match = re.search(r'<meta content="(.*?)">', response.text)js_code_match = re.search(r'r="m">(.*?)</s', response.text)if not meta_content_match or not js_code_match:logger.error("未能找到所需的meta內容或JavaScript代碼")return Nonemeta_content = meta_content_match.group(1)js_code = js_code_match.group(1)logger.info(f"獲取meta_content: {meta_content}")logger.info(f"獲取自執行JS: {js_code}")

運行上面的程序,在第一次請求響應失敗時,提取信息,運行效果如下所示:

在這里插入圖片描述

將第一次請求提取到的信息塞到補環境的JS中,全局導出后可直接拿最到新的Cookie信息,如下所示:

在這里插入圖片描述

拿到生成的Cookie信息攜帶發送新的請求,可以看到上圖已成功過了瑞數反爬。請求狀態碼已是200,成功拿到了頁面信息

4. 補后綴參數

繞過瑞數反爬蟲后,我們需要處理的另一個問題則是后綴!拿接口數據,參數是有加密的,也就是后綴的那個MmEwMD,如下所示:

在這里插入圖片描述

這個參數的還原其實有多種方案,第一個就是分析JS對其進行算法還原。有一定的難度!第二個則比較簡單,直接在補環境的基礎之上,對XMLHttpRequest對象的open方法進行修改并對其進行攔截,以此獲取到完整的URL(含后綴

重寫open方法的這種方案目前看是比較常見的,針對部分瑞數的反爬蟲場景,至少作者在開源社區看到了多種此類的方案

(function() {// 保存原始的open方法var originalOpen = XMLHttpRequest.prototype.open;// 創建一個變量來保存URLvar lastURL;// 重寫open方法XMLHttpRequest.prototype.open = function(method, url, async, user, password) {// 記錄URLlastURL = url;// 調用原始的open方法return originalOpen.apply(this, arguments);};// 提供一個函數來獲取記錄的URLwindow.getLastRequestURL = function() {return lastURL;};
})();

作者給出了一個示例,通過這個例子我們可以攔截到XMLHttpRequest對象的open方法,以此來記錄傳入的URL,并通過getLastRequestURL拿到完整的URL,使用示例如下所示:

// 創建一個XMLHttpRequest對象并調用open方法
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://www.xxx.com.cn/service/xxx/xxx.actionId", true);// 獲取最后一次請求的URL
console.log(getLastRequestURL());

最終作者對整個網站的請求進行了一個封裝,測試了一下完整的流程,如下所示:

在這里插入圖片描述

成功拿到后綴參數并提交接口獲取到結構化數據,我們可以在此框架的基礎去拓展,讓其可以適用與所有瑞數的環境場景

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

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

相關文章

二分查找2

1. 山脈數組的峰頂索引&#xff08;852&#xff09; 題目描述&#xff1a; 算法原理&#xff1a; 根據題意我們可以將數組分為兩個部分&#xff0c;一個部分是arr[mid-1]<arr[mid]&#xff0c;另一個部分為arr[mid-1]>arr[mid]&#xff0c;此時不難發現我們可以將二分…

Flink,spark對比

三&#xff1a;az 如何調度Spark、Flink&#xff0c;MR 任務 首先&#xff0c;使用java編寫一個spark任務&#xff0c;定義一個類&#xff0c;它有main方法&#xff0c;里面寫好邏輯&#xff0c;sparkConf 和JavaSparkContext 獲取上下文&#xff0c;然后打成一個jar包&#xf…

數據結構——二叉樹相關題目

1.尋找二叉樹中數值為x的節點 //尋找二叉樹中數值為x的節點 BTNode* TreeFind(BTNode* root, BTDataType x)//傳過來二叉樹的地址和根的地址&#xff0c;以及需要查找的數據 {if (root Null){return Null;}//首先需要先判斷這個樹是否為空&#xff0c;如果為空直接返回空if (…

【JavaWeb程序設計】JSP實現購物車功能

目錄 一、結合之前所學的相關技術&#xff0c;編寫代碼實現以下購物車功能 1. 我實現的功能運行截圖如下 &#xff08;1&#xff09;商品列表頁面home.jsp &#xff08;2&#xff09;登錄賬號頁面/未登錄點擊結賬頁面 &#xff08;3&#xff09;重新登錄頁面&#xff08;記…

昇思25天學習打卡營第18天|ShuffleNet圖像分類

一、簡介&#xff1a; ShuffleNetV1是曠視科技提出的一種計算高效的CNN模型&#xff0c;和MobileNet, SqueezeNet等一樣主要應用在移動端&#xff0c;所以模型的設計目標就是利用有限的計算資源來達到最好的模型精度。ShuffleNetV1的設計核心是引入了兩種操作&#xff1a;Poin…

如何在centos7安裝Docker

在centOS7中我們可以使用火山引擎鏡像源鏡像安裝Docker,以下是具體的安裝步驟。 step 1: 安裝必要的一些系統工具 sudo yum install -y yum-utils Step 2: 添加軟件源信息 sudo yum-config-manager --add-repo https://mirrors.ivolces.com/docker/linux/centos/docker-ce.r…

力扣雙指針算法題目:二叉樹的層序遍歷(BFS)

目錄 1.題目 2.思路解析 3.代碼 1.題目 . - 力扣&#xff08;LeetCode&#xff09; 2.思路解析 對二叉樹進行層序遍歷&#xff0c;顧名思義&#xff0c;就是按每一層的順序對二叉樹一層一層地進行遍歷 思路如下 從第一層開始&#xff0c;先將二叉樹地頭放入隊列q&#xff0…

獨孤思維:副業被罵煞筆,割韭菜

做副業不要被外界干擾&#xff0c;不要被情緒牽絆。 不要因為別人的無心謾罵&#xff0c;隨口一評&#xff0c;就偃旗息鼓。 不要因為自己的情緒需要&#xff0c;找存在感&#xff0c;尋求人安慰。 他強任他強&#xff0c;清風拂山崗。 他橫由他橫&#xff0c;明月照大江。…

2007-2022年中國各企業數字化轉型與供應鏈效率

企業數字化轉型與供應鏈效率是現代企業管理和發展的兩個關鍵方面。以下是對中國各企業數字化轉型與供應鏈效率數據的介紹&#xff1a; 數據簡介 企業數字化轉型&#xff1a;指企業通過采用數字技術與創新方法&#xff0c;改造業務流程、組織結構和產品服務&#xff0c;以提升…

UCOS-III 系統移植

1. 移植前準備 1.1 源碼下載 UCOS-III Kernel Source&#xff1a; https://github.com/weston-embedded/uC-OS3.git Micriμm CPU Source &#xff1a; https://github.com/weston-embedded/uC-CPU.git Micriμm Lib Source&#xff1a; https://github.com/weston-embedded…

Nginx配置文件全解:從入門到設計

Nginx配置文件全解&#xff1a;從入門到架構設計 1. Nginx配置文件基礎 Nginx的主配置文件通常位于/etc/nginx/nginx.conf?。配置文件使用簡單的文本格式&#xff0c;由指令和指令塊組成。 1.1 基本語法規則 每個指令以分號(;)結束指令塊用大括號({})包圍配置文件支持使用…

多方SQL計算場景下,如何達成雙方共識,確認多方計算作業的安全性

安全多方計算在SQL場景下的限制 隨著MPC、隱私計算等概念的流行&#xff0c; 諸多政府機構、金融企業開始考慮參與到多方計算的場景中&#xff0c; 擴展數據的應用價值。 以下面這個場景為例&#xff0c; 銀行可能希望獲取水電局和稅務局的數據&#xff0c;來綜合計算得到各…

DolphinScheduler-3.1.9 資源中心實踐

前言 目前DolphinScheduler最新的穩定版本是 3.1.9 &#xff0c;基于此做些探索&#xff0c;逐漸深化學習路徑&#xff0c;以便于加深理解。 3.2.1 是最新的版本。目前的穩定版本是 3.1.9 基礎環境&#xff1a;Hadoop3.3, Java 8, Python3, MacOS14.2.1 一、本地偽分布式安裝…

學習筆記——動態路由——IS-IS中間系統到中間系統(開銷)

四、IS-IS開銷 1、IS-IS 開銷簡介 在IS-IS協議剛面世時&#xff0c;互聯網網絡結構還非常簡單&#xff0c;因此IS-IS早期的版本中只使用了6bit來描述鏈路開銷&#xff0c;鏈路開銷的取值范圍是1-63。一條路由的開銷范圍只有10bit&#xff0c;取值范圍是0-1023。 隨著計…

前端實現無縫自動滾動動畫

1. 前言: 前端使用HTMLCSS實現一個無縫滾動的列表效果 示例圖: 2. 源碼 html部分源碼: <!--* Author: wangZhiyu <w3209605851163.com>* Date: 2024-07-05 23:33:20* LastEditTime: 2024-07-05 23:49:09* LastEditors: wangZhiyu <w3209605851163.com>* File…

【ubuntu】安裝(升級)顯卡驅動,黑屏|雙屏無法使用問題解決方法

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 ubuntu 安裝(升級)顯卡驅動&#xff0c;黑屏|雙屏無法使用問題解決方法 由于項目需要&#xff0c;對顯卡驅動進行升級。升級完就黑屏。。。。&#xff0…

Fast R-CNN(論文閱讀)

論文名&#xff1a;Fast R-CNN 論文作者&#xff1a;Ross Girshick 期刊/會議名&#xff1a;ICCV 2015 發表時間&#xff1a;2015-9 ?論文地址&#xff1a;https://arxiv.org/pdf/1504.08083 源碼&#xff1a;https://github.com/rbgirshick/fast-rcnn 摘要 這篇論文提出了一…

WordPress禁止用戶注冊某些用戶名

不管在任何網站&#xff0c;用戶注冊時都有一個屏蔽非法關鍵詞&#xff0c;就是禁止注冊某些用戶名&#xff0c;原因是因為防止用戶使用一些特定的用戶名&#xff0c;例如管理員、官方等用戶名&#xff0c;還有就是那些攻擊性的詞語了。 加網站添加了屏蔽非法關鍵詞&#xff0…

BAT-致敬精簡

什么是bat bat是windows的批處理程序&#xff0c;可以批量完成一些操作&#xff0c;方便快速。 往往我們可以出通過 winR鍵來打開指令窗口&#xff0c;這里輸入的就是bat指令 這里就是bat界面 節約時間就是珍愛生命--你能想象以下2分鐘的操作&#xff0c;bat只需要1秒鐘 我…

考慮數據庫粒度的設計-提升效率

目錄 概要 場景 設計思路 小結 概要 公開的資料顯示&#xff0c;數據庫粒度是&#xff1a;“在數據庫領域&#xff0c;特別是數據倉庫的設計中&#xff0c;粒度是一個核心概念&#xff0c;它直接影響到數據分析的準確性和存儲效率。粒度的設定涉及到數據的詳細程度和精度&…