某行动态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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/20230.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

友盟+、GrowingIO和神策数据 对比

对于市面上的数据平台,先简单归个类。 1、移动统计平台,如友盟、talkingdata、百度云统计、腾讯移动应用统计等。 相同点是数据源都是埋点数据。友盟有免费版本。 前端效果:展现形式上为BI报表。 常用操作是页面内点击和筛选。 使用要求…

could not import go.etcd.io/etcd/clientv3-go

问题描述 今天在封装etcd的时候导包报错: could not import go.etcd.io/etcd/clientv3 (no required module provides package "go.etcd.io/etcd/clientv3") 问题解决: get:确保下载了client包 go get go.etcd.io/etcd/client tidy go mod tidy 本文由 mdnice 多平台…

yolov8-制作数据集,数据集格式转换(yolo格式-voc格式)附完整代码

yolo训练时可使用的数据集格式为yolo格式以及voc格式, voc格式的数据集在训练时需要先转换为yolo格式,然后根据自己的数据集的位置更改yaml配置文件的文件路径即可。基于目前对Yolo系列训练模型的讲解已经很全面,所以本文主要讲解yolo数据集与…

C#中 使用yield return 优化大数组或集合的访问

概要 我们在开发过程中,经常需要在一个很大的数组或集合中搜索元素,以满足业务需求。 本文主要介绍通过使用yield return的方式,避免将大量数据全部加载进入内存,再进行处理。从而提高程序的性能。 设计和实现 基本业务场景&a…

docker安装nginx并配置SSL

1、拉取镜像 docker pull nginx2、启动nginx容器,复制一份默认配置文件出来 // 以nginx镜像为基础镜像创建一个名为nginx01的容器 docker run -d -p 80:80 --name nginx01 nginx创建成功后会看到nginx的欢迎页面 3、挂载nginx目录 拷贝nginx的配置信息到主机目录…

Nginx面试题

使用过nginx,它在业务里承担什么角色,为什么要用? 从单机架构到集群架构的转变,需要一个实现负载均衡和反向代理功能的软件,加上nginx可以非常轻松的解决掉很多前端常见的需求,比如gzip压缩,跨…

C语言假期作业 DAY 12

一、选择题 1、请阅读以下程序&#xff0c;其运行结果是&#xff08; &#xff09; int main() { char cA; if(0<c<9) printf("YES"); else printf("NO"); return 0; } A: YES B: NO C: YESNO D: 语句错误 答案解析 正确答案&#xff1a; A 0<c&l…

【图论】强连通分量

一.定义 强连通分量&#xff08;Strongly Connected Components&#xff0c;简称SCC&#xff09;是图论中的一个概念&#xff0c;用于描述有向图中的一组顶点&#xff0c;其中任意两个顶点之间都存在一条有向路径。换句话说&#xff0c;对于图中的任意两个顶点u和v&#xff0c;…

Python爬虫—破解JS加密的Cookie

前言 在进行网站数据爬取时&#xff0c;很多网站会使用JS加密来保护Cookie的安全性&#xff0c;而为了防止被网站反爬虫机制识别出来&#xff0c;我们通常需要使用代理IP来隐藏我们的真实IP地址。 本篇文章将介绍如何结合代理IP破解JS加密的Cookie&#xff0c;主要包括以下几个…

el-select 分页加载

el-select 分页加载 el-select 分页懒加载监听的指令——loadMore指令的使用 el-select 分页懒加载 针对数据量大的选择器&#xff0c;需要分页从后端接口获取数据&#xff0c;前端监听选择器下拉框的滚动事件&#xff0c;当往下滚动至底部一定位置时&#xff0c;调接口 监听…

银河麒麟V10 QtCreator安装配置说明(断网离线)

文章目录 1.安装要求:2.安装Qt1.安装要求: 拥有Qt软件安装包qt5.12-arm链接:https://pan.baidu.com/s/1FJerT6SckfjABxAn60rsrA?pwd=mfi6 提取码:mfi6 2.安装Qt 1)拷贝Qt软件包qt5.12-arm至系统/home/kylin/桌面 2)安装Qt软件包 cd /home/kylin/qt5.12-arm/桌面 su…

小研究 - 基于解析树的 Java Web 灰盒模糊测试(一)

由于 Java Web 应用业务场景复杂, 且对输入数据的结构有效性要求较高, 现有的测试方法和工具在测试Java Web 时存在测试用例的有效率较低的问题. 为了解决上述问题, 本文提出了基于解析树的 Java Web 应用灰盒模糊测试方法. 首先为 Java Web 应用程序的输入数据包进行语法建模创…

Flutter:gsy_flutter_demo项目学习——布局切换动画、列表滑动监听、列表滑动到指定位置、高斯模糊

前言 gsy_flutter_demo是一个关于各种小案例和小问题的方案解决。项目是由flutter大佬恋猫de小郭维护的 项目地址&#xff1a;https://github.com/CarGuo/gsy_flutter_demo 感兴趣的可以看一下大佬的文章&#xff1a;Flutter完整开发实战详解系列&#xff0c;GSY Flutter 系…

[SQL挖掘机] - 窗口函数 - lag

介绍: lag() 是一种常用的窗口函数&#xff0c;它用于获取某一行之前的行的值。它可以用来在结果集中的当前行之前访问指定列的值。 用法: lag() 函数的语法如下&#xff1a; lag(列名, 偏移量, 默认值) over (partition by 列名1, 列名2, ... order by 列名 [asc|desc], .…

非凸科技受邀参加中科大线上量化分享

7月30日&#xff0c;非凸科技受邀参加由中国科学技术大学管理学院学生会、超级量化共同组织的“打开量化私募的黑箱”线上活动&#xff0c;分享量化前沿以及求职经验&#xff0c;助力同学们拿到心仪的offer。 活动上&#xff0c;非凸科技量化策略负责人陆一洲从多个角度分享了如…

485modbus转profinet网关连三菱变频器modbus通讯触摸屏监控

本案例介绍了如何通过485modbus转profinet网关连接威纶通与三菱变频器进行modbus通讯。485modbus转profinet网关提供了可靠的连接方式&#xff0c;使用户能够轻松地将不同类型的设备连接到同一网络中。通过使用这种网关&#xff0c;用户可以有效地管理和监控设备&#xff0c;从…

【华秋干货铺】PCB布线技巧升级:高速信号篇

如下表所示&#xff0c;接口信号能工作在8Gbps及以上速率&#xff0c;由于速率很高&#xff0c;PCB布线设计要求会更严格&#xff0c;在前几篇关于PCB布线内容的基础上&#xff0c;还需要根据本篇内容的要求来进行PCB布线设计。 高速信号布线时尽量少打孔换层&#xff0c;换层优…

hash 模式和 history 模式的实现原理

hash 模式和 history 模式的实现原理&#xff1a; #后面的 hash 值的变化不会导致浏览器向服务器发出请求&#xff0c;浏览器不发出请求&#xff0c;就不会刷新页面。通过监听 hashchange 事件的变化可以知道 hash 值发生了哪些变化&#xff0c;然后根据 hash 值的变化来实现更…

vue 3.0 + element-ui MessageBox弹出框的 让文本框显示文字 placeholder

inputPlaceholder:请填写理由, 方法实现如下: this.$prompt(, 是否确认&#xff1f;, { confirmButtonText: 确定, cancelButtonText: 取消, inputPlaceholder:请填写理由, }).then(({ value }) > { if(value null || value ""){ Message({message: 请填…

卷积神经网络【图解CNN】

文章目录 1.卷积运算2.池化3.全连接层 卷积神经网络可以看作一个函数或者黑箱&#xff0c;输入就是图片的像素阵列&#xff0c;输出就是这个图片是什么&#xff1f; 图片是X&#xff0c;那么就输出‘x’&#xff0c;图片是‘O’,那么就输出O&#xff1b; 在计算机眼中&#xff…