爬蟲逆向之JS混淆案例(全國招標公告公示搜索引擎 type__1017逆向)

案例https://ctbpsp.com/#/

截至2025.07.19可用

定位加密位置

加密位置:

定位方式,XHR,跟棧?

跟棧?

QL打斷點,重新斷住

?分析為,一個函數傳入四個參數

?var QL = QI[d9(Nv.mQ)](QJ, Qh, Qv, this[d9(Nv.m9)][0xa1a * 0x2 + -0xd2a + -0x35 * 0x22]);

QI[d9(Nv.mQ)]為函數

QJ,QH,QV, this[d9(Nv.m9)][0xa1a * 0x2 + -0xd2a + -0x35 * 0x22]為傳入函數里的四個參數

進入函數

事實上這種傳參方式特別常見,

基本就是函數傳入幾個參數,再傳入一個函數?,函數里面返回一個函數,函數的作用也是傳入幾個參數,一個函數,嵌套幾層,最后的結果就是傳入的函數,然后傳入的參數給傳入的函數傳參。

有點亂

用python演示

def b(a,b):return a(b)
def hhh(h,a):return b(h,a)
def a(b):print(b)
hhh(a,3)

hhh(a,3)經過很多次調用最后執行a(3),這種網頁調試里面很常見的(留個心眼),所以要不斷進入函數內部。

簡單來說就是一個函數調用傳參本來可以直接用,非要嵌套幾層函數再調用

最后不斷進入函數,一共進入了四層

進入到一個控制流里面

控制流也特別常見,每一個分支打上斷點,加密位置也就找到了。

接下來扣代碼

混淆代碼解釋

這是一個混淆的JS代碼,首先得扣三個主要

大數組函數或大數組,自執行方法,解密函數

不懂這些作用得請先參考JS逆向之JS混淆_js代碼混淆-CSDN博客

大數組一般在js文件最上方

知道大數組叫?Q(),另外兩個函數也容易找了

再解密函數里面必須調用大數組(不一定是傳參,也可能是賦值)

所以很顯然,a函數是解密函數?

解密函數后面要經過多次被調用(留個心眼),非常重要

接下來是自執行方法

事實上有兩個 自執行函數,看被大數組Q被那個調用。(不一定是傳參,也可能是賦值)

第一個坑

先把這三個關鍵函數扣下來,然后先運行試試,發現不斷運行,結束不了。

這種情況一般有兩種

一種是在循環里異常捕獲,導致跳不出去循環,一種是定時器,定時運行

但是沒有報window未定義,所以不是定時器的問題。所以只剩下異常捕獲

這是這個網站的第一個坑

直接搜索try

很顯然,死循環,手動輸出異常是什么,m8,記得要break,不然輸出死循環

結果是E2未定義

E2可以寫死,383

補好E2,程序可以運行

扣代碼?

混淆的代碼主要扣對象,次要扣函數了

現在咱們可以肆無忌憚的扣代碼了

G為定義,直接搜?

?

直接扣

直接定位搜索

a函數進入后發現解密函數,這很正常?,在混淆代碼里,解密函數多次被調用

?繼續運行

?

直接扣下來。接下來基本都是缺對象了(嗚嗚嗚)或者缺調用解密方法,缺什么補什么

但你補著補著,發現要補的對象還是很多的

仔細觀察,你會把很多對象一把扣了。(這就是老辣的經驗)

接下來分析

?Qk解釋

經分析,Qk就是這么長一坨

Qk = mO[Um(ik.m8)](mO[Um(ik.m9)](mO[Um(ik.mm)](mO[Um(ik.mO)](mO[Um(ik.mQ)](Qk, '|'), mO[Um(ik.ma)](mE)), '|'), new Date()[Um(ik.mZ)]()), '|1');

?這就是對象嵌套對象調用對象屬性,非常的繞,不過沒事,咱們只扣對象

發現又是解密函數a

?發現另一個Qk

接下來又是喜聞樂見的扣對象,調用解密函數a?

?

傳入參數是接口url未帶加密參數的編碼部分

最后差一個mE

?

第二個坑 (可有可無)

把mE補上,才發現,有第二個坑(事實上做第一次沒有發現這個坑)

這兩個Qv是不一樣的,這個是0,補上出結果

完美收官?

最后封裝

?對url進行編碼

from urllib.parse import quote
encoded_url = quote(url, safe='')

直接出結果,最后是一串加密數據,非常簡單的·DES解密。

這個網站詳情有軌跡驗證,請求多了有阿里滑塊(我是菜雞,解決不了一點)

總結

僅供學習!!!

扣混淆代碼,先扣三個函數(大數組,自執行方法,解密函數)

自執行方法會調用大數組函數(不一定是傳參,也可能是賦值)

解密函數也會調用大數組函數(不一定是傳參,也可能是賦值)

僅供學習!!!

混淆代碼跟棧經常會是喜聞樂見的函數嵌套函數傳參函數,一步一步進去即可

僅供學習!!!

扣混淆代碼以扣對象為主,次要扣函數。期間解密函數一直會被調用賦值

僅供學習!!!

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

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

相關文章

Hive常用命令總結

一、數據庫操作 -- 創建數據庫(默認路徑) CREATE DATABASE IF NOT EXISTS myhive;-- 指定路徑創建數據庫 CREATE DATABASE myhive2 LOCATION /myhive2;-- 查看數據庫信息 DESC DATABASE myhive;-- 刪除數據庫(強制刪除表) DROP DA…

Spring整合MyBatis詳解

Spring整合MyBatis詳解一、整合優勢與核心思路1.1 整合優勢1.2 核心整合思路二、環境搭建與依賴配置2.1 開發環境2.2 Maven依賴配置三、整合配置(核心步驟)3.1 數據庫配置文件(db.properties)3.2 Spring配置文件(sprin…

Windows CMD(命令提示符)中最常用的命令匯總和實戰示例

CMD命令匯總 下面是 Windows CMD(命令提示符)中最常用的命令匯總,共 30 個,包含說明和典型代碼示例,適合日常開發、系統操作、文件管理、網絡診斷等場景。一、文件與目錄操作(最常用)命令說明示…

嵌入式硬件篇---舵機(示波器)

舵機是一種高精度的角度控制執行器件,廣泛應用于機器人、航模、自動化設備等領域。其核心特點是能通過控制信號精準定位到特定角度(通常范圍為 0-180,部分可到 360 連續旋轉)。常見的舵機類型可根據結構、控制方式、用途等維度劃分…

嵌入式硬件篇---按鍵

按鍵是電子系統中最基礎的人機交互部件,通過機械或電子方式實現電路通斷或狀態切換。根據結構和工作原理的不同,常見按鍵可分為機械按鍵、薄膜按鍵、觸摸按鍵等,以下詳細介紹其工作原理、應用場景及電路特點:一、機械按鍵&#xf…

試用SAP BTP 06:AI服務-Data Attribute Recommendation

創建實例 方法一:BTP主控室-子賬戶-服務市場 輸入實例配置信息,下一步 不用參數,下一步 審核實例,點擊創建 實例創建完成后,創建服務鍵值 輸入鍵值名稱,點擊 創建 方法二(建議)&…

訓詁學中的“形音義互求”對NLP、知識圖譜、注意力機制的啟示

一、訓詁學與現代人工智能結合的學術價值與技術潛力1. ??訓詁學的核心優勢與AI語義分析的契合點??訓詁學作為中國傳統學術中研究古代文獻語義的核心學科,其方法論和理論框架對自然語言處理(NLP)的深層語義分析具有深刻的啟發性和技術補充…

http基礎一

1. HTTP是什么? HTTP(超文本傳輸協議,HyperText Transfer Protocol)是一種用于從萬維網服務器傳輸超文本到本地瀏覽器的協議。它是無狀態的客戶端-服務器協議,通常在Web瀏覽器和Web服務器之間用于傳輸網頁、圖片、視頻…

西門子 S7-1500 系列 PLC CPU 選型全指南:從類型到實戰

在西門子 S7-1500 系列 PLC 的系統構建中,CPU 作為核心控制單元,其選型直接決定了自動化系統的性能、功能擴展性和適用場景。本文將系統解析 S7-1500 系列 CPU 的類型劃分、核心參數、典型型號功能及選型流程,助你精準匹配工業控制需求。一、…

PaddleOCR 與 PaddleX 調試

PaddleOCR 與 PaddleX 調試1.安裝1.1 環境準備1.2用Conda創建虛擬環境2.測試2.1發票測試2.2 手寫漢字識別3.PaddleOCR 與 PaddleX 對比3.1 基于 PaddleX 部署 OCR 服務1.安裝 PP OCR 文檔 1.1 環境準備 根據自己操作系統按網上指導安裝 ccache ccache --version是否已安裝 …

imx6ull-系統移植篇11——U-Boot 移植(下)

目錄 前言 移植過程 添加開發板默認配置文件 添加開發板對應的頭文件 添加開發板對應的板級文件夾 修改Makefile 文件 修改imximage.cfg 文件 修改Kconfig 文件 修改MAINTAINERS 文件 修改 U-Boot 圖形界面配置文件 編譯 uboot LCD 驅動修改 修改源文件 修改頭文…

30天打牢數模基礎-模擬退火算法講解

二、完整Python代碼 import random import mathdef rastrigin(x, y):"""二維Rastrigin函數(目標函數,需最小化)參數:x: 自變量xy: 自變量y返回:函數值f(x,y)"""return 20 x**2 y**2 …

論文閱讀 - FastInst

文章目錄1 概述2 模型說明2.1 總體架構2.2 輕量pixel decoder2.3 實例激活引導的Query2.4 雙路徑更新策略2.5 GT掩碼引導學習2.6 損失函數3 效果1 概述 FastInst是一種基于query的實時實例分割方法,它能以32.5FPS的實時速度在COCO測試集上達到40.5的AP。在實例分割…

Elasticsearch 9.x 高可用集群部署教程(3 主節點 + 3 數據節點)

Elasticsearch 9.x 高可用集群部署教程(3 主節點 + 3 數據節點) 1. 集群架構規劃 生產環境中的 Elasticsearch 集群需要高可用性和容錯能力。以下是基于 3 主節點 + 3 數據節點的架構規劃: 節點分布: 主節點(Master Nodes):3 臺(master-node-1, master-node-2, maste…

Unity_通過鼠標點擊屏幕移動屏幕里的一個對象

文章目錄一、獲取到點擊物體的Tansform(摁下鼠標左鍵的瞬間)二、移動點擊的物體(摁著鼠標左鍵不放)三、松開左鍵清理被移動對象屬性總結注:本文章只是學習總結的筆記,視頻鏈接 一、獲取到點擊物體的Tansfor…

UDP中的單播,多播,廣播(代碼實現)

文章目錄1. UDP 單播(Unicast)示例2. UDP 廣播(Broadcast)示例3. UDP 多播(Multicast)示例3.1 多播發送方示例3.2 多播接收方示例總結1. UDP 單播(Unicast)示例 發送方向指定單個目…

神經網絡:卷積層

神經網絡 卷積操作 例子: 輸入:二維圖像 [1,2,0,3,1] [0,1,2,3,1] [1,2,1,0,0] [5,2,3,1,1] [2,1,0,1,1] 卷積核: [1,2,1] [0,1,0] [2,1,0] 然后需要將輸入圖像和卷積核轉化為4維張量 為什么轉為4維張量?因為卷積操作需要輸入圖像…

2.4 組件間通信Props(父傳子)

父組件 在父組件模板上的子組件上加上屬性值&#xff0c;屬性值就是想要傳遞給子組件的信息。 例如&#xff1a; <template> <div class"Big-box"><testBox :personList"p"></testBox> </div> </template>子組件 子組…

從零開始學習 Redux:React Native 項目中的狀態管理

Redux 是一個用于 JavaScript 應用程序的狀態管理庫&#xff0c;通常與 React 或 React Native 配合使用&#xff0c;幫助管理應用的狀態和數據流。其核心原理是通過集中式的“單一數據源”來管理應用狀態&#xff0c;避免組件之間的“層層傳遞”狀態和副作用。 Redux 的原理單…

[特殊字符] CentOS 7 離線安裝 MySQL 5.7 實驗

&#x1f427; CentOS 7 離線安裝 MySQL 5.7 實驗 針對企業無互聯網環境的系統&#xff0c;設計了如何在 CentOS 7 系統中&#xff0c;使用一臺可以聯網的主機&#xff08;NodeA&#xff09;為另一臺無法聯網的主機&#xff08;NodeB&#xff09;安裝 MySQL 5.7 數據庫及其依賴…