爬虫_06_余票检测js解加密

2023-11-02 23:30
文章标签 加密 js 检测 爬虫 06 余票

本文主要是介绍爬虫_06_余票检测js解加密,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

06_余票检测&js解加密&12306模拟登录

余票检测1️⃣

JS解密+混淆破解

  • 博客地址:https://www.cnblogs.com/bobo-zhang/p/11243138.html
  • 爬取的网站:https://www.aqistudy.cn/html/city_detail.html

分析

  1. 修改查询条件(城市的名称+时间范围),点击查询按钮,捕获点击按钮后发起请求对应的数据包。点击查询按钮后,发起的是ajax请求。该请求就会指定查询条件对应的数据加载到当前页面中。(我们要爬取的数据就是该ajax请求请求到的数据)

  2. 分析捕获到的数据包

    • 提取出请求的url:https://www.aqistudy.cn/apinew/aqistudyapi.php

    • 请求方式:post

    • 请求参数:d:动态变化的一组数据(且加密)

    • 响应数据:是加密的密文数据

      • 问题:该数据包请求到的是密文数据,为何在前台页面显示的却是原文数据?
      • 原因:请求请求到密文数据后,前台接收到密文数据后使用指定的解密操作(js函数)对密文数据进行了解密,然后将原文数据显示在了前台页面。
    • 下一步工作的步骤:

      • 首先先处理动态变化的请求参数,动态获取该参数的话,就可以携带该参数进行请求参数,将请求到的密文数据捕获到。
      • 将捕获到的密文数据找到对应的解密函数对其进行解密即可。
      • 【重点】需要找到点击查询按钮后对应的ajax请求代码,从这组代码中就可以破解动态变化的请求参数和加密的响应数据对应的相关操作
  3. 找ajax请求对应的代码,分析代码获取参数d的生成,和加密的响应数据的解密操作

3.1 处理动态变化的请求参数

  • 基于火狐浏览器定位查询按钮绑定的点击事件。

    在这里插入图片描述

  • 从getData函数实现中找寻ajax请求对应的代码

    • 从getData函数的实现中没有找到ajax代码,但是发现了另外两个函数的调用
      • getAQIData(); getWeatherData(); ajax代码一定是存在于这两个函数实现内部
      • type == HOUR:查询时间是以小时为单位
  • 分析getAQIData(); getWeatherData():找到ajax代码

    • 没有找到ajax请求代码
    • 发现了另一个函数调用:getServerData(method,param,func,0.5)
      • method = ‘GETCITYWEATHER’ or ‘GETDETAIL’
      • params = {city,type,startTime,endTime}:查询条件
  • 分析getServerData,找寻ajax代码

    • 基于抓包工具做全局搜索

      在这里插入图片描述

    • 找到的函数实现被加密

    • 对getServerData加密的实现进行解密

      • js混淆:对核心的js代码进行加密
      • js反混淆:对js加密代码进行解密
        • 暴力破解:https://www.sojson.com/jscodeconfusion.html
        • 终于看到了ajax实现的代码
        • 分析结论:
          • data:加密的响应数据
            • decodeData(data)将加密的响应数据进行解密
              • 参数data:加密的响应数据
          • param:动态变化且加密的请求参数
            • getParam(method,object)返回动态变化的请求参数
              • 参数method:method = ‘GETCITYWEATHER’ or ‘GETDETAIL’
              • 参数object:{city,type,startTime,endTime}:查询条件

js逆向

  • 现在只需要调用两个js函数(decodeData,getParam)返回结果即可。在python程序中如何调用js函数。
  • js逆向:在python中调用js函数
    1. 方式1:手动的将js函数改写成为python函数
    2. 方式2:
      • 使用固定模块实现自动逆向(推荐)
      • 利用PyExecJS库来实现模拟JavaScript代码执行获取动态加密的请求参数,然后再将加密的响应数据代入decodeData进行解密即可!
      • 在本机安装好nodejs的环境

PyExecJS的使用2️⃣

#模拟执行decodeData的js函数对加密的响应数据进行解密
import execjs
import requestsnode = execjs.get()#Params
method = "GETCITYWEATHER"
city = '北京'
type = 'HOUR'
start_time = '2018-01-25 00:00:00'
end_time = '2018-01-25 23:00:00'#Compile javascript
file = 'jsCode.js'
ctx = node.compile(open(file.,encoding='utf-8').read())#Get params
js = 'getPostParamCode("{0}","{1}","{2}","{3}","{4}")'.format(method,city,type,start_time,end_time)
#请求参数d
params = ctx.eval(js) #eval执行指定的js函数#发起post请求
url = 'https://www.aqistudy.cn/apinew/aqistudyapi.php'
data = {'d':params
}
response_text = requests.post(url=url,data=data).text #加密的响应数据#对加密的响应数据进行解密
js = 'decodeData("{0}")'.format(response_text)
decrypted = ctx.eval(js) #返回的是解密后的原文数据
print(decrypted_data)
#执行会报错:目前页面中没有数据。解密函数只是针对页面中原始的数据进行解密。
(response_text)
decrypted = ctx.eval(js) #返回的是解密后的原文数据
print(decrypted_data)
#执行会报错:目前页面中没有数据。解密函数只是针对页面中原始的数据进行解密。

这篇关于爬虫_06_余票检测js解加密的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/334033

相关文章

Java中的密码加密方式

《Java中的密码加密方式》文章介绍了Java中使用MD5算法对密码进行加密的方法,以及如何通过加盐和多重加密来提高密码的安全性,MD5是一种不可逆的哈希算法,适合用于存储密码,因为其输出的摘要长度固... 目录Java的密码加密方式密码加密一般的应用方式是总结Java的密码加密方式密码加密【这里采用的

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

使用Python制作一个PDF批量加密工具

《使用Python制作一个PDF批量加密工具》PDF批量加密‌是一种保护PDF文件安全性的方法,通过为多个PDF文件设置相同的密码,防止未经授权的用户访问这些文件,下面我们来看看如何使用Python制... 目录1.简介2.运行效果3.相关源码1.简介一个python写的PDF批量加密工具。PDF批量加密

使用Vue.js报错:ReferenceError: “Vue is not defined“ 的原因与解决方案

《使用Vue.js报错:ReferenceError:“Vueisnotdefined“的原因与解决方案》在前端开发中,ReferenceError:Vueisnotdefined是一个常见... 目录一、错误描述二、错误成因分析三、解决方案1. 检查 vue.js 的引入方式2. 验证 npm 安装3.

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

06 C++Lambda表达式

lambda表达式的定义 没有显式模版形参的lambda表达式 [捕获] 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 有显式模版形参的lambda表达式 [捕获] <模版形参> 模版约束 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 含义 捕获:包含零个或者多个捕获符的逗号分隔列表 模板形参:用于泛型lambda提供个模板形参的名

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件