某市场监督网站js逆向

本文纯粹作学习探讨用,不作其他用途。

目标网站:某建筑市场监督网站

目标:获取5页数据

一、抓包

进入网站,打开F12,翻页,找到接口,但返回的是一串密文:

某市场监督网站js逆向_第1张图片

 查看该调用堆栈,看到有value字样,点进去,再往上找,发现有类似“json.parse”的字样。

二、寻找加密函数

在网站加密过程中,一般可以通过查找:encrypt, decrypt, password, sign, json.parse等等,来定位到加密函数,我们在这边打个断点,看下是否会断下:

某市场监督网站js逆向_第2张图片

 

某市场监督网站js逆向_第3张图片

 发现在这里确实断住了,而且t里面的data显示的和我们要破解的加密内容是类似的,猜测这个函数h就是加密函数:

 进到函数h里面,发现了熟悉的aes身影:

这样就可以确定,h就是加密函数, 加密方式是AES,模式是CBC,偏移量是m,而我们要的结果就在return中:r.toString():

 三:写代码

这个代码还是比较简单的,基本思路是:向网站发起请求,拿到加密的结果,用js逆向解密获得明文取得真实信息:

# 生成解密用的sdk

function jzsc_sdk(t) {
    var cryptojs = require('crypto-js');
    var f = cryptojs.enc.Utf8.parse("jo8j9wGw%6HbxfFn"),
        m = cryptojs.enc.Utf8.parse("0123456789ABCDEF"),
        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()
}

# 发起请求,获取真实信息

import requests
import execjs

def get_encrpyted_data(page):
    session = requests.session()
    url = f'https://jzsc.mohurd.gov.cn/api/webApi/dataservice/query/comp/list?pg={page}&pgsz=15&total=450'
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
        'Host': 'jzsc.mohurd.gov.cn',
        'Referer': 'https://jzsc.mohurd.gov.cn/data/company'
    }
    encrypted_data = session.get(url=url, headers=headers).text
    return encrypted_data

def get_decrpyted_data(encrypted_data):
    with open('65_jzsc.js', 'r', encoding='utf-8') as f:
        js_text = f.read()
    decrpyted_data = execjs.compile(js_text).call('jzsc_sdk', encrypted_data)
    return decrpyted_data

def main():
    for p in range(5):
        print(f'打印第{p+1}页数据')
        encrpyted_data = get_encrpyted_data(p)
        decrpyted_data = get_decrpyted_data(encrpyted_data)
        print(decrpyted_data)

if __name__ == '__main__':
    main()

四、结果展示

某市场监督网站js逆向_第4张图片

 

你可能感兴趣的:(自学python之路,javascript,python,爬虫,数据挖掘)