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

某行动态cookie反爬虫分析

某行动态cookie反爬虫分析


1. 预览

  • 反爬网址(base64): aHR0cDovL3d3dy5wYmMuZ292LmNu

  • 反爬截图:

    • 需要先加载运行js代码,可能是对环境进行检测,反调试之类的

    image-20230730194904202

    • 无限debugger

      image-20230730200545134

  • 处理办法

    • 网上大部分人说的都是添加cookie来解决。
      • 那个noscript标签仅仅是用于提示用户的,在不支持js的浏览器展示。
      • 本网站是动态ck,每一次的cookie都是上一次成功请求所返回的,但是python模拟请求时,第一次请求就是上图所示的页面,于是第一次成功的请求就是解决该问题的关键,
        • 1.你可以使用上一次浏览器成功请求返回的ck添加到python里发起请求,当然这比较笨拙,哈哈
        • 2.使用python完成第一次成功的请求
    • 当然,我们选择使用方法2来实现呀,优雅一点嘛

2.调试

  • 无限debugger怎么去掉?
    • 右键,不在这里暂停,是可以,但有时得小心,不暂停了出现无限循环带来的卡顿
    • 这里就简单的使用不在这暂停

3.扣代码环节

  • 1.扣逻辑,扣需要的代码

    image-20230730202532291从上图可以看出,第一次请求返回了上面的js代码和session_id, wzws_cid,自执行js代码里有逻辑写了,发起第二个验证请求,验证成功的话,返回302状态码,返回新的wzws_cid,然后带着正确的wzws_cidsessionid等参数进行跳转主页,才能成功请求。

    • 我们看一下,第一次返回的js代码:

    image-20230730203359023

    • 这些个在浏览器调试就会发现都是字符串加密之类的,而且整个代码进行了ob混淆,为了便于调试,使用反混淆工具,反混淆下:

    image-20230730204008534 - 格式前的j: -
    js `function u(k){function gR(v,A){return gE(A- -'0x92',v);}var P={'oQHKx':function(C,x,d){return A['cirRP'](C,x,d);},'LJXui':A[gD('93LV',-'0x127')],'JITOI':A['FJQMp'],'ktFbX':function(C,d){function gm(v,A){return Z(A- -'0x2ef',v);}return A[gm('0x40',-'0x3d')](C,d);},'nzZBi':A[gD('kdha',-'0xa7')]};function gD(v,A){return gY(A- -'0x5c',v);}function gO(v,A){return gE(v- -'0x3b6',A);}function gF(v,A){return ge(v,A-'0x48f');}if(A[gR('0x561','0x5b1')](A[gD('DT[N',-'0xab')],A[gF('M1Bv','0x635')])){var x=P['oQHKx'](P,C,x);P['oQHKx'](d,N,x);}else{if(A[gR('0x4d8','0x535')](typeof k,A[gR('0x4c5','0x540')]))return function(x){}['const'+gR('0x5d7','0x579')+'r'](A[gR('0x4e4','0x4d4')])[gR('0x539','0x4ee')](A[gF('Ux5v','0x657')]);else{if(A[gO('0x27e','0x218')](A[gF('UbQE','0x621')],A[gF('%4Ja','0x6ad')])){var d=C?function(){function gL(v,A){return gD(A,v-'0x69f');}if(d){var Y=J[gL('0x523','BpO(')](n,arguments);return z=null,Y;}}:function(){};return i=[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eoPTlycW-1690770056227)(A[gF('Ms1O','0x5be')]]('',A['yUkFe'](k,k))[A[gR('0x582','0x5bc')]],-0x1cbf+0x33*-0x8b+-0x1*-0x3871)||A[gR('0x590','0x509')](A[gD('xrrg',-'0xe2')](k,0x2189+-0x7*0x4dd+-0x4b*-0x2),0x42c*-0x8+-0x3*-0x66+0x202e))(function(){return[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JEJ40kwJ-1690770059632)(A[gO('0x2c3','0x2af')]]],A[gR('0x556','0x51d')]))[gD('0sv]',-'0x6c')](A['bHBdS']));else{if(A[gR('0x585','0x500')](A[gR('0x4b1','0x50e')],A['zesRv'])){var N=A['RZobL'][gF('z6h!','0x6d4')]('|'),K=0x9a1+0x53*0x55+-0x2530;while([外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-slIIctLK-1690770059633)(d,N)];continue;case'4':for(var z=0x31f+-0x2e9+-0x36;A['HWTiM'](z,J);z++){i[z]=n['charC'+gF('xrrg','0x5b5')](z);}continue;case'5':if(!C)return x;continue;}break;}}else(function(){function gl(v,A){return gO(A-'0x1cf',v);}function gr(v,A){return gO(v-'0x3e8',A);}function gG(v,A){return gF(A,v- -'0x5bd');}function gT(v,A){return gD(v,A- -'0x80');}return P[gT('Ux5v',-'0x1e4')](P[gr('0x6b8','0x645')],P[gr('0x6b8','0x6ee')])?[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9KlB40Zu-1690770056229)(P['LJXui'])]['apply'](P[gG('0x12','*Ig5')]);}['const'+gR('0x51a','0x579')+'r'](A[gR('0x561','0x59a')](A[gR('0x67a','0x5e7')],A['HINSR']))[gO('0x1ca','0x14d')](A[gF('XuiA','0x5b1')]));}}}A[gO('0x1e8','0x238')](u,++k);}}` ``

    • 格式后的j:

    image-20230730212936815 - 从上图中可以看出:

    • 1.进行了正则校验,V表达式,我就纳闷了,格不格式化的会返回true啊,有毒,应该用+来检测至少一个空格嘛,真是的。 image-20230730205538022 - 第二个正则,p表达式,也是一样的,格式化前后我的都是++k,能能匹配到,这里他应该是想校验是否有++ k,那么也要用+号,我真服了,垃圾代码。

    image-20230730205348294

    • 所以一定会进入else:
      image-20230730213033609
    • 最终进入:
      image-20230730213221828
    • ""+0/0='NaN',进入虚拟机中,执行debugger,然后继续u(++k),不断地自己调用自己,无限debugger;
    • 总结:可以看出,无论你是否格式化代码,我都会给你进入无限debugger,而debugger仅仅在打开F12时,才会起作用!也就是说和你格式化代码没有屁毛钱关系,只要打开F12就会无限debugger,大家也看出来了,两条分支,一条进入无限while循环,内存爆破,一条无限debugger,所以有意思的来了,如果你按照自己的先验主义,把下面的test校验 的感叹号删掉,你将收获内存被爆破,哈哈,有点道高一筹魔高一丈的感觉了
    • image-20230730214629041
  • 分析完了正则校验和debugger,我们书归正传,看看第二个请求里面的加密参数怎么来的,这里最简单的办法就是,直接使用它的js文件即可,没必要自己去扣了,毕竟解混淆之后的代码实在是太清晰了,如下图所示,生成了所需要的地址。

  • image-20230730214942380

  • 对该地址发起请求后,校验成功后,拿着返回的wzws_cidsessionid即可正确进行数据获取了

3.验证

70056234)]

  • 对该地址发起请求后,校验成功后,拿着返回的wzws_cidsessionid即可正确进行数据获取了

3.验证

image-20230730215644619
交流QQ群 529528142

相关文章:

某行动态cookie反爬虫分析

某行动态cookie反爬虫分析 1. 预览 反爬网址(base64): aHR0cDovL3d3dy5wYmMuZ292LmNu 反爬截图: 需要先加载运行js代码,可能是对环境进行检测,反调试之类的 无限debugger 处理办法 网上大部分人说的都是添加cookie来解决。 那个noscript…...

恒运资本:A股、港股全线爆发,沪指突破3300点,恒指重返2万点上方

7月31日,两市股指高开高走,沪指在金融、地产、酿酒等权重板块的带动下一举突破3300点。截至发稿,沪指、深成指、创业板指涨幅均超1%,上证50指数涨近2%。Wind数据显现,北向资金净买入超25亿元。 职业方面,券…...

Rust vs Go:常用语法对比(十二)

题图来自 Rust vs Go in 2023[1] 221. Remove all non-digits characters Create string t from string s, keeping only digit characters 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. 删除所有非数字字符 package mainimport ( "fmt" "regexp")func main() { s : hei…...

jmeter接口测试、压力测试简单实现

jmeter测试的组件执行顺序: 测试计划—>线程组—>配置元件—>前置处理器—>定时器—>逻辑控制器—>取样器—>后置处理器—>断言—>监听器 组件的作用范围: 同级组件同级组件下的子组件父组件 目前市面上的三类接口 1、基…...

PysparkNote006---pycharm加载spark环境

pycharm配置pyspark环境,本地执行pyspark代码 spark安装、添加环境变量不提了 File-Settings-Project-Project Structure-add content root添加如下两个路径 D:\code\spark\python\lib\py4j-0.10.7-src.zipD:\code\spark\python\lib\pyspark.zip 2023-07-26 阴 于…...

19套项目实战系列--Spring Cloud Spring Boot(整套源码)

整套大型项目源码,需要的回复私信:19 ┃ ┣━01.19套项目实战系列 ┃ ┃ ┣━第04套【项目实战】Spring Cloud分布式微服务实战,打造大型自媒体3大业务平台 分布式前后端分离项目分层聚合 养成应对复杂业务的综合技术能力 ┃ ┃ ┃ ┣━1-…...

TCP/IP协议详解(二)

目录内容 TCP协议的可靠性 TCP的三次握手 TCP的四次挥手 C#中,TCP/IP建立 三次握手和四次挥手常见面试题 在上一篇文章中讲解了TCP/IP的由来以及报文格式,详情请见上一篇文章,现在接着来讲讲TCP/IP的可靠性以及通过代码的实现。 在TCP首部的…...

Linux6.2 ansible 自动化运维工具(机器管理工具)

文章目录 计算机系统5G云计算第一章 LINUX ansible 自动化运维工具(机器管理工具)一、概述二、ansible 环境安装部署三、ansible 命令行模块1.command 模块2.shell 模块3.cron 模块4.user 模块5.group 模块6.copy 模块7.file 模块8.hostname 模块9.ping …...

前端面试题 —— React (二)

目录 一、React 组件中怎么做事件代理?它的原理是什么? 二、React.Component 和 React.PureComponent 的区别 三、Component, Element, Instance 之间有什么区别和联系? 四、React声明组件有哪几种方法,有什么不同&#xff1f…...

【分享帖】LCD的MCU接口和SPI接口详解

LCD(Liquid Crystal Display)液晶屏,作为电子产品的重要组成部分,是终端用户与电子产品交互的重要载体。现在市场上的LCD,按照尺寸、功能、接口、用途等分为很多种,本文主要介绍如下两种LCD物理接口&#x…...

【Java】使用@Expose注解和excludeFieldsWithoutExposeAnnotatGson()方法将toJson()过程的部分字段忽略

要在使用 Gson 的 toJson() 方法时忽略 List 中的某些字段,你可以使用 Gson 的 Expose 注解和 excludeFieldsWithoutExposeAnnotation() 方法。 首先,在 List 中的 Bean 类中,使用 Expose 注解标记你想要序列化的字段: public c…...

移动硬盘不显示怎么办?正确解决方式看这里!

移动硬盘为存储带来了很大的方便,在对数据存储时,可做到即插即用,且其体积小、容量大,且比较安全可靠。但在实际的使用中,也会出现各种问题。请看下面2个常见案例。 案例1:“各位朋友,我新买了一…...

MySQL 5.7.39 关于时间精度

前情提要 当EndTime的数据类型为datetime when the end_time’s dataType is datetime; entity.EndTime DateTime.MaxValue; context.Set<T>().Add(entity);当保存 ‘9999-12-31 23:59:59’ 这个值时,发生报错。 A crash has happended in the program when saving ‘…...

宝塔设置云服务器mysql端口转发,实现本地电脑访问云mysql

环境&#xff1a;centos系统使用宝塔面板 实现功能&#xff1a;宝塔设置云服务器mysql端口转发&#xff0c;实现本地电脑访问mysql 1.安装mysql、PHP-7.4.33、phpMyAdmin 5.0 软件商店》搜索 mysql安装即可 软件商店》搜索 PHP安装7.4.33即可&#xff08;只需要勾选快速安装&…...

centos下安装ftp-读取目录列表失败-

1.下载安装ftp服务器端和客户端 #1.安装yum -y install vsftpdyum -y install ftp #2.修改配置文件vim /etc/vsftpd.conflocal_enablesYESwrite_enableYESanonymous_enableYESanon_mkdir_write_enableYES //允许匿名用户在FTP上创建目录anon_upload_enableYES //允许匿名用户…...

0101sub-process /usr/bin/dpkg returned an error code-dpkg-linux问题集

kali linux有段时间没用了&#xff0c;现在有点时间想着继续学习下网络安全&#xff0c;那就升级更新下。 apt-get update && apt-get upgrade等待一段时间后&#xff0c;下载完毕执行安装和更新&#xff0c;更新的过程中报错退出了 问题1 更新kali-themes 需要kali-t…...

流控平台Sentinel搭建和接入教程

流量控制和限流是大型系统必不可少的组成部分&#xff0c;Sentinel是Alibaba提供的一款特别好用的专业工具&#xff0c;属于那种看起来很牛&#xff0c;用起来也很牛的工具&#xff0c;下面记录一下接入的过程。 一&#xff0c;搭建平台 1&#xff0c;下载jar包 地址&#x…...

使用 docker 一键部署 MongoDB

目录 1. 前期准备 2. 导入镜像 3. 部署MongoDB脚本 4. 配置模板文件 5. 部署MongoDB 6. 部署后配置 7. 基本维护 1. 前期准备 新部署前可以从仓库&#xff08;repository&#xff09;下载 MongoDB 镜像&#xff0c;或者从已有部署中的镜像生成文件&#xff1a; # 查看…...

【深度学习】Inst-Inpaint: Instructing to Remove Objects with Diffusion Models,指令式图像修复

论文&#xff1a;https://arxiv.org/abs/2304.03246 code:http://instinpaint.abyildirim.com/ 文章目录 AbstractIntroductionRelated WorkDataset GenerationMethodPS Abstract 图像修复任务是指从图像中擦除不需要的像素&#xff0c;并以语义一致且逼真的方式填充它们。传统…...

创建维基WIKI百科和建立百度百科有何不同?

很多企业有出口业务&#xff0c;想在互联网上开展全球性网络营销&#xff0c;维基百科往往被认为是开展海外营销的第一站。其作用相当于开展国内网络营销的百度百科&#xff0c;经常有些企业给小马识途营销顾问提供的词条内容就是百度百科的内容&#xff0c;可事实上两个平台的…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...