小白求教一些爬虫逆向的思路方法...

感谢佬友,币安的不太一样哈,不过代码收藏了 :smiley:

直接把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 即可
结果截图

1 Like

key 和 iv 还有点嘲讽的意味,有点意思

1 Like

感谢佬友!我在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

1 Like

谢谢佬友!明白了,第一次摸索逆向学到了不少!

笑死,解决一个问题得同时,时隔大半年又升到了3级

简单分享下自己的浅薄经验(仅限web),知道那个参数是加密参数后 可以使用 GitHub - JSREI/ast-hook-for-js-RE: 浏览器内存漫游解决方案(探索中...) 来快速定位 加密数据生成的位置 但是 在vm或使用了jsvmp混淆的时候效果不是很理想,所以它不是万能的,在可以用的时候还是能提升不少效率的。一般来说找到位置就是扣扣代码,补补环境就ok了,还有个技巧就是插桩,插桩就是添加log,有些网站会把console.log赋值为空函数,需要在他之前hook一下就行了,对于需要插桩的位置过多的情况使用ast加浏览器替换js文件插件可以实现 批量快速插桩。对于数据小且紧急的采集需求直接使用 drissionpage 就完事了,或者编写油猴脚本写rpc直接不进行协议逆向,然后就是tls指纹了解一下就行了,如果想进一步学习 可以学习补环境,解混淆和反编译jsvmp了。再提升的话就到了.wasm文件了,不过用这个的不多。

3 Likes

谢谢佬友,已收藏~

此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。