爬虫逆向实战(38)-某空气质量平台(反调试,AES,DES,MD5)

一、数据接口分析

主页地址:某空气质量平台

1、抓包

(1) 反调试

该网站对鼠标右击以及F12进行了监听并拦截
在这里插入图片描述
在这里插入图片描述
虽然该网站无法打开Chrome控制台,导致我们无法抓包,但是道高一尺魔高一丈。既然我们无法在打开该网站的时候打开Chrome控制台,那么我们可以先在新标签页中打开Chrome控制台,再进入该网站。

(2)抓包

通过抓包可以发现数据接口是/apinew/aqistudyapi.php
在这里插入图片描述

2、判断是否有加密参数

  1. 请求参数是否加密?
    通过查看“载荷”模块,可以发现有一个hXhY1B2Kd加密参数
    在这里插入图片描述

  2. 请求头是否加密?

  3. 响应是否加密?
    通过查看响应模块,可以发现响应数据是密文
    在这里插入图片描述

  4. cookie是否加密?

二、加密位置定位

1、看启动器

查看启动器发现里面有一个sW7FumD53pAq3ysvobb方法,点进去查看
在这里插入图片描述
可以发现这里就是发送ajax请求的位置,并且url就是数据接口。
在这里插入图片描述
在这里打上断点,再次获取数据,发现可以断住。密文是由pov0M2gfR方法生成的,并且在success中对响应进行了处理。
在这里插入图片描述

三、扣js代码

将加密以及解密方法扣出,缺啥补啥即可。扣代码时可以发现,网站使用的是标准的MD5和DES对数据进行加密,AES和DES对响应进行解密,所以可以直接使用标准模块进行加解密。
js源代码:

var CryptoJS = require('crypto-js')const dckE15Yk15AF = "oHLKvpN54hwpLWjt";
const dcik4kPiOWjo = "pdgLk9FGBd5kXbm0";const  dsk9EbiUpi5W = "hIFclTxH0JalYZiu";
const  dsi3gJ2aZe1f = "xMFHANC8X1TunaGs";const  askiZExYII01 = "aPnyDR5Ca6FMIfdw";
const  asideGdRY692 = "bNpeyqJl34VlZ7ng";var DES = {encrypt: function (text, key, iv) {var secretkey = (CryptoJS.MD5(key).toString()).substr(0, 16);var secretiv = (CryptoJS.MD5(iv).toString()).substr(24, 8);secretkey = CryptoJS.enc.Utf8.parse(secretkey);secretiv = CryptoJS.enc.Utf8.parse(secretiv);var result = CryptoJS.DES.encrypt(text, secretkey, {iv: secretiv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7});return result.toString();},decrypt: function (text, key, iv) {var secretkey = (CryptoJS.MD5(key).toString()).substr(0, 16);var secretiv = (CryptoJS.MD5(iv).toString()).substr(24, 8);secretkey = CryptoJS.enc.Utf8.parse(secretkey);secretiv = CryptoJS.enc.Utf8.parse(secretiv);var result = CryptoJS.DES.decrypt(text, secretkey, {iv: secretiv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7});return result.toString(CryptoJS.enc.Utf8);}
}var AES = {encrypt: function(text, key, iv) {var secretkey = (CryptoJS.MD5(key).toString()).substr(16, 16);var secretiv = (CryptoJS.MD5(iv).toString()).substr(0, 16);secretkey = CryptoJS.enc.Utf8.parse(secretkey);secretiv = CryptoJS.enc.Utf8.parse(secretiv);var result = CryptoJS.AES.encrypt(text, secretkey, {iv: secretiv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7});return result.toString();},decrypt: function(text, key, iv) {var secretkey = (CryptoJS.MD5(key).toString()).substr(16, 16);var secretiv = (CryptoJS.MD5(iv).toString()).substr(0, 16);secretkey = CryptoJS.enc.Utf8.parse(secretkey);secretiv = CryptoJS.enc.Utf8.parse(secretiv);var result = CryptoJS.AES.decrypt(text, secretkey, {iv: secretiv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7});return result.toString(CryptoJS.enc.Utf8);}
};var BASE64 = {encrypt: function (text) {// var b = new Base64();// return b.encode(text);var buffer = Buffer.from(text);return buffer.toString('base64');},decrypt: function (text) {var buffer = Buffer.from(text, 'base64');return buffer.toString('utf8')}
};function ObjectSort(obj) {var newObject = {};Object.keys(obj).sort().map(function (key) {newObject[key] = obj[key];});return newObject;
}function pov0M2gfR(method, obj) {var appId = '271c2aab7dd615dacbadcb41d3c77fa4';var clienttype = 'WEB';var timestamp = new Date().getTime();var param = {appId: appId,method: method,timestamp: timestamp,clienttype: clienttype,object: obj,secret: CryptoJS.MD5(appId + method + timestamp + clienttype + JSON.stringify(ObjectSort(obj))).toString()};param = BASE64.encrypt(JSON.stringify(param));param = DES.encrypt(param, dckE15Yk15AF, dcik4kPiOWjo);return param;
}function get_request_params(city='苏州') {type = "GETDATA"data = {'city': city}period = 0.5ktsu = CryptoJS.MD5(type + JSON.stringify(data)).toString()var phqbwou = pov0M2gfR(type, data)return { hXhY1B2Kd: phqbwou }
}function get_response_data(data) {data = AES.decrypt(data, askiZExYII01, asideGdRY692);data = DES.decrypt(data, dsk9EbiUpi5W, dsi3gJ2aZe1f);data = BASE64.decrypt(data);return data;
}

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

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

相关文章

Redis入门到实战-第二十二弹

Redis入门到实战 Redis高可用Sentinel官网地址Redis概述虚拟机配置在主从复制环境的基础上添加Sentinel更新计划 Redis高可用Sentinel 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://redis.io/Redis概述 Redis是一…

AI图像重绘解决方案

高质量的图像素材往往成本高昂且制作周期长,给企业带来了不小的困扰。美摄科技凭借其领先的AI图像重绘解决方案,为企业提供了一种高效、便捷且成本可控的图像优化途径,助力企业重塑视觉形象,引领市场新风尚。 美摄科技的AI图像重…

【跟着CHATGPT学习硬件外设 | 01】SPI外设

文章目录 🚀 概念揭秘关键精华🌟 秒懂案例生活类比实战演练 🔍 原理与工作流程探秘步骤1:初始化SPI接口步骤2:主设备启动通信步骤3:主设备发送数据步骤4:从设备接收数据步骤5:从设备…

【爬虫框架Scrapy】01 开启Scrapy之路

爬虫基础专栏:http://t.csdnimg.cn/r9gt9 前言 如果你没有爬虫基础,相信我,不要进行下去,没什么意义,你会撞的头破血流,最后破灭你那本就不多的兴趣选择放弃!!! OK&…

架构师之路--docker命令实践整理

安装docker sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine sudo yum install -y yum-utils sudo yum-config-manager --add-repo http://mirrors.aliyun.com/…

液体和固体介质的电气特性

本篇为本科课程《高电压工程基础》的笔记。 液体和固体介质广泛应用于高压电气设备内,作为设备的内绝缘。描述电介质的电气特性的四大参数是介电常数 ε \varepsilon ε、电导率 γ \gamma γ、介质损耗角正切 tan ⁡ δ \tan\delta tanδ和击穿场强 E b E_b Eb​。…

第十四届蓝桥杯JavaA组省赛真题 - 互质数的个数

解题思路: 快速幂 欧拉函数 快速幂比较常见于数据较大的取模场景,欧拉函数感觉还是有点抽象 注意: 取模的时候就不要简写了,例如:res res * a % mod;不要写成res * a % mod; import java.util.Scanner;public c…

正弦实时数据库(SinRTDB)的使用(5)-历史数据查询

前文已经将正弦实时数据库的使用进行了介绍,需要了解的可以先看下面的博客: 正弦实时数据库(SinRTDB)的安装 正弦实时数据库(SinRTDB)的使用(1)-使用数据发生器写入数据 正弦实时数据库(SinRTDB)的使用(2)-接入OPC DA的数据 正弦实时数据库(SinRTDB)…

【python】爬取4K壁纸保存到本地文件夹【附源码】

欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 图片信息丰富多彩,许多网站上都有大量精美的图片资源。有时候我们可能需要批量下载这些图片,而手动一个个下载显然效率太低。因此,编写一个简单的网站图片爬取程序可以帮助我们…

堆排序算法详解与C代码实现

堆排序算法详解与C代码实现 一、堆排序的基本概念二、堆排序的主要过程建堆堆调整 三、堆排序算法的特点四、堆排序的C代码实现 在众多的排序算法中,堆排序以其独特的性质和高效的性能脱颖而出。堆排序算法利用堆这种数据结构所设计的一种排序算法,它是选…

Advisor 被重复代理问题排查

问题场景 项目中存在多个 AbstractAdvisorAutoProxyCreator 且其持有的 Advisor Bean 重复 问题复现 相关代码 ResponseBodyRequiresPermissions(PermissionConstant.****)GetMapping(value "/query****.json", name "")public List<***> query…

新穗青少年开展“小小公民科学家”科考活动探索生物多样性

为帮助“新穗”青少年了解本土文化&#xff0c;提升个人知识面和动手能力&#xff0c;贯彻落实《未成年人保护法》《家庭教育促进法》《广东省生态环境教育条例》等有关文件精神&#xff0c;3月24日&#xff0c;天河区绿日同学公益服务促进会联合华南农业大学农潮工作室、广州城…