深入解析JavaScript混淆加密与Python逆向调用实战-题八
一、前言:Web接口加密与逆向挑战
在现代Web开发中,前端加密技术被广泛应用于保护API接口安全,防止恶意爬取和数据泄露。本文将通过一个真实案例,详细解析如何分析JavaScript混淆加密算法,并使用Python实现自动化调用。
二、目标网站分析
我们的目标是stu.tulingpyton.cn
网站的API接口,该接口有以下安全特征:
-
请求参数需要动态加密
-
使用时间戳和自定义加密算法
-
采用cookies会话验证
-
返回JSON格式的分页数据
三、JavaScript加密逻辑深度解析
1. 核心加密函数OOOoOo
function OOOoOo(_0x240504, _0x8eefdc) {
// 将输入字符串转为字符数组
const _0x3a3671 = _0x240504.split(''),
_0x1959d4 = _0x8eefdc.split(''),
_0x582226 = 4; // 分组大小
let _0x5ad857 = [];
// 按4字符一组处理
for (let _0x2d33d3 = 0; _0x2d33d3 < _0x3a3671.length; _0x2d33d3 += _0x582226) {
let _0x38ae5f = _0x3a3671.slice(_0x2d33d3, _0x2d33d3 + _0x582226);
// 对每组字符进行加密
for (let _0x31873b = 0; _0x31873b < _0x38ae5f.length; _0x31873b++) {
const _0x11057a = _0x38ae5f[_0x31873b].charCodeAt(0),
_0x1a6269 = _0x1959d4[_0x31873b % _0x1959d4.length].charCodeAt(0),
_0x25c979 = (_0x11057a + _0x1a6269) % 256; // 核心加密算法
_0x38ae5f[_0x31873b] = String.fromCharCode(_0x25c979);
}
_0x5ad857 = _0x5ad857.concat(_0x38ae5f);
}
// 将结果转为16进制字符串
const _0x28d8b9 = _0x5ad857.join(''),
_0x36bdd2 = Array.from(_0x28d8b9).map(_0x3c7e7a =>
_0x3c7e7a.charCodeAt(0).toStr