感谢佬友,币安的不太一样哈,不过代码收藏了
直接把js代码拉下来,用python调用
npm i crypto-js -D
const CryptoJS = require('crypto-js');
/**
* AES 解密函数(CBC + Pkcs7)
* @param {string} encryptedText - Base64 编码的密文
* @param {string} key - 字符串密钥
* @param {string} iv - 字符串初始化向量
* @returns {string} 解密后的明文
*/
function decryptAES(encryptedText, key, iv) {
const keyWA = CryptoJS.enc.Utf8.parse(key + 'll1');
const ivWA = iv;
let n = {
iv: ivWA,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7,
};
n.iv = CryptoJS.enc.Utf8.parse(n.iv + 'll1');
console.log(encryptedText);
console.log(keyWA);
console.log(n);
const decrypted = CryptoJS.AES.decrypt(encryptedText, keyWA, n);
console.log(decrypted);
return JSON.parse(decrypted.toString(CryptoJS.enc.Utf8));
}
let encryptedText = '';
console.log(
JSON.stringify(decryptAES(encryptedText, 'bieyanjiulexixishuibatoufamei', 'nengnongchulainb'))
);
保存为 index.js
,复制加密内容到 encryptedText
中
执行 node index.js
即可
结果截图
key 和 iv 还有点嘲讽的意味,有点意思
感谢佬友!我在js中看到key和iv是+‘ll’,为什么这个代码需要再加一个’1’呀?
在解密方法
o.AES.decrypt = function(e, n, t) {
return n = o.enc.Utf8.parse(n + “ll”),
t.iv = o.enc.Utf8.parse(t.iv + “ll”),
r(e, n, t)
}
这里调用了o.enc.Utf8.parse 这边引用的是下面这个方法
E.enc.Utf8.parse = function(e) {
return B(e + “1”)
}
这里导致需要再加一个1
谢谢佬友!明白了,第一次摸索逆向学到了不少!
简单分享下自己的浅薄经验(仅限web),知道那个参数是加密参数后 可以使用 GitHub - JSREI/ast-hook-for-js-RE: 浏览器内存漫游解决方案(探索中...) 来快速定位 加密数据生成的位置 但是 在vm或使用了jsvmp混淆的时候效果不是很理想,所以它不是万能的,在可以用的时候还是能提升不少效率的。一般来说找到位置就是扣扣代码,补补环境就ok了,还有个技巧就是插桩,插桩就是添加log,有些网站会把console.log赋值为空函数,需要在他之前hook一下就行了,对于需要插桩的位置过多的情况使用ast加浏览器替换js文件插件可以实现 批量快速插桩。对于数据小且紧急的采集需求直接使用 drissionpage 就完事了,或者编写油猴脚本写rpc直接不进行协议逆向,然后就是tls指纹了解一下就行了,如果想进一步学习 可以学习补环境,解混淆和反编译jsvmp了。再提升的话就到了.wasm文件了,不过用这个的不多。
谢谢佬友,已收藏~
此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。