
分析方法
- 根据调用堆栈找加密前后定位
- 根据提交URL,参数名等搜索定位
请求数据解密1:
分析:登录后看提交参数,找到param:及和调用堆栈文件对应
下数据加密后断点,追踪za(c.value, S),AES算法条件模式测试

调用堆栈分析:耗时
url路径/全局参数搜索:更快
全局搜索param:,如果有多个则配合“调用堆栈”中是否出现分析

寻找加密函数

定位加密函数

分析加密函数

验证

请求数据解密2:(单个使用扣代码模拟)
分析:登录后看调用堆栈下断点,找到hidetxtPassword
追踪hidetxtPassword数据处理,找到引用加密JS下载测试
缺点:如果这个js文件不是单独的,在其中某些函数引用到其他js文件中,需要保证把这些js文件全部下载下来







实际替换”123456″为要爆破的密码或各种攻击语句,实现测试
返回数据解密1:(单个使用扣代码模拟)
返回数据加密,无法看见攻击结果,如返回状态码,什么错误
分析:
URL定位后断点,分析到算法webInstace.shell,定位到加密js文件,发现应该是使用了webpack加密混淆了,无法正常看出是什么算法
下载JS文件,Webpack打包利用Node.js运行调用(借助AI),webpack打包的不能利用原生代码调用
问ai:已知webDES.min.js为webpack打包的代码,如何使用Node调用里面的webInstace.shell方法

返回数据解密2:(多个使用替代库模拟)
分析:
使用替代库crypto-js
npm init -y
npm install crypto-js
key来源:定义一个常量s,SHA1加密后获取一个值,并取前32位
AES解密:o是需要解密的字符串,r是key,mode是ECB,iv不需要


使用替代库crypto-js,然后把关键代码拿下来改
const CryptoJS = require("crypto-js");
// 生成32字节密钥(取SHA1哈希的前32个字符)
const secretKey = CryptoJS.SHA1("tSdGtmwh49BcR1irt18mxG41dGsBuGKS")
.toString(CryptoJS.enc.Hex)
.substr(0, 32);
const key = CryptoJS.enc.Hex.parse(secretKey);
/**
* AES-ECB-PKCS7Padding 解密函数
* @param {string} encryptedBase64 - 待解密的Base64字符串
* @returns {Object} 解密后的JSON对象
*/
function decrypt(encryptedBase64) {
try {
// 解析Base64密文
const cipherParams = CryptoJS.enc.Base64.parse(encryptedBase64);
// 使用ECB模式和PKCS7填充进行解密
const decrypted = CryptoJS.AES.decrypt(
{ ciphertext: cipherParams },
key,
{
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
}
);
// 转换为UTF-8字符串并解析JSON
return JSON.parse(decrypted.toString(CryptoJS.enc.Utf8));
} catch (error) {
console.error("解密失败:", error);
return null;
}
}
const encryptedData = "";
const result = decrypt(encryptedData);
console.log("解密结果:", result);

