爬虫_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

相关文章

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

在Spring Boot中实现HTTPS加密通信及常见问题排查

《在SpringBoot中实现HTTPS加密通信及常见问题排查》HTTPS是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护,下面通过本文给大家介绍在SpringB... 目录一、HTTPS核心原理1.加密流程概述2.加密技术组合二、证书体系详解1、证书类型对比2. 证书获

使用Python获取JS加载的数据的多种实现方法

《使用Python获取JS加载的数据的多种实现方法》在当今的互联网时代,网页数据的动态加载已经成为一种常见的技术手段,许多现代网站通过JavaScript(JS)动态加载内容,这使得传统的静态网页爬取... 目录引言一、动态 网页与js加载数据的原理二、python爬取JS加载数据的方法(一)分析网络请求1

使用Java实现Navicat密码的加密与解密的代码解析

《使用Java实现Navicat密码的加密与解密的代码解析》:本文主要介绍使用Java实现Navicat密码的加密与解密,通过本文,我们了解了如何利用Java语言实现对Navicat保存的数据库密... 目录一、背景介绍二、环境准备三、代码解析四、核心代码展示五、总结在日常开发过程中,我们有时需要处理各种软

VSCode中配置node.js的实现示例

《VSCode中配置node.js的实现示例》本文主要介绍了VSCode中配置node.js的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一.node.js下载安装教程二.配置npm三.配置环境变量四.VSCode配置五.心得一.no

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

利用python实现对excel文件进行加密

《利用python实现对excel文件进行加密》由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,本文将以Python语言为例,和大家讲讲如何对Excel文件进行加密,感兴... 目录前言方法一:使用pywin32库(仅限Windows)方法二:使用msoffcrypto-too

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例