ajax的请求解密

发布于:2024-05-14 ⋅ 阅读:(122) ⋅ 点赞:(0)
  $.ajax({
                            url: i,
                            dataType: "json",
                            success: function(e) {
                                r.decompressAndDeobfuscateData(e, w).then((e=>{
                                    if (!(e = JSON.parse(e))[0].series[0].serie.data[0])
                                        return t(!0);
                                    e = r.transformData(e),
                                    I && console.log("result:", e);解释每一行代码

返回的数据时密文,逐个跟栈,最后找到这行代码,在前面打断点,可以发现解密部分就在这里。

这是很常见的写法,每一行代码的含义分别为。

这段代码是一个 AJAX 请求,用于获取 JSON 数据。让我来逐行解释:

  1. $.ajax({: 这是 jQuery 中用于发起 AJAX 请求的方法。

  2. url: i,: 这里的 i 应该是一个变量,表示请求的 URL。该行指定了请求的 URL。

  3. dataType: "json",: 这表示预期从服务器返回的数据类型是 JSON 格式。

  4. success: function(e) {: 这是一个回调函数,当请求成功完成时执行。参数 e 是从服务器返回的数据。

  5. r.decompressAndDeobfuscateData(e, w).then((e=>{: 这里调用了 decompressAndDeobfuscateData 函数,传递了两个参数 ew。这个函数是一个异步函数,因此在成功解密数据后,使用 then() 方法执行一个回调函数。

  6. if (!(e = JSON.parse(e))[0].series[0].serie.data[0]): 这里首先将返回的 JSON 数据解析为对象 e。然后,检查对象中特定路径上的数据是否存在。如果数据不存在,可能会执行 t(!0),但是在提供的代码片段中,缺少了这一部分。

  7. e = r.transformData(e),: 如果数据存在,将调用 r.transformData 对数据进行进一步处理。

  8. I && console.log("result:", e);: 这里条件地(I &&)使用 console.log 输出处理后的数据。I 可能是一个全局变量,如果为真,则会执行 console.log

请注意,给定的代码片段中缺少了一些上下文信息,特别是在条件 if (!(e = JSON.parse(e))[0].series[0].serie.data[0]) 中的 t(!0)。此外,变量 rwIt 的定义也不明确,可能是在其他地方定义的。

解密函数decompressAndDeobfuscateData的完整代码:

decompressAndDeobfuscateData: async function(e, t) {
                    try {
                        const a = await async function(e, t) {
                            let a = atob(e)
                              , i = new Uint8Array(a.length);
                            for (let e = 0; e < a.length; e++)
                                i[e] = a.charCodeAt(e);
                            const r = (new TextEncoder).encode(t);
                            for (let e = 0; e < i.length; e++)
                                i[e] ^= r[e % r.length];
                            return n.inflate(i, {
                                to: "string"
                            })
                        }(e, t);
                        return a
                    } catch (e) {
                        return console.log(e),
                        null
                    }

为了在Nodejs中运行,可以借助GPT的帮助,让它帮你修改代码

修改后的能在Nodejs中运行的代码:

const { inflateRawSync } = require('zlib');

async function decompressAndDeobfuscateData(e, t) {
    try {
        // 解码 base64 编码的字符串
        let decodedData = Buffer.from(e, 'base64');
        
        // 创建一个 Uint8Array 以存储解码后的数据
        let uint8Array = new Uint8Array(decodedData);
        
        // 创建一个用于解密的 Uint8Array
        const keyData = Buffer.from(t);
        
        // 对解码后的数据进行异或解密
        for (let i = 0; i < uint8Array.length; i++) {
            uint8Array[i] ^= keyData[i % keyData.length];
        }
        
        // 使用 zlib 模块的 inflateRawSync 方法解压缩数据
        const inflatedData = inflateRawSync(uint8Array);
        
        // 将解压缩后的数据转换为字符串并返回
        return inflatedData.toString('utf8');
    } catch (error) {
        // 如果出现错误,打印错误信息并返回 null
        console.error(error);
        return null;
    }
}

// 使用示例:
const e = 'a/lpZGluZ2VjbOv3Iga4Sz2m1+vTByHdjKNCosAEh7lP6lh/SXrPvhH/rzw4aXR7kIdYx0ToFK0QpTBBloiTjRCvAM3q9KYITp7Hh5meP1ttYJQOFXHVPN6wg4+XFeqr2A5sOtle9uayXNqWO7UIl44P0PhVEKIwynb4PNYsIn3tgvTInN6h2Xb1CPQjsAwngLCTkvMRFTuG11GGCJSVCnEVkxgOqo9bWSORDJ6expBGug6+EcVcggZx+BOQx9GXG/GdSmCQniwNgMGy9MiVUpDbrfbLjvXWKcuM3CWxkIIokPu2uhh6Jqgkm6BrF52BLPGOnM4dCheTcPnIlayZHwrpSBIptiz+2k9jZicW12fhEG9PEqqQfCanNlgvc8ghXirRiHmNTAMoAa//KYJj4DhQbSqjUXEBzuS4YJ4vj2hLJhJyQhZ/VNIM2QWPfMQEsOPmeItr35MUpQnhEn9zyac3dBj8+X25iPh4H6g2ZYTBjoiTqLuDPt3hPN0jUUDCjha/4496Jb3d+ijuSwX1HAhp80V2w88nLUyvTVXpZLW/uUY7GiBSveCt5fvJO7Pi40VEMBK9zS/I+ohseENbei+3XbcfEzTPB1/k2nyEbgonT30SgcN1d1AtYcy2qNyURDVVH24yL9CI+WfykUVXp9fGXVF3FhGuDxYWKtfLdU+inkISLjxdZXj6O3Wi34R8L+PaD8gCITyRGMjTKIkZ6Xz9DpJJwFCxn3tupcNqxhpeK9uJlHUCoP0wTk9vQRNtTedtTKvT/SHLpPAu5MGYT5n2rhRPKlrALa5y8G3O2NT3eTUkSTTyJmPOMICASpWznmw23lFP2RUlJNiHt1HkiQAK2xltCgg+7/a7hyQEeEqYUVR47qh2ourLJbtJ0JFAvPQw1HXqCXh5LLFnGciNsxNCvh4My1O2yZ9SZse/R+A47OTbi4fyz1FNwd1qEGYDIUwrxVVXM7ABYiuCvM82RvhdfozHMwD23D0t6hyHOUwtjl5TbFQ91ZpfdSSUIhtSMwpGbDWQSsW6UqxIrBf9ceXXFzOHFtkrCOwXPkMb89NjbsTAKh8Z5I00vzZRM2h8tsHdI0uQ/cPjv1vviddcvl+TTDYIw9yAqIIW//i2y4kvUv84WSUu12UUTk8Quv9KWSHl1d0p9CDp1DaIM2v3E+Ky+btE3hUnhHOge/CvlyN4Vb87cVljHjxQOUwBLjvU0yO50E7IwswPyBdiWSSJA4IHuuhzz1Y1GIXliYI/UNiQfjljcPynQn9yP7VsGVHL5pxYTLnbnJhRv/bvzdvVKGCCD4g9VZpqzcOk/D8v8xVJ4Fh7XBHmqZkqy2mnvupmoxqDSWMF1ukX1vo1DDQ84YkO8lxzkUlnVCkByUirB+AoCtPBEIddPVu9ISh93uYEq5XH+7QyL7AXvhwFjfunh5isuf8cggs5gyta/g5CErRLKx/vuB890MR3BCHHA5/5DXIjufMvnb/AH4sFS8szema1KYO8xiKytIR37wTsPU8IuECDe19dFC8cqNZOzaGx+AswQ+yGT7bGsNX2oZBS2OgZX9QTw3BXpRVFdnSJtZeQiSm7mfr/1YcH+eiW7bS5gm8fsq8K7xVl7gQuNOPK+P9SBuDbjguBwk0tv5jWa2rslYOa3ZYYqcv0J6IxsgzQseS1snzefr/JHC6agzGfGBe3s9vjlVfTgY+FTvmokMKI2sLTZi/EPacOY2kt';
const t = 'tradingeconomics-charts-core-api-key';

decompressAndDeobfuscateData(e, t)
    .then(result => {
        console.log(result);
    })
    .catch(error => {
        console.error(error);
    });

 

 


网站公告

今日签到

点亮在社区的每一天
去签到