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

Python爬虫猿人学逆向系列——第六题

题目:采集全部5页的彩票数据,计算全部中奖的总金额(包含一、二、三等奖)

在这里插入图片描述

地址:https://match.yuanrenxue.cn/match/6

本题比较简单,只是容易踩坑。话不多说请看分析。

在这里插入图片描述

两个参数,一个m一个f,与cookie无关,但是这里会遇到第一个坑,在响应数据中。

在这里插入图片描述

可以发现只有三等奖的金额,并没有一等奖和二等奖的金额。所以我们需要找到三者的关系。直接来到source中查看。

在这里插入图片描述

直接搜索value,一共17个结果,一个一个观察。在第12个时,其相关的内容。

在这里插入图片描述

这里意思是总金额为三等奖的24倍,具体是不是这样呢,我们来验证一下。

在这里插入图片描述

还真是,那么就是说总中奖金额就是总三等奖金额的24倍。第一个坑解决。接下来开始逆向参数,刚刚已经知道了需要的参数就两个,m和q,传书的是parmas参数,所以我们直接来跟栈。

在这里插入图片描述

跟到请求时的栈,代码非常简单,如下:

在这里插入图片描述

找到之后直接打上断点,先看m的值。

在这里插入图片描述

这里就是入口函数,可以看到当window.o的值大于等于6的时候就会重新加载页面,那估计这个window.o可能是会增加的,并且有可能和页数有关。

在这里插入图片描述

现在它的值为1,访问下一页看看。

在这里插入图片描述

果然,变成2了,那也就是说我们在本地运行的时候他不可能大于等于6,因为我们最多就循环五次爬个五页,根本不说手抖戳它这么多下。所以这里的代码我们就可以稍微简化一下不要r函数了,直接一步到位到z函数。

在这里插入图片描述

z函数其实熟悉js的话一看就知道这就是webpack的调用的方式。翻到最上方

在这里插入图片描述

果然,就是一个webpack,那还不简单,模块加载器如此的标准,我都不好意思去删删改改了,直接全部copy。接下来就调用z函数看看会出现什么样的问题了。

在这里插入图片描述

window没有定义,那我们就给他定义一个window。在最开头加上一个var window = global;然后再执行,就会发现一样的错误,这个时候大家就会发现了,报的是window.o = 1这个位置的window没有定义。那问题来了,大家ctrl+f搜索看看,这代码里面有没有window.o呢?答案是没有。

所以,window.o在肯定是在代码中,至于为什么搜不到,那当然就是被混淆了,所以我们就来看看混淆的代码,就在最开头的位置,一个很明显的AA混淆,将它还原一下,这种混淆由专门的工具还原,手动还原的话就直接去掉最后的括号然后执行就可以了。

在这里插入图片描述

去掉最后的括号后可以看到这混淆的代码就是一个匿名函数,这个函数的逻辑就是给window.o进行赋值,值为1,所以我们将这段混淆代码替换成window.o = 1就可以了。

在这里插入图片描述

接下来就是下一个错误了,关键词ASN1,这个相当于也是考了一下对js的熟悉程度,就看大家平时经验的积累了,ASN1就是一个js的解码器,它能够解码任何有效的base64的编码或者十六进制编码的DER或BER结构,这个玩意儿在浏览器中一般都是存在的,但问题是nodejs不存在啊。所以,既然这个问题出现了,那肯定就是代码中出现了nodejs无法解码的存在了,那我们就来慢慢找一下这些代码都在什么地方。一直翻一直翻。

在这里插入图片描述

找到了,1161行,大家和我的误差应该就几行的误差,自己找很废时间,反正我眼睛看瞎了已经。这很明显又是一段混淆代码,jsfuck的混淆,老规矩,还原一下。直接全部复制到console中执行一下看看结果是什么。

在这里插入图片描述

就是一个false…那就直接替换了吧。再执行代码,会发现还是这个错误。

在这里插入图片描述

那证明这里面可能还有,已经找到过一次有经验了,知道了是jsfuck混淆,那我们就搜一下特殊符号![

在这里插入图片描述

果然,又来了。直接还原替换

在这里插入图片描述

啥也不是,那就直接删掉。然后再执行,还是会报了这个错误,但是这个时候代码中已经没有混淆代码了,那问题来了,什么原因导致的呢,定位到报错的2559行,看下能不能删除这个逻辑?

在这里插入图片描述

好吧,根本删不掉,关联度太高。那问题来了,从这里来看的话ASN1是在本地赋值进去的,那么就是说就算本地nodejs本身没有的话这里应该也赋值进去了,为啥还会报这样的错呢?那就是说window.ASN1压根没有去赋值,要么就是直接没有window了。那就有点意思了,我们来搜索一下window。

在这里插入图片描述

一共是14个,但是…webpack里面那个window是来捣乱的吧。前面先用了window.o要我们先赋值了,你自执行里面又要置空?这不闹呢嘛?直接删掉。

在这里插入图片描述

完事,直接出结果。这里其实就涉及的是浏览器的环境和nodejs环境的不同,在浏览器中window是不能被重新赋值的,所以webpack中的这个置空并没有任何意义,但是在nodejs中就不一样了,window可以被重新赋值,因此就直接导致了上方我们看到的错误信息了。

搞定之后我们来对比一下浏览器中的值和本地执行的结果是否能够匹配上了。将浏览器中传入的参数复制下来运行一下(刷新了下页面重新获取的两个参数值)。

在这里插入图片描述

在这里插入图片描述

两个结果完全一致,那么到这里参数m就完成了。

接下来就是q参数,q参数从逻辑来看

在这里插入图片描述

就是其拼接出来的格式就是1-1692867522000|这样的,但是这里需要注意,由于我们会话并没有保持,相当于每一次都是一个新的请求,同时浏览器中window.o能够每次执行js代码的时候自增,但本地可不会,所以我们就按照每次都是全新的请求来实现参数q,如果是浏览器中那样的格式的话最终会将前面的值拼接起来,如下:

在这里插入图片描述

但我们本地的话就不能再拼接了,否则是会触发这个页面的风控的,接下来就给大家看一下这两种情况在本地的时候的结果,一个能够成功获取值,一个则触发风控。先来写一个js代码的入口函数。

function run(o) {t = Date.parse(new Date())res = z(t, o);return {'m': res,'t': t,}
}

第一种情况,触发风控。

在这里插入图片描述

这就是按照浏览器模式来实现q值时的结果,所以直接全新请求即可,不用拼接前面的值。

在这里插入图片描述

最后将所有的value加起来再乘以24就获取到正确答案了,答案为6883344
在这里插入图片描述

完整代码请转https://gitee.com/shuailiuquan/spider-code/tree/master

相关文章:

Python爬虫猿人学逆向系列——第六题

题目:采集全部5页的彩票数据,计算全部中奖的总金额(包含一、二、三等奖) 地址:https://match.yuanrenxue.cn/match/6 本题比较简单,只是容易踩坑。话不多说请看分析。 两个参数,一个m一个f&…...

idea使用tomcat

1. 建立javaweb项目 2. /WEB-INF/web.xml项目配置文件 如果javaweb项目 先建立项目,然后在项目上添加框架支持,选择javaee 3. 项目结构 4.执行测试:...

搭建Tomcat HTTP服务:在Windows上实现外网远程访问的详细配置与设置教程

文章目录 前言1.本地Tomcat网页搭建1.1 Tomcat安装1.2 配置环境变量1.3 环境配置1.4 Tomcat运行测试1.5 Cpolar安装和注册 2.本地网页发布2.1.Cpolar云端设置2.2 Cpolar本地设置 3.公网访问测试4.结语 前言 Tomcat作为一个轻量级的服务器,不仅名字很有趣&#xff0…...

Java学习笔记——继承(包括this,super的使用总结)

继承: 使用情景:当类与类之间,存在相同(共性)的内容,并满足子类是父类的一种,就可以考虑使用继承,来优化代码 Java中提供一个关键字extends,用这个关键字,我…...

Android 获取应用sha1和sha256

在 Android 应用开发中,SHA-1(Secure Hash Algorithm 1)值是一种哈希算法,常用于生成应用的数字签名。这个数字签名用于验证应用的身份,并确保应用在发布到设备上时没有被篡改。 以下是生成 Android 应用的 SHA-1 值的…...

c# 方法参数修饰符(out、ref、in)的区别

在C#中,ref、out和in是三种方法参数修饰符,它们在传递参数的方式和作用上有所不同。 ref修饰符: 传递方式:使用ref修饰符的参数可以是输入输出参数,即在方法调用前后都可以对其进行修改。 作用:通过ref修…...

shell 编写一个带有进度条的程序安装脚本

需求 使用 shell 写一个 软件安装脚本,带有进度条 示例 #!/bin/bash# 模拟软件安装的步骤列表 steps("解压文件" "安装依赖" "配置设置" "复制文件" "")# 计算总步骤数 total_steps${#steps[]}# 安装进度的初…...

服务器数据恢复-AIX PV完整镜像方法以及误删LV的数据恢复方案

AIX中的PV相当于物理磁盘(针对于存储来说,PV相当于存储映射过来的卷;针对操作系统来说,PV相当于物理硬盘),若干个PV组成一个VG,AIX可以将容量不同的存储空间组合起来统一分配。AIX把同一个VG的所…...

首席执行官Adam Selipsky解读“亚马逊云科技的技术产品差异化”

迄今为止,亚马逊云科技已经参与了21世纪几乎所有的大型计算变革,亚马逊云科技是一个很传奇的故事,它始于大约20年前的一项实验,当时亚马逊试图出售其过剩的服务器。人们确实对此表示怀疑。为什么在线书店试图销售云服务&#xff1…...

C++ Day3

目录 一、类 【1】类 【2】应用实例 练习: 【3】封装 二、this指针 【1】this指针的格式 【2】必须使用this指针的场合 三、类中的特殊成员函数 【1】构造函数 i)功能 ii)格式 iii)构造函数的调用时机 iv)…...

OpenEuler 安装mysql

下载安装包 建议直接使用在openEuler官方编译移植过的mysql-5.7.21系列软件包 参考:操作系统迁移实战之在openEuler上部署MySQL数据库 | 数据库迁移方案 | openEuler社区官网 MySQL 5.7.21 移植指南(openEuler 20.03 LTS SP1) | 数据库移植…...

[Docker] Windows 下基于WSL2 安装

Docker 必须部署在 Linux 内核的系统上。如果其他系统想部署 Docker 就必须安装一个虚拟 Linux 环境。 1. 开启虚拟化 进入系统BIOS(AMD 为 SVM;Intel 为 Intel-vt)改为启用(enable) 2. 开启WSL 系统设置->应用->程序和功能->…...

(未完成)【Spring专题】SringAOP底层原理解析——阶段三(AOP)

目录 前言前置知识代理范式SpringAOP的理解Spring动态代理的实现 课程内容一、动态代理的实现1.1 Cglib动态代理1.2 JDK动态代理1.3 ProxyFactory:Spring对两种代理的封装 二、AOP基础知识AOP基础概念回顾通知Advice的分类Advisor的理解 三、创建代理对象的方式3.1 …...

使用Nodejs创建简单的HTTP服务器,借助内网穿透工具实现公网访问的方法分享

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff0…...

使用 OpenTelemetry 构建可观测性 03 - 导出

上一个博文中,我提到如何使用 OpenTelemery 的特定语言 API 来收集遥测数据,包含手动和自动的埋点技术,这很重要!但是,收集遥测数据只是解决方案的第一步。 你需要把遥测数据路由转发到其他地方,同时添加额…...

Pyqt5打开电脑摄像头进行拍照

目录 1、设计UI界面 2、设计逻辑代码,建立连接显示窗口 3、结果 1、设计UI界面 将ui界面转为py文件后获得的逻辑代码为:(文件名为 Camera.py) # -*- coding: utf-8 -*-# Form implementation generated from reading ui file …...

Flowable 7.0.0.M2 版本功能

CMMN 支持批量迁移重复支持案例重新激活支持停止内务处理批处理Http 任务支持 HTTP HEAD and OPTIONS for the Http Tasks移除了 Spring Boot 启动器 flowable-spring-boot-starter-basic - 切换为 flowable-spring-boot-starter-process flowable-spring-boot-starter-rest-ap…...

【golang】关于指针的有限操作

传统意义上来说,指针是一个指向某个确切的内存地址的值。这个内存地址可以是任何数据或代码的起始地址。在Go语言中有几种东西可以代表"指针"。其中最贴切传统意义的当属uintptr类型的了。该类型实际上是一个数值类型,也是Go语言内建的数据类型…...

ProGuard + SpringBoot3 + JDK17

1、pom依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.…...

Kafka面试

文章内容转自: 华仔聊技术(Kafka 面试连环炮) 目录 一.初级 1.Kafka核心组件图 2.在 Kafka 中 Zookeeper 作用是什么? 3.生产者有哪些发消息的模式? 4.Kafka 如何合理设置分区数,越多越好吗? Kafka 如何合理设置分区数 分区设置越多越好吗? 5.如何保证 Kafka 中的…...

Amazon CloudFront 部署小指南(六)- Lambda@Edge 基础与诊断

内容简介 本文适用于希望使用 Amazon CloudFront LambdaEdge 提升 Amazon CloudFront 边缘计算能力的用户&#xff0c;旨在帮助您更好的进行 CloudFront LambdaEdge 的开发、调试、测试、部署等工作。 首先我们会对 CloudFront LambdaEdge 做个简单的介绍&#xff0c;然后分七个…...

centos7安装hadoop 单机版

1.解压 &#xff08;1&#xff09;将hadoop压缩包复制到/opt/software路径下 &#xff08;2&#xff09;解压hadoop到/opt/module目录下 [rootkb135 software]# tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/ &#xff08;3&#xff09;修改hadoop属主和属组 [rootkb135 m…...

村口的人家排放污水,污水浸染了整个村子,怎么办

从前有一个很不错的村子里&#xff0c;村子里有很多户人家&#xff0c;随着生活水平越来越好&#xff0c;房子也修起来了&#xff0c;柏油马路也宽敞了&#xff0c;大家进出村子&#xff0c;都要走那条马路&#xff0c;要不就出不去。 目录 1. 修厕所 2. 村口的日家 3. 告诉…...

算法leetcode|72. 编辑距离(rust重拳出击)

文章目录 72. 编辑距离&#xff1a;样例 1&#xff1a;样例 2&#xff1a;提示&#xff1a; 分析&#xff1a;题解&#xff1a;rust&#xff1a;二维数组&#xff08;易懂&#xff09;滚动数组&#xff08;更加优化的内存空间&#xff09; go&#xff1a;c&#xff1a;python&a…...

实训笔记8.21

8.21笔记 8.21笔记一、Hive数据仓库技术的基本概念和组成1.1 Hive的组成架构1.1.1 Hive的客户端&#xff08;1&#xff09;Hive的命令行客户端 hive命令&#xff08;2&#xff09;Hive的JDBC的客户端&#xff08;Java API&#xff09;hive的JDBC客户端又有多种使用方式 &#x…...

robust distortion-free watermarks for language models

本文是LLM系列文章&#xff0c;针对《robust distortion-free watermarks for language models》的翻译。 语言模的鲁棒无失真水印 摘要1 引言2 方法和理论分析3 实验结果4 讨论 摘要 我们提出了一种从自回归语言模型中在文本中植入水印的方法&#xff0c;该方法对扰动具有鲁…...

PTS性能测试工具-使用记录

因为PTS使用是要收费的&#xff0c;所以文中会有大量图片记录&#xff0c;为我自己以后工作中&#xff0c;可能会再次使用PTS做个参照&#xff0c;以免时间长&#xff0c;容易忘记~ 目录 一、创建场景 二、填写一个压测节点 1、填写节点基本信息 2、Body / Header填写 …...

【boost网络库从青铜到王者】第六篇:asio网络编程中的socket异步读(接收)写(发送)

文章目录 1、简介2、异步写 void AsyncWriteSomeToSocketErr(const std::string& buffer)3、异步写void AsyncWriteSomeToSocket(const std::string& buffer)4、异步写void AsyncSendToSocket(const std::string& buffer)5、异步读void AsyncReadSomeToSocket(cons…...

django sqlite3操作和manage.py功能介绍

参考链接&#xff1a;https://www.cnblogs.com/csd97/p/8432715.html manage.py 常用命令_python manage.py_追逐&梦想的博客-CSDN博客 python django操作sqlite3_django sqlite_浪子仙迹的博客-CSDN博客...

【SQL语句】SQL编写规范

简介 本文编写原因主要来于XC迁移过程中修改SQL语句时&#xff0c;发现大部分修改均源自于项目SQL编写不规范&#xff0c;以此文档做以总结。 注&#xff1a;此文档覆盖不甚全面&#xff0c;大体只围绕迁移遇到的修改而展开。 正文 1、【字段引号】 列名、表名如无特殊情况…...

长沙的网站制作公司/百度最新版app下载安装

绕过杀毒软件&#xff0c;有很多钟方法。此处介绍一种&#xff0c;编写python程序调用shellcode&#xff0c;并使用Pyinstaler将python程序编译为exe程序。 准备工作:(Windows XP环境下编译) 将Python程序编译为exe&#xff0c;须要Python主程序&#xff0c;pywin32库&#xf…...

即墨网站建设哪里有/简述如何优化网站的方法

课后进行了下面的练习&#xff1a; 1.声明public 不声明参数是public&#xff0c;则main中无法访问。 error&#xff1a; 声明public后即可访问。 2&#xff0c;passing by value or by reference passing by value:method中可以改变数值&#xff0c;method外则不会改变。 结果…...

wordpress 魔/推广渠道有哪些

教学反思&#xff1a;三角形的中线与面积法人教版数学八年级上册第11章第1.2节《三角形的高、中线与角平分线》中&#xff0c;我们对三角形的中线描述是“连接三角形顶点和对边中点的线段”&#xff0c;这和前一小节中对边、对角概念的理解提出的要求对应&#xff0c;即学生能识…...

web网页是什么/广东seo推广贵不贵

介绍JwtToken认证之前,必须要掌握.Net Core认证系统的核心原理,如果你还不了解,请参考.Net Core 认证组件源码解析,且必须对jwt有基本的了解,如果不知道,请百度.最重要的是你还需要掌握identity server4的基本用法,关于identity server4因为涉及到两个协议Oath2.0和openid conn…...

实验报告网站建设与网页制作/网络营销推广方案案例

目前有很多人会对老旧的房屋进行拆除然后重新建造&#xff0c;让自己能够有新的房子居住&#xff0c;但这不是容易完成的事情&#xff0c;而房屋拆除注意事项都有哪些呢?在房屋拆除之前&#xff0c;该了解的事情一定要了解清楚&#xff0c;房屋拆除应该注意问题呢。一、房屋拆…...

在线制作公司网站/熊猫seo实战培训

项目内容这个作业属于哪个课程任课教师博客主页链接这个作业的要求在哪里作业链接地址团队名称代码敲不队作业学习目标掌握软件编码实现的工程要求。第一天 日期&#xff1a;2019/6/15 团队项目github仓库地址链接 GitHub仓库地址链接 今日完成任务情况以及遇到的问题 经商讨&a…...