建筑数据破解JS逆向爬虫

建筑数据破解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]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NealHuiwen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值