• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于python:JS-逆向百例建筑市场监管平台企业数据

python 搞代码 3年前 (2022-02-20) 45次浏览 已收录 0个评论
文章目录[隐藏]

申明

本文章中所有内容仅供学习交换,严禁用于商业用途和非法用处,否则由此产生的所有结果均与作者无关。

逆向指标

  • 指标:住房和城乡建设部&全国修建市场监管公共服务平台的企业数据
  • 主页:http://jzsc.mohurd.gov.cn/dat…
  • 接口:http://jzsc.mohurd.gov.cn/api…
  • 逆向参数:申请返回的加密数据

逆向过程

本次的逆向指标是修建市场监管平台的企业数据,来到全国修建市场监管公共服务平台首页,顺次点击数据服务 —> 企业数据,尝试抓包一下所有企业的数据,能够看到返回的数据是通过加密的:

数据看不出来是什么加密形式,然而加密剖析得多了,就晓得个别都是通过 CryptoJS 加密模块加密失去的,那么咱们能够尝试间接搜寻 CryptoJSdecrypt 等关键字,或者搜寻加密算法中常常用到的偏移量 iv、模式 mode、填充形式 padding 等,还有个别的 JSON 数据能够搜寻 JSON.parse 等,这里间接搜寻 JSON.parse,在 app.a9f6bb6d.js 文件里定位到可疑代码,埋下断点进行调试:

能够看到 e 就是解密后的数据,察看语句 var e = JSON.parse(h(t.data));,间接跟进 h 函数,能够看到很显著的 AES 加密:

<code class="javascript">function h(t) {
    var e = d.a.enc.Hex.parse(t)
    , n = d.a.enc.Base64.stringify(e)
    , a = d.a.AES.decrypt(n, f, {
        iv: m,
        mode: d.a.mode.CBC,
        padding: d.a.pad.Pkcs7
    })
    , r = a.toString(d.a.enc.Utf8);
    return r.toString()
}

加密模式为 CBC,填充形式为 Pkcs7,而短少的偏移量 m、f 的值,在下面也能够找到:

<code class="javascript">f = d.a.enc.Utf8.parse("jo8j9wGw%6HbxfFn")
m = d.a.enc.Utf8.parse("0123456789ABCDEF")

在 Python 当中,间接引入 CryptoJS,重写这个函数即可。

残缺代码

残缺代码可在 GitHub 下载:https://github.com/kuaidaili/…

jzsc_mohurd_decrypt.js

<code class="javascript">// 援用 crypto-js 加密模块
var CryptoJS = require('crypto-js')

function getDecryptedData(t) {
    var m = CryptoJS.enc.Utf8.parse("0123456789ABCDEF"),
        f = CryptoJS.enc.Utf8.parse("jo8j9wGw%6HbxfFn"),
        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()
}

// 测试样例
// var t = '95780ba094xxxxxxxxxx'
// console.log(getDecryptedData(t))

jzsc_mohurd.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-


import json

import execjs
import requests


data_url = 'http://jzsc.mohurd.gov.cn/api/webApi/dataservice/query/comp/list?pg=%s&pgsz=15&total=450'


def get_encrypted_data(page):
    headers = {
        'Host': 'jzsc.mohurd.gov.cn',
        'Referer': 'http://jzsc.mohurd.gov.cn/data/company',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
    }
    encrypted_data = requests.get(url=data_url % page, headers=headers).text
    return encrypted_data


def get_decrypted_data(encrypted_data):
    with open('jzsc_mohurd_decrypt.js', 'r', encoding='utf-8') as f:
        jzsc_mohurd_js = f.read()
    decrypted_data = execjs.compile(jzsc_mohurd_js).call('getDecryptedData', encrypted_data)
    return json.loads(decrypted_data)


def main():
    # 30页数据
    for page in range(30):
        encrypted_data = get_encrypted_data(page)
        decrypted_data = get_decrypted_data(encrypted_data)
        print(decrypted_data)


if __name__ == '__main__':
    main()

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于python:JS-逆向百例建筑市场监管平台企业数据
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址