建筑数据破解JS逆向爬虫

news/2024/7/19 10:28:04 标签: javascript, 爬虫, 开发语言

建筑数据破解JS逆向爬虫

地址:https://jzsc.mohurd.gov.cn/data/project
请添加图片描述
GitHub地址:https://github.com/NearHuiwen/JzscCrawler
Requests+PyExecJS
JS文件:req_aes.js

目标

抓包,抓取建筑市场数据(注:用于学习,不是商用或其他恶意用途)

实现步骤

  • 1、Fidder抓包,发现返回的数据跟个鬼一样

请添加图片描述

  • 2、定位JS文件

那我们通过url 下手试试 在All里面全局 搜索 project/list(url后面的参数,怎么方便怎么来)

一直定位到这里,很明显看得出用了AES加密,国企项目都那么喜欢AES吗,哈哈。。。

其实大厂加密都简单,安全防护之类的完全不靠js加密,靠的是风控,用一个大佬跟我说的话,当你把加解密破解之后,游戏才刚刚开始

请添加图片描述

确定AES了,考虑一般是AES直接加密或者AES + RSA,企业比较广泛吧,不知道哪个Diao毛想的,玩挺花

当然AES + RSA 组合更加安全,RSA的公钥私钥保持不变,AES的秘钥每次随机生成,发送方用AES加密原文,再用公钥加密AES的秘钥,带上加密后的秘钥和密文去请求.而接受方则先用私钥解密得到AES的秘钥再对密文进行解密

  • 3、手撕JS代码(扣代码)
var CryptoJS = require('crypto-js')

function getDecryptedData(t) {
    var m = CryptoJS.enc.Utf8.parse("偏移值"),
        f = CryptoJS.enc.Utf8.parse("秘钥"),
        e = CryptoJS.enc.Hex.parse(t),
        n = CryptoJS.enc.Base64.stringify(e),
        a = CryptoJS.AES.decrypt(n, f, {
            iv: m,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
        }),
        r = a.toString(CryptoJS.enc.Utf8);
    return r.toString()
}

直接写python也可以

f = '秘钥'  # 秘钥
m = '偏移值'  # 偏移值
# 转码  utf-8?  字节 16进制
m = bytes(m, encoding='utf-8')
f = bytes(f, encoding='utf-8')
# 创建一个AES算法 秘钥  模式 偏移值
cipher = AES.new(f, AES.MODE_CBC, m)
# 解密
decrypt_content = cipher.decrypt(bytes.fromhex(response))
result = str(decrypt_content, encoding='utf-8')
# OKCS7 填充
length = len(result) # 字符串长度
unpadding = ord(result[length - 1]) # 得到最后一个字符串的ASCII
result = result[0:length - unpadding]

http://www.niftyadmin.cn/n/254782.html

相关文章

MySQL - explan - key_len

key_len 表示查询用到的索引key的长度(字节数)。如果单列索引,那么就会把整个索引长度计算进去,如果是联合索引,不是所有的列都用到,那么就只计算实际用到的列,因此可以根据key_len来判断联合索引是否生效。 1. 注意…

Docker安装Nginx(图文详解版)

目录 1.下载Nginx镜像 2.创建Nginx配置文件 3.创建Nginx容器并运行 4.查看效果 1.下载Nginx镜像 命令描述docker pull nginx下载最新版Nginx镜像 (此命令等同于 : docker pull nginx:latest )docker pull nginx:xxx下载指定版本的Nginx镜像 (xxx指具体版本号&a…

设计模式 -- 迭代器模式

前言 月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂) 央是一片海洋,海乃百川,代表着一块海绵(吸纳万物) 泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出) 月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容 希望大家一起坚持这个过程,也同…

如何成为一名优秀的棒球教练·棒球6号位

成为一名优秀的棒球教练,需要具备以下几个方面的能力和素质: 1. 深厚的棒球知识和技能:作为一名教练,必须具备足够的棒球知识和技能,包括打击、投球、守备、跑垒等方面的技能。教练应该对棒球规则、战术、战略等方面的…

IT项目管理 PPT 选择题【太原理工大学】

单选题,10*2分20分 填空题,10*2分20分 判断题,10*1分10分 画图题,10分 进度计算题,15分 成本计算题,15分 简答题,5*2分10分 重点章节:3、4、5、6、7章 我觉得小题应该是在 PP…

Linux驱动开发——高级I/O操作(五)

目录 mmap设备文件操作 定位操作 习题 mmap设备文件操作 显卡一类的设备有一片很大的显存,驱动程序将这片显存映射到内核的地址空间,方便进行操作。如果用户想要在屏幕上进行绘制操作,将要在用户空间开辟出一片至少一样大的内存&#xff…

Android权限描述

问题 我们常常在写apk的时候申请一些相关权限。想知道每个权限的作用&#xff0c;可以查询权限声明的地方。 1、三方页面&#xff1a; https://manifestdestiny.reveb.la/ 2、源码注释 /frameworks/base/core/res/AndroidManifest.xml <!-- SystemApi TestApi Allows a…

PCB射频电路四大基础特性及设计技巧

由于射频(RF)电路为分布参数电路&#xff0c;在电路的实际工作中容易产生趋肤效应和耦合效应&#xff0c;所以在实际的PCB设计中&#xff0c;会发现电路中的干扰辐射难以控制。 如&#xff1a;数字电路和模拟电路之间相互干扰、供电电源的噪声干扰、地线不合理带来的干扰等问题…