港股打新网js逆向-数据获取

 网址:aHR0cHM6Ly93d3cubGlhbmdodWFpcG8uY29tLyMvbGlzdGVkX3N0b2NrX2xpc3Q=

1、网站进行简要分析

打开开发者工具,抓包

 

 

 请求成功后,返回一长段的数据data,需要的数据应该就是对data进行解密了,现在开始找解密点

2、寻找解密点

网页打上XHR断点,点击翻页

 

 

 网页被断住,向上找堆栈,到pagechange发现有个JSON.parse这不就是解密点?打个断点,放开xhr断点,在进行一次翻页

 

 

 

判断加密点没错

var s = JSON.parse(Object(o.a)(a.data));

主要函数为Object(o.a),断点进入

 

 这不就是一个AES解密函数吗,废话不多说,码代码吧

const CryptoJS = require('crypto-js');

function get_data(t){
    var c = CryptoJS.enc.Utf8.parse("eFgabcda1bcda12bc2bcdePgefgadefg");
    var n = CryptoJS.enc.Utf8.parse();
    var e = c,
        s = n,
        i = CryptoJS.enc.Base64.parse(t),
        a = CryptoJS.enc.Base64.stringify(i);
    return CryptoJS.AES.decrypt(a, e, {
                iv: s,
                mode: CryptoJS.mode.ECB,
                padding: CryptoJS.pad.Pkcs7
            }).toString(CryptoJS.enc.Utf8).toString()
    }  

 结果:

 

 全部代码:

import requests
import execjs

def get_data():
    url = 'https://api.lianghuaipo.com/hk_ipo/get_paged_listed_stock_list'
    headers = {
        'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36',
    }
    data = {
        'now_page': 1,
        'page_cnt': 30
    }
    res = requests.post(url=url,headers=headers,data=data).json()
    return res['data']


js = '''
const CryptoJS = require('crypto-js');
function get_data(t){
    var c = CryptoJS.enc.Utf8.parse("eFgabcda1bcda12bc2bcdePgefgadefg");
    var n = CryptoJS.enc.Utf8.parse();
    var e = c;
    var s = n;
    var i = CryptoJS.enc.Base64.parse(t);
    var a = CryptoJS.enc.Base64.stringify(i);
    return CryptoJS.AES.decrypt(a, e, {
        iv: s,
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    }).toString(CryptoJS.enc.Utf8).toString()
}
'''

if __name__ == '__main__':
    data = get_data()
    response = execjs.compile(js).call('get_data',data)
    print(response)

  

posted @ 2021-10-13 20:39  是四不是十  阅读(670)  评论(0)    收藏  举报