爬虫_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 SpringBoot集成Jasypt进行加密、解密的详细过程

《JAVASpringBoot集成Jasypt进行加密、解密的详细过程》文章详细介绍了如何在SpringBoot项目中集成Jasypt进行加密和解密,包括Jasypt简介、如何添加依赖、配置加密密钥... 目录Java (SpringBoot) 集成 Jasypt 进行加密、解密 - 详细教程一、Jasyp

使用MyBatis TypeHandler实现数据加密与解密的具体方案

《使用MyBatisTypeHandler实现数据加密与解密的具体方案》在我们日常的开发工作中,经常会遇到一些敏感数据需要存储,比如用户的手机号、身份证号、银行卡号等,为了保障数据安全,我们通常会对... 目录1. 核心概念:什么是 TypeHandler?2. 实战场景3. 代码实现步骤步骤 1:定义 E

Python多任务爬虫实现爬取图片和GDP数据

《Python多任务爬虫实现爬取图片和GDP数据》本文主要介绍了基于FastAPI开发Web站点的方法,包括搭建Web服务器、处理图片资源、实现多任务爬虫和数据可视化,同时,还简要介绍了Python爬... 目录一. 基于FastAPI之Web站点开发1. 基于FastAPI搭建Web服务器2. Web服务

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

在Node.js中使用.env文件管理环境变量的全过程

《在Node.js中使用.env文件管理环境变量的全过程》Node.js应用程序通常依赖于环境变量来管理敏感信息或配置设置,.env文件已经成为一种流行的本地管理这些变量的方法,本文将探讨.env文件... 目录引言为什么使php用 .env 文件 ?如何在 Node.js 中使用 .env 文件最佳实践引

C#自动化实现检测并删除PDF文件中的空白页面

《C#自动化实现检测并删除PDF文件中的空白页面》PDF文档在日常工作和生活中扮演着重要的角色,本文将深入探讨如何使用C#编程语言,结合强大的PDF处理库,自动化地检测并删除PDF文件中的空白页面,感... 目录理解PDF空白页的定义与挑战引入Spire.PDF for .NET库核心实现:检测并删除空白页

使用Node.js和PostgreSQL构建数据库应用

《使用Node.js和PostgreSQL构建数据库应用》PostgreSQL是一个功能强大的开源关系型数据库,而Node.js是构建高效网络应用的理想平台,结合这两个技术,我们可以创建出色的数据驱动... 目录初始化项目与安装依赖建立数据库连接执行CRUD操作查询数据插入数据更新数据删除数据完整示例与最佳

java 恺撒加密/解密实现原理(附带源码)

《java恺撒加密/解密实现原理(附带源码)》本文介绍Java实现恺撒加密与解密,通过固定位移量对字母进行循环替换,保留大小写及非字母字符,由于其实现简单、易于理解,恺撒加密常被用作学习加密算法的入... 目录Java 恺撒加密/解密实现1. 项目背景与介绍2. 相关知识2.1 恺撒加密算法原理2.2 Ja

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可