没想到有一天连自己公司的数据都要用爬的。
我们公司数据的Ajax请求都长这样:

Yaodo·2023-06-02·92 次阅读
没想到有一天连自己公司的数据都要用爬的。
我们公司数据的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