港股打新网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)

浙公网安备 33010602011771号