首页 > 其他分享 >【2023最新10.25】全国建筑市场监管公共服务平台(四库一平台)js逆向

【2023最新10.25】全国建筑市场监管公共服务平台(四库一平台)js逆向

时间:2023-10-25 23:47:54浏览次数:44  
标签:AES 加密 10.25 代码 平台 js import data

目录

js逆向思路

第一步看请求网址的发起程序都有哪些

接在js文件搜索AES,MD5,等高频加密方式的字段

1 parse  
2 decrypt
3 .toString()
4 Base64
5 表单字段
6 url关键字

最后可疑的地方都打上断点,调试,跟踪堆栈

第一步抓包

首先右键打开开发者工具,打开网络界面

接着点击翻页,抓到第二页的包

image-20231025221029421

这里可以看到点击第二页后只有一个包,那肯定是他了,接着我们看他返回的数据

image-20231025221159632

可以很明显的看到被加密了

破解的发法我这里有两种

第一种破解方法,堆栈法

首先打开发起程序

找到app的js文件

image-20231025221433520

一般的返回值都是这个文件

image-20231025221623917

打开之后黄色的这行就是调用的语句

我们这行代码上下部分的return和函数的地方打上断点

image-20231025221907795

这个是2934,最好把这行代码的整个函数代码的return都打上

image-20231025222014199

我在这行代码(e(t))的最开始的地方打断点的就发现 函数b 有问题,因为他的关键字,这个在第二种方法会讲。

现在打好断点后再次抓包

image-20231025222306744

这里也是断上了,先看看这个t是啥,params一看就是表单吧,很可疑

我们继续走

点击抓包工具里的三角形图案往下运行

在运行了几次之后

image-20231025222550112

就到了我说的很可疑的那段代码,函数b(t):

t 一看不就是 加密后返回值吗

r 是解密后的返回值

我们细看这段代码

image-20231025222857240

很明显,这是AES加密,CBC模式

先把t,就是加密后的返回值解密赋值给e,

n 是 Base64后的e值

最后在使用密匙和偏移量解密,f和m需要先编码

我们可以扣js代码,也可以使用python还原

python还原

from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
import binascii
# python AES解密
def decrypt(data):
    KEY = 'jo8j9wGw%6HbxfFn'.encode()
    IV = '0123456789ABCDEF'.encode()
    cipher = AES.new(key=KEY, mode=AES.MODE_CBC, iv=IV)
    decrypted_data = cipher.decrypt(binascii.a2b_hex(data))
    result = unpad(decrypted_data, block_size=AES.block_size).decode('utf8')
    return result

image-20231025223714140

可以看到,我们直接使用加密后的返回值测试python AES解密,这里是成功了

js扣代码还原

image-20231025224057363

抠代码的时候,我们可以看到d,a就是一个算法包,里面有AES,有MD5等等等

我们也可以扣,不过太麻烦了,我们可以直接导入算法包

# 安装算法加密包
npm install crypto-js

然后把d.a 全换成算法加密包就行

// 导入算法加密包
const CryptoJS = require('crypto-js')
f = CryptoJS.enc.Utf8.parse("jo8j9wGw%6HbxfFn");
m = CryptoJS.enc.Utf8.parse("0123456789ABCDEF");
function b(t) {
    var 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()
}

image-20231025224837375

这里通过打印测试,可以看出来,用js扣代码也成功了

接下来使用execjs模块在python中运行js就行

import execjs

f = open('四库一平台.js','r',encoding='utf-8')
text = f.read()
f.close()

js = execjs.compile(text)
raw_data = '957******'
res = js.call('b',raw_data)  # call(func,*args) 第一个参数为函数,后面都为参数
print(res)

image-20231025230336593

这里运行后如果报错AttributeError: 'NoneType' object has no attribute 'replace'

这是因为乱码了

解决方法

在导入execjs之前

加上下面的代码

import subprocess
from functools import partial
subprocess.Popen = partial(subprocess.Popen, encoding='utf-8')

image-20231025230544068

第二种破解方法,搜索法

这种方法不是很好用,因为关键字如果有几十几百就不行了

当我们看到是加密的返回值时,我们第一时间就要想到AES,MD5等加密方式

但是加密一定要解密,如果你js看的多的话,就会发现解密的关键字其实大部分都一样

# 1 parse  
# 2 decrypt
# 3 .toString()
# 4 Base64
# 5 表单字段
# 6 url关键字

这些是我自己整理的

我们可以直接点击右上角的搜索进行查看

image-20231025231300377

我们这里可以根据发起程序,重点看app这个文件,我们可以看到有25个,我们换一个

image-20231025231453796

可以看到,换了一个后,就只剩一个了,而且点开一看,就是我们用第一种方法时找到的那段代码

搜索法很好用,你js逆向多了,就知道解密的关键字都有哪些,可以更精准,不用一点点的打断点

或者在关键字那里都打上断点,这样效率也是不慢的

完整代码

import json
import time
import requests
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
import binascii
url = 'https://jzsc.mohurd.gov.cn/APi/webApi/dataservice/query/comp/list'

headers = {
    'Referer': 'https://jzsc.mohurd.gov.cn/data/company',
    'User-Agent': '你的User-Agent',
    'cookie':'你的cookie'
}

params = {
    'pg': '1',
    'pgsz': '15',
    'total': '450',
}
# python AES解密
def decrypt(data):
    KEY = 'jo8j9wGw%6HbxfFn'.encode()
    IV = '0123456789ABCDEF'.encode()
    cipher = AES.new(key=KEY, mode=AES.MODE_CBC, iv=IV)
    decrypted_data = cipher.decrypt(binascii.a2b_hex(data))
    result = unpad(decrypted_data, block_size=AES.block_size).decode('utf8')
    return result
# 翻页
for i in range(30):
    params['pg'] = str(i)
    response = requests.get(url, headers=headers, params=params)
    time.sleep(1.5)
    try:
        result = decrypt(response.text)
        # print(result)
        json1 = json.loads(result)
        for item in json1['data']['list']:
            data_dict = {}
            data_dict['QY_NAME'] = item['QY_NAME']
            try:
                data_dict['QY_FR_NAME'] = item['QY_FR_NAME']
            except:
                data_dict['QY_FR_NAME'] = '无'
            data_dict['QY_REGION_NAME'] = item['QY_REGION_NAME']
            print(data_dict)

        print(f"第{i+1}页爬取成功")

    except Exception as e:
        print(e)
        print(response.text)

效果展示

你也可以把数据存入Mysql数据库,csv文件,xlsx文件等

image-20231025232736130

标签:AES,加密,10.25,代码,平台,js,import,data
From: https://www.cnblogs.com/BigClever/p/17788399.html

相关文章

  • jsp
    1.jsp表达式<%=  %> 等价于  ${}  就相当于输出  2.jsp的脚本片段  <%  %> 3.jsp声明 <%!  %>  4.jsp指令这两个都是一样: header和footer的内容放在网页主体的上下部分 9大内置对象主要用的4个  存东西取...转发......
  • vite中使用scss导出变量到js/ts中作为变量使用
    定义scss定义一个scss文件,注意,这里的文件名要以module.scss结尾,不然会出现读写错误的问题。$background-color_hover:#e4e8ec;$background-color_chosed:#f44343;:export{bgc_hover:$background-color_hover;bgc_chosed:$background-color_chosed;}.modu......
  • 10.25
    Ajax在HTML文件中创建一个容器,用于展示数据。可以使用<ul>或<table>等标签来展示数据列表。使用JavaScript代码获取数据。可以使用fetch()函数或其他AJAX方法从后端API获取数据。将数据请求发送到后端的URL,并使用GET或POST方法获取数据。在JavaScript代码中,使用.then()方法处......
  • Node.js 的ORM(Sequelize) 的使用
    Sequelize是一个Node.js的ORM。什么是ORM呢?对象关系映射(ObjectRelationalMapping)。什么意思?就是在编程语言中,很容易创建对象,如果在面向对象的语言中,它也只有对象,但在关系型数据库中,它只有关系(表)。如果想在程序中操作关系型数据库,就要在对象和表之间做转换,比如,取出对象......
  • 大二打卡(10.25)
    今天做了什么:英语课,上节课的听写结果出来了,感觉大学老师就是仁慈,这份听写要是高中,早被老师抽八百遍了,感谢英语老师给个机会,下次听写应该是下下周,这次争取一手满分这次课的听力做的还不错,除了一个单词猜错意思选错了,其他的都听对了 今天遇到什么问题:建民的测试,目前搞定了链接,......
  • 23.10.25(前端页面输入框的各种操作1)
    <tr><%--限制必须输入,学号限制位数、前四位必须是2023,性别限制男或女,专业用下拉框--%><th>姓名</th><inputtype="text"name="name"required><th>学号</th><inputtype="text"name="number"requ......
  • 23.10.25(前端页面输入框的各种操作2)
    <scripttype="text/javascript"><!--全选的方法--><--复选框的定义方法以及全选方法-->functionselectAll(){vars=document.getElementsByName("like");for(vari=0;......
  • 2023.10.25——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习;我了解到的知识点:1.java断言,代码区域等明日计划:学习......
  • 10.25每日总结
    今天做了软考的题和大型数据库的作业在做作业过程中配置maven时发现spark安装有错误,没做做出了,明天继续做,并且做软考的题: ......
  • js简单动画--页面元素碰撞浏览器边框
    如题,js的简单使用。很多页面特效可以由此展开想象。html:1<!DOCTYPEhtml>2<html>3<head>4<metacharset="utf-8"/>5<title></title>6<scriptsrc="js/j1.js"></script>7......