没想到有一天连自己公司的数据都要用爬的。
我们公司数据的Ajax请求都长这样:
Yaodo·2023-06-02·67 次阅读
没想到有一天连自己公司的数据都要用爬的。
我们公司数据的Ajax请求都长这样:
倒也不是不可以用Selenium去爬,实际上我本来也都是用BrowserMob Proxy和Selenium来爬的,今天心血来潮想试一下JS逆向可不可以,还真被我找到办法了。
看下F12开发工具的Network中,有疑似用来加密的js,记下路径
用Save All Resources把相关的js都下载下来
发现在cryptoRequest中竟然有注释……
然后这一段应该是加密解密
function aesEncrypt(value, key) { key = Utf8.parse(fillKey(key)) value = Utf8.parse(value); //CipherOption,加密的一些选项: //mode:加密模式,可取值(CBC,CFB,CTR,CTRGladman,OFB,ECB),都在CryptoJS.mode对象下 //padding:填充方式,可取值(Pkcs7,Ansix923,Iso10126,ZeroPadding,NoPadding),都在CryptoJS.pad对象下 //iv:偏移量,mode===ECB时,不需要iv //返回的是一个加密对象 var encrypted = AES.encrypt(value, key, { mode: ECB, padding: Pkcs7, iv: '', keySize: 128, }); return encrypted.ciphertext.toString(Hex); } function aesDecrypt(value, key) { key = Utf8.parse(fillKey(key)) value = Hex.parse(value); //返回的是解密后的对象 var decrypt = AES.decrypt(CryptoJS.lib.CipherParams.create( { ciphertext: value }), key, { mode: ECB, padding: Pkcs7, iv: '', keySize: 128, }); var decryptedStr = decrypt.toString(Utf8); return decryptedStr.toString(); }
这边一段意思应该是上面的key是怎么来的
CryptoRequest.cryptoEncodeParam = function(value, type, crypto_secret) { crypto_secret = crypto_secret || window.crypto_secret; if (crypto_secret) { if (!value) return value;
然后去F12里找crypto_secret,填进去试试
还真给我蒙对了呃。
Comments | NOTHING