当前位置: 首页 > news >正文

爬虫逆向之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.lryc.cn/news/593062.html

相关文章:

  • 电商商品综合排序:从需求分析到实时计算的全方位指南
  • 【RK3576】【Android14】Android平台构建
  • Kotlin main函数
  • TCP 和 UDP 在创建套接字(Socket)时的区别
  • 深入解析文件操作(上)- 二进制文件和文本文件,流的概念,文件的打开和关闭
  • Error:HTTP Status 405 - HTTP method POST is not supported by this URL
  • ENSP路由综合实验 + 思科(cisco)/华为(ensp)链路聚合实验
  • 如何理解华为横向虚拟化CSS+iStack
  • 历史数据分析——国药现代
  • Datawhale AI数据分析 作业
  • 字节跳动开源Seed-X 7B多语言翻译模型:28语种全覆盖,性能超越GPT-4、Gemini-2.5与Claude-3.5
  • [Python] -实用技巧10- 时间处理:datetime 和 time 模块入门
  • Java脚本API参数传递机制详解
  • 内容产品生态全解析:从形态演变到用户角色的深度洞察
  • 小架构step系列19:请求和响应
  • 2025年医疗人工智能发展现状
  • 张量交换维度(转置),其实是交换了元素的排列顺序
  • 最新版vscode 连接ubuntu 18.04 保姆级教程
  • 什么是 Git 的补丁 patch?如何在 Git 中创建和应用补丁?
  • 8. 如何减少回流重绘
  • CAN通信协议入门
  • FPGA自学——二选一多路选择器
  • 【图像处理基石】什么是小波变换?
  • 【专题一】双指针
  • 《Origin画百图》之多分类矩阵散点图
  • 音频3A处理简介之ANS(自动噪声抑制)
  • 地级市-城市创业活力数据(1971-2024年)-实证数据
  • 【音视频协议篇】RTSP系列
  • Letter Combination of a Phone Number
  • 【Bluedroid】btif_av_sink_execute_service之服务器启用源码流程解析