前程無憂接口分析

前程無憂接口分析

  • 所需用到的工具
  • URL解析
  • 通過抓包軟件或者開發者選項抓取數據包
  • 對代碼中的參數解析分析
  • 對acw_sc__v2進行分析
  • 對acw_sc__v2進行轉換代碼生成
    • 生成outPutList數組
    • 生成arg2參數
    • 生成arg3參數
    • 最終的效果
  • 對詳情頁面的分析
    • 對timestamp__1258的生成分析

所需用到的工具

  • Charles抓包工具
  • https://curlconverter.com/python/

URL解析

先訪問網頁https://www.51job.com/
在這里插入圖片描述輸入關鍵字點擊搜索
在這里插入圖片描述通過查看這個網址
https://we.51job.com/pc/search?jobArea=260200&keyword=%E5%85%BC%E8%81%8C&searchType=2&sortType=0&metro=

有以下參數

參數名說明
jobArea260200城市代碼
keyword兼職關鍵字(UrlEncode 編碼)
sortType00代表綜合排序
1代表最新優先
3代表薪資優先
5代表活躍職位優先

通過抓包軟件或者開發者選項抓取數據包

在這里插入圖片描述復制cURL Request通過https://curlconverter.com/go/轉為Python代碼
在這里插入圖片描述

運行代碼查看是否能獲取成功

在這里插入圖片描述

對代碼中的參數解析分析

通過對代碼中的參數分析,最終發現修改acw_sc__v2的值會導致訪問失敗

在這里插入圖片描述在這里插入圖片描述

所以基本上確定acw_sc__v2為我們需要破解的

對acw_sc__v2進行分析

現在我們需要去網站對acw_sc__v2逆向分析
先檢查一下acw_sc__v2,是本地生成的還是服務器生成
通過如下圖可知它是由本地js文件生成的
在這里插入圖片描述現在我們需要把這個值刪除,并編寫一個hook使其能夠快速的定位

cookie_cache = document.cookie;
Object.defineProperty(document, "cookie", {get: function () {console.log(cookie_cache);// 在獲取document.cookie時,執行你想要的操作return cookie_cache; // 返回原始的cookie值},set: function(value) {// 在設置document.cookie時,執行你想要的操作if(value.includes('acw_sc__v2')){debugger;}}
});

在這里插入圖片描述最終定位如下圖
在這里插入圖片描述開始對棧分析,定位到上一棧
在這里插入圖片描述通過查看我們可以知道arg3就是acw_sc__v2的值
在這里插入圖片描述
在這里打上一個斷點,并重新加載頁面

在這里插入圖片描述
搜尋arg3
在這里插入圖片描述
通過閱讀這份代碼可知arg3是通過一個循環來生成的,但是循環的條件與arg2有關,arg2又與列表outPutList有關,outPutListarg1有關

所以基本的思路為通過arg1生成outPutListoutPutList生成arg2arg2生成arg3

搜尋arg1
在這里插入圖片描述在這里打上斷點,重新加載網頁
在這里插入圖片描述在這里插入圖片描述通過如上兩張圖片可知arg1來自于訪問一個URL所返回的body

通過抓包軟件抓取并轉為Python代碼
在這里插入圖片描述在這里插入圖片描述我們可以通過正則表達式取出這個值

arg1=re.findall("arg1=('[^']*')",response.text)
arg1=arg1[0].replace("'","")

對acw_sc__v2進行轉換代碼生成

生成outPutList數組

通過arg1生成outPutList

for (var i = 0; i < arg1[_0x1e8e("0x1")]; i++) {var this_i = arg1[i];for (var j = 0; j < posList[_0x1e8e("0x1")]; j++) {if (posList[j] == i + 1) {outPutList[j] = this_i}}
}

分析這個js代碼可知這是通過循環來生成的
arg1[_0x1e8e(“0x1”)]是arg1的長度
posList[_0x1e8e(“0x1”)]是posList數組的長度
posList數組是固定值
轉為Python代碼如下

arg1='6AA3E7F5214AEB580A31B0B254C4795589509422'
posList = [15, 35, 29, 24, 33, 16, 1, 38, 10, 9, 19, 31, 40, 27, 22, 23, 25, 13, 6, 11, 39, 18, 20, 8, 14, 21, 32, 26, 2, 30, 7, 4, 17, 5, 3, 28, 34, 37, 12, 36]
outPutList = []
for i in range(len(arg1)):outPutList.append(0)for i in range(len(arg1)):this_i = arg1[i]for j in range(len(posList)):if posList[j] == i + 1:outPutList[j] = this_iprint(outPutList)

生成arg2參數

經過對代碼的分析可知arg2是由outPutList數組轉為字符串實現的

arg2 = outPutList[_0x1e8e("0x2")]("");
arg2  = ''.join(outPutList)

生成arg3參數

for (var i = 0; i < arg2[_0x1e8e("0x1")] && i < mask[_0x1e8e("0x1")]; i += 2) {var GxjQsM = _0x1e8e("0x3")[_0x1e8e("0x4")]("|"), QoWazb = 0;while (!![]) {switch (GxjQsM[QoWazb++]) {case "0":if (xorChar[_0x1e8e("0x1")] == 1) {xorChar = "0" + xorChar}continue;case "1":var strChar = parseInt(arg2[_0x1e8e("0x5")](i, i + 2), 16);continue;case "2":arg3 += xorChar;continue;case "3":var xorChar = (strChar ^ maskChar)[_0x1e8e("0x6")](16);continue;case "4":var maskChar = parseInt(mask[_0x1e8e("0x5")](i, i + 2), 16);continue}break}
}

arg2[_0x1e8e(“0x1”)]是arg2的長度
mask[_0x1e8e(“0x1”)]是mask的長度
mask是固定值3000176000856006061501533003690027800375
GxjQsM是固定的列表[‘1’, ‘4’, ‘3’, ‘0’, ‘2’]

轉為Python代碼

arg3=''
for i in range(0, 40, 2):strChar = int(arg2[i:i + 2], 16)maskChar = int(mask[i:i + 2], 16)xorChar = hex(strChar ^ maskChar)[2:]if len(xorChar) == 1:xorChar = '0' + xorChararg3 += xorChar

最終的效果

在這里插入圖片描述

對詳情頁面的分析

隨便點擊一個頁面進入詳情頁面,抓包抓取數據
在這里插入圖片描述復制CURL命令轉為Python代碼,運行代碼
在這里插入圖片描述可以獲取數據
開始分析,最終發現只有修改reqtimestamp__1258才會獲取失敗,并且這兩個是一對的,任何一個被修改都會導致獲取失敗

在這里插入圖片描述

對timestamp__1258的生成分析

通過抓包軟件發現在跳轉頁面之前會訪問一個url獲取js代碼

在這里插入圖片描述把整個js代碼復制下來到瀏覽器去調試
在這里插入圖片描述

在這里插入圖片描述搜尋_0x3baf44
在這里插入圖片描述搜尋_0x30f62c
在這里插入圖片描述最中發現這個_0x56d97c是一個函數,提交的參數為下面這種結構

-1837977873|0|1702035443735
number|0|number
0之后的數字的為時間戳,第一個數字暫不知道,所以去搜尋

在這里插入圖片描述大致閱讀可知_0x318558通過for循環來生成的,其中與_0x1117c9有關
搜尋_0x1117c9

在這里插入圖片描述打印_0x1117c9
在這里插入圖片描述這里你會很熟悉,這些數據都是搜索接口里所抓取的數據
在這里插入圖片描述也就是說timestamp__1258的生成思路為
構造如下的列表

{"protocol": "https:","host": "jobs.51job.com","hostname": "jobs.51job.com","port": "","pathname": "/guiyang-gshq/152094046.html","search": "?s=sou_sou_soulb&t=0_0&req=04608edfce87b123a2d4951514d63dc4","hash": "","original": "https://jobs.51job.com/guiyang-gshq/152094046.html?s=sou_sou_soulb&t=0_0&req=04608edfce87b123a2d4951514d63dc4"
}

通過for循環生成_0x318558,在通過_0x318558構造如下結構的數據

_0x318558|0|時間戳

提交到_0x56d97c函數生成timestamp__1258的值

_0x56d97c函數太過龐大并且這個js代碼是混淆后的,最終選擇補環境的方式來實現這個生成,讓后通過Python調用js代碼
補環境之后的效果
在這里插入圖片描述在這里插入圖片描述

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

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

相關文章

Vue3.0優點詳解

相對于Vue2.0 3.0有了比較大的改進&#xff0c;優勢主要有以下幾點&#xff1a; 一、性能提升 1、Vue3.0的響應式系統使用了Proxy代理對象&#xff0c;取代了Vue2.0中的Object.defineProperty&#xff0c;使得Vue3.0的響應式系統更快、更靈活。 2、Vue3.0對TypeScript的支持更…

Ubuntu22.04安裝完成后便可直接使用鍵盤上的Print鍵進行截圖

概要&#xff1a;Ubuntu22.04安裝完成后&#xff0c;無需安裝什么截圖軟件&#xff0c;可以直接使用鍵盤上的Print鍵進行截圖。 1、按一下Print鍵 我的電腦上Print鍵是PrtSc&#xff0c;如下圖所示 2、框選區域并截圖 如下圖中&#xff0c;可以框選(Selection)&#xff0c;也…

【教學類-35-06】17號的學號字帖延伸出的全體字帖(1-9去0)(A4豎版1份)

作品展示 背景需求&#xff1a; 給大4班17號同學單獨做了一個學號字帖后&#xff0c;我想可以把這樣的學具用在中班&#xff08;我馬上要成為中4班老師了&#xff09;&#xff0c;那就需要給全班做一份這樣的大號學號貼。 使用17號同學的word模板&#xff08;見下文&#xff…

3dMax vs Cinema4d哪個更好更適合你?

Cinema 4d和3dMax的區別 用于游戲風格、開發和風格可視化的3D建模、動畫和渲染軟件系統&#xff0c;為用戶提供制作和編輯動畫、視覺效果和環境的靈活性。4D CINEMA可能是由MAXON構建的強大的3D建模、運動圖形、繪畫和動畫軟件系統。Cinema 4D將在每個Windows和MAC操作系統上運…

多目標追蹤評價指標

多目標追蹤性能評價 基礎&#xff1a; GT&#xff1a;Ground Truth&#xff0c;是指真實的標簽或者真實的對象&#xff1b; TP&#xff1a;True Positive&#xff0c;被正確預測檢測到的樣本&#xff1b; TN&#xff1a;True Negative&#xff0c;被預測為負的負樣本&#…

啃下這50道筆試題,你就是SQL專家!(附答案,收藏備用)

【關注微信公眾號&#xff1a;跟強哥學SQL&#xff0c;回復“筆試”免費領取大廠SQL筆試題。】 有兩個名為Department&#xff08;部門&#xff09;和Employees&#xff08;員工&#xff09;的表結構如下&#xff1a; CREATE TABLE Department ( DepId int, DepName va…

文章解讀與仿真程序復現思路——電力系統自動化EI\CSCD\北大核心《考慮兩階段魯棒優化配置的多微網合作博弈》

這個標題涉及到多個概念&#xff0c;讓我們逐步解讀&#xff1a; 考慮兩階段魯棒優化配置&#xff1a; 兩階段&#xff1a; 指的是在解決問題或進行優化時&#xff0c;可能存在兩個不同的階段或步驟。這表明問題的解決不是一步完成的&#xff0c;而是需要經過多個步驟或階段。魯…

前端學習系列之CSS

目錄 CSS 簡介 發展史 優勢 基本語法 引用方式 內部樣式 行內樣式 外部樣式 選擇器 id選擇器 class選擇器 標簽選擇器 子代選擇器 后代選擇器 相鄰兄弟選擇器 后續兄弟選擇器 交集選擇器 并集選擇器 通配符選擇器 偽類選擇器 屬性選擇器 CSS基本屬性 優…

virtualenv創建虛擬環境

目錄 概念安裝創建虛擬環境激活虛擬環境刪除虛擬環境退出虛擬環境更改虛擬環境路徑概念 virtualenv是一個創建隔離的Python運行環境的工具。它允許用戶為每個Python項目創建一個獨立的虛擬環境,以避免不同項目之間的依賴沖突。 安裝 pip install virtualenv virtualenvwrapper…

JS如何實現豎屏輪播圖

首先是HTML搭建結構 <div class"banner-box"><div class"bannerbox"><div class"banner"><a class"a-img-ban"> <img class"img-ban" src"./img/640 (4).jpg" alt"終于等到你還…

SpringBoot項目訪問resources下的靜態資源

1.新建一個配置文件夾&#xff0c;放配置類 2.編輯 WebMvcConfig.java package com.southwind.configuration;import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import or…

openlayers地圖使用---跟隨地圖比例尺動態標繪大小的一種方式3

openlayers地圖使用—跟隨地圖比例尺動態標繪大小的一種方式 預期&#xff1a;隨著地圖比例尺放大縮小&#xff0c;地圖上的標繪隨著變化尺寸 思路&#xff1a;通過VectorImage和動態修改Feature尺寸實現Feature跟隨地圖比例尺尺寸變化 優點&#xff1a;結合第1和第2種方式的…

openlayers地圖使用---跟隨地圖比例尺動態標繪大小的一種方式2

openlayers地圖使用—跟隨地圖比例尺動態標繪大小的一種方式2 預期&#xff1a;隨著地圖比例尺放大縮小&#xff0c;地圖上的標繪隨著變化尺寸 思路&#xff1a;通過不斷添加地圖圖層實現標繪的動態縮放 優點&#xff1a;標繪放大縮小非常流暢 缺點&#xff1a;標繪超過1000…

LangChain 22 LangServe用于一鍵部署LangChain應用程序

LangChain系列文章 LangChain 實現給動物取名字&#xff0c;LangChain 2模塊化prompt template并用streamlit生成網站 實現給動物取名字LangChain 3使用Agent訪問Wikipedia和llm-math計算狗的平均年齡LangChain 4用向量數據庫Faiss存儲&#xff0c;讀取YouTube的視頻文本搜索I…

等待和通知

引入 由于線程是搶占式執行的,因此線程之間的執行的先后順序難以預知 但是實際開發中我們希望合理協調多個線程之間執行的先后順序. 這里的干預線程先后順序,并不是影響系統的調度策略(內核里調度線程,仍然是無序調度). 就是相當于在應用程序代碼中,讓后執行的線程主動放棄被…

3DCAT+上汽奧迪:打造新零售汽車配置器實時云渲染解決方案

在 5G、云計算等技術飛速發展的加持下&#xff0c;云渲染技術迎來了突飛猛進的發展。在這樣的背景下&#xff0c;3DCAT應運而生&#xff0c;成為了業內知名的實時云渲染服務商之一。 交互式3D實時云看車作為云渲染技術的一種使用場景&#xff0c;也逐步成為一種新的看車方式&a…

設備溫度和振動綜合監測:溫振一體式傳感器的優點和應用

隨著工業設備的復雜性和自動化程度的提高&#xff0c;對設備狀態監測的需求也日益增加。溫振一體式傳感器作為一種集振動和溫度監測于一體的傳感器&#xff0c;具備多項優勢&#xff0c;因此在工業設備狀態監測領域得到廣泛應用。 溫振一體式傳感器基于振動傳感器和溫度傳感器的…

1380 一筆畫問題

如果一個無向圖存在一筆畫&#xff0c;則一筆畫的路徑叫做歐拉路&#xff0c;如果最后又回到起點&#xff0c;那這個路徑叫做歐拉回路。 #include<bits/stdc.h> using namespace std; #define N 510 int g[N][N],d[N],c[N],n,m,reckon,oddity_point,lt; void dfs(int i)…

網絡運維與網絡安全 學習筆記2023.12.1

網絡運維與網絡安全 學習筆記 第三十二天 今日目標 ACL原理與類型、基本ACL配置、高級ACL配置 高級ACL之ICMP、高級ACL之telnet ACL原理與類型 項目背景 為了企業的業務安全&#xff0c;要求不同部門對服務器有不同的權限 PC1不能訪問Server PC2允許訪問Server 允許其他所…

java中用Thead創建線程和用Runnable創建線程的區別是什么?

在 Java 中&#xff0c;創建線程的兩種主要方式是通過繼承 Thread 類和通過實現 Runnable 接口。下面是它們之間的主要區別&#xff1a; 1. 繼承 Thread 類&#xff1a; class MyThread extends Thread {public void run() {// 線程執行的代碼} }// 創建并啟動線程 MyThread …