JS逆向-将接口返回的加密数据进行解密

本文介绍如何在JavaScript中逆向工程解密加密的接口数据。首先,通过HTTP监听获取加密数据,接着找到数据请求接口【productListVip】并在JS中设置断点。通过调试找到解密函数【o()】和【decode()】,在新建HTML页面中尝试解密过程。最后,利用影刀的【执行JS脚本】指令批量解密接口返回的加密信息。
摘要由CSDN通过智能技术生成

JS逆向-将接口返回的加密数据进行解密

背景
●接口数据被加密,通过影刀【HTTP下载】和【开始网页监听指令】虽然能够得到返回的数据,但是数据被加密,我们不知道数据内容,也就无法进行下一步操作。
●出于对数据安全的考虑,现代化的网站/APP通常会对数据接口做加密处理。而分析这些接口的加密算法并实现模拟调用的过程就叫做「逆向」。
逆向流程
网站链接:企名片-中国领先的商业信息服务平台
💡 1.找到数据请求的接口名称
如下图,表格里的数据是通过【productListVip】这个接口进行请求的,而且看预览里的返回参数,【encrypt_data】是一段字母+符号+数字,也就是被加密的数据。


💡 2.为此请求加一个XHR断点
首先点击【源代码】,然后点击加号添加刚才的请求名称


接下来我们在开发者工具里使用快捷键【 Ctrl+Shift+F 】唤起底部搜索,并输入被加密的参数【encrypt_data】并按下回车


美观输出 { } 点击之后,我们在这个 js 文件里按下【 Ctrl+F 】搜索 js 文件里的 【encrypt_data】,然后点击这一行的行号即可加断点


可能你会想为什么不要其他的,而只要这一条,因为其他的几条都带有 .img_url,显然不是【encrypt_data】


💡 3.接下来开始调试并找到解密函数
按下F5刷新页面之后,可看到程序运行到断点处会停止,然后每按下一次F8,在下方控制台输入【Object(d.a)(t.encrypt_data)】并回车,可看到在这个加密流程里每次打印的数据都不一样,说明网页里的数据都是使用的这个函数。


接下来我们把鼠标移入可出现详细信息,点击js进入


进入之后,给函数加一个断点,然后继续按下F8执行脚本


当执行到这个位置之后,我们可以看到这个函数里包含两个函数 function o(){} 和 function decode(){},此时我们可以按照如下方法,找到 function o(){}的函数所在位置以及 function decode(){}所在位置

function s(e) {
            return JSON.parse(o("5e5062e82f15fe4ca9d24bc5", a.a.decode(e), 0, 0, "012345677890123", 1))
        }


小提示:在此处可快速找到断点位置,鼠标移入-按下鼠标右键-选择显示位置


此时我们已找完解密函数,我们新建一个HTML页面,在编辑器里尝试一下解密。
文件如下(可恶,要会员,附件没法上传):

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>解密</title>
</head>

<body>
    <script>
        function o(e, t, i, n, a, o) {
            var s, c, r, l, d, u, h, p, f, m, v, g, y, b, C = new Array(16843776, 0, 65536, 16843780, 16842756, 66564,
                4, 65536, 1024, 16843776, 16843780, 1024, 16778244, 16842756, 16777216, 4, 1028, 16778240, 16778240,
                66560, 66560, 16842752, 16842752, 16778244, 65540, 16777220, 16777220, 65540, 0, 1028, 66564,
                16777216, 65536, 16843780, 4, 16842752, 16843776, 16777216, 16777216, 1024, 16842756, 65536, 66560,
                16777220, 1024, 4, 16778244, 66564, 16843780, 65540, 16842752, 16778244, 16777220, 1028, 66564,
                16843776, 1028, 16778240, 16778240, 0, 65540, 66560, 0, 16842756),
                _ = new Array(-2146402272, -2147450880, 32768, 1081376, 1048576, 32, -2146435040, -2147450848, -
                    2147483616, -2146402272, -2146402304, -2147483648, -2147450880, 1048576, 32, -2146435040, 1081344,
                    1048608, -2147450848, 0, -2147483648, 32768, 1081376, -2146435072, 1048608, -2147483616, 0, 1081344,
                    32800, -2146402304, -2146435072, 32800, 0, 1081376, -2146435040, 1048576, -2147450848, -2146435072,
                    -2146402304, 32768, -2146435072, -2147450880, 32, -2146402272, 1081376, 32, 32768, -2147483648,
                    32800, -2146402304, 1048576, -2147483616, 1048608, -2147450848, -2147483616, 1048608, 1081344, 0, -
                2147450880, 32800, -2147483648, -2146435040, -2146402272, 1081344),
                w = new Array(520, 134349312, 0, 134348808, 134218240, 0, 131592, 134218240, 131080, 134217736,
                    134217736, 131072, 134349320, 131080, 134348800, 520, 134217728, 8, 134349312, 512, 131584,
                    134348800, 134348808, 131592, 134218248, 131584, 131072, 134218248, 8, 134349320, 512, 134217728,
                    134349312, 134217728, 131080, 520, 131072, 134349312, 134218240, 0, 512, 131080, 134349320,
                    134218240, 134217736, 512, 0, 134348808, 134218248, 131072, 134217728, 134349320, 8, 131592, 131584,
                    134217736, 134348800, 134218248, 520, 134348800, 131592, 8, 134348808, 131584),
                k = new Array(8396801, 8321, 8321, 128, 8396928, 8388737, 8388609, 8193, 0, 8396800, 8396800, 8396929,
                    129, 0, 8388736, 8388609, 1, 8192, 8388608, 8396801, 128, 8388608, 8193, 8320, 8388737, 1, 8320,
                    8388736, 8192, 8396928, 8396929, 129, 8388736, 8388609, 8396800, 8396929, 129, 0, 0, 8396800, 8320,
                    8388736, 8388737, 1, 8396801, 8321, 8321, 128, 8396929, 129, 1, 8192, 8388609, 8193, 8396928,
                    8388737, 8193, 8320, 8388608, 8396801, 128, 8388608, 8192, 8396928),
                x = new Array(256, 34078976, 34078720, 1107296512, 524288, 256, 1073741824, 34078720, 1074266368,
                    524288, 33554688, 1074266368, 1107296512, 1107820544, 524544, 1073741824, 33554432, 1074266112,
                    1074266112, 0, 1073742080, 1107820800, 1107820800, 33554688, 1107820544, 1073742080, 0, 1107296256,
                    34078976, 33554432, 1107296256, 524544, 524288, 1107296512, 256, 33554432, 1073741824, 34078720,
                    1107296512, 1074266368, 33554688, 1073741824, 1107820544, 34078976, 1074266368, 256, 33554432,
                    1107820544, 1107820800, 524544, 1107296256, 1107820800, 34078720, 0, 1074266112, 1107296256, 524544,
                    33554688, 1073742080, 524288, 0, 1074266112, 34078976, 1073742080),
                T = new Array(536870928, 541065216, 16384, 541081616, 541065216, 16, 541081616, 4194304, 536887296,
                    4210704, 4194304, 536870928, 4194320, 536887296, 536870912, 16400, 0, 4194320, 536887312, 16384,
                    4210688, 536887312, 16, 541065232, 541065232, 0, 4210704, 541081600, 16400, 4210688, 541081600,
                    536870912, 536887296, 16, 541065232, 4210688, 541081616, 4194304, 16400, 536870928, 4194304,
                    536887296, 536870912, 16400, 536870928, 541081616, 4210688, 541065216, 4210704, 541081600, 0,
                    541065232, 16, 16384, 541065216, 4210704, 16384, 4194320, 536887312, 0, 541081600, 536870912,
                    4194320, 536887312),
                A = new Array(2097152, 69206018, 67110914, 0, 2048, 67110914, 2099202, 69208064, 69208066, 2097152, 0,
                    67108866, 2, 67108864, 69206018, 2050, 67110912, 2099202, 2097154, 67110912, 67108866, 69206016,
                    69208064, 2097154, 69206016, 2048, 2050, 69208066, 2099200, 2, 67108864, 2099200, 67108864, 2099200,
                    2097152, 67110914, 67110914, 69206018, 69206018, 2, 2097154, 67108864, 67110912, 2097152, 69208064,
                    2050, 2099202, 69208064, 2050, 67108866, 69208066, 69206016, 2099200, 0, 2, 69208066, 0, 2099202,
                    69206016, 2048, 67108866, 67110912, 2048, 2097154),
                N = new Array(268439616, 4096, 262144, 268701760, 268435456, 268439616, 64, 268435456, 262208,
                    268697600, 268701760, 266240, 268701696, 266304, 4096, 64, 268697600, 268435520, 268439552, 4160,
                    266240, 262208, 268697664, 268701696, 4160, 0, 0, 268697664, 268435520, 268439552, 266304, 262144,
                    266304, 262144, 268701696, 4096, 64, 268697664, 4096, 266304, 268439552, 64, 268435520, 268697600,
                    268697664, 268435456, 262144, 268439616, 0, 268701760, 262208, 268435520, 268697600, 268439552,
                    268439616, 0, 268701760, 266240, 266240, 4160, 4160, 262208, 268435456, 268701696),
                $ = function (e) {
                    for (var t, i, n, a = new Array(0, 4, 536870912, 536870916, 65536, 65540, 536936448, 536936452, 512,
                        516, 536871424, 536871428, 66048, 66052, 536936960, 536936964), o = new Array(0, 1,
                            1048576, 1048577, 67108864, 67108865, 68157440, 68157441, 256, 257, 1048832, 1048833,
                            67109120, 67109121, 68157696, 68157697), s = new Array(0, 8, 2048, 2056, 16777216,
                                16777224, 16779264, 16779272, 0, 8, 2048, 2056, 16777216, 16777224, 16779264, 16779272),
                        c = new Array(0, 2097152, 134217728, 136314880, 8192, 2105344, 134225920, 136323072, 131072,
                            2228224, 134348800, 136445952, 139264, 2236416, 134356992, 136454144), r = new Array(0,
                                262144, 16, 262160, 0, 262144, 16, 262160, 4096, 266240, 4112, 266256, 4096, 266240,
                                4112, 266256), l = new Array(0, 1024, 32, 1056, 0, 1024, 32, 1056, 33554432, 33555456,
                                    33554464, 33555488, 33554432, 33555456, 33554464, 33555488), d = new Array(0, 268435456,
                                        524288, 268959744, 2, 268435458, 524290, 268959746, 0, 268435456, 524288, 268959744, 2,
                                        268435458, 524290, 268959746), u = new Array(0, 65536, 2048, 67584, 536870912,
                                            536936448, 536872960, 536938496, 131072, 196608, 133120, 198656, 537001984, 537067520,
                                            537004032, 537069568), h = new Array(0, 262144, 0, 262144, 2, 262146, 2, 262146,
                                                33554432, 33816576, 33554432, 33816576, 33554434, 33816578, 33554434, 33816578), p =
                            new Array(0, 268435456, 8, 268435464, 0, 268435456, 8, 268435464, 1024, 268436480, 1032,
                                268436488, 1024, 268436480, 1032, 268436488), f = new Array(0, 32, 0, 32, 1048576,
                                    1048608, 1048576, 1048608, 8192, 8224, 8192, 8224, 1056768, 1056800, 1056768, 1056800),
                        m = new Array(0, 16777216, 512, 16777728, 2097152, 18874368, 2097664, 18874880, 67108864,
                            83886080, 67109376, 83886592, 69206016, 85983232, 69206528, 85983744), v = new Array(0,
                                4096, 134217728, 134221824, 524288, 528384, 134742016, 134746112, 16, 4112, 134217744,
                                134221840, 524304, 528400, 134742032, 134746128), g = new Array(0, 4, 256, 260, 0, 4,
                                    256, 260, 1, 5, 257, 261, 1, 5, 257, 261), y = e.length > 8 ? 3 : 1, b = new Array(32 *
                                        y), C = new Array(0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0), _ = 0, w = 0, k =
                            0; k < y; k++) {
                        var x = e.charCodeAt(_++) << 24 | e.charCodeAt(_++) << 16 | e.charCodeAt(_++) << 8 | e
                            .charCodeAt(_++),
                            T = e.charCodeAt(_++) << 24 | e.charCodeAt(_++) << 16 | e.charCodeAt(_++) << 8 | e
                                .charCodeAt(_++);
                        x ^= (n = 252645135 & (x >>> 4 ^ T)) << 4,
                            x ^= n = 65535 & ((T ^= n) >>> -16 ^ x),
                            x ^= (n = 858993459 & (x >>> 2 ^ (T ^= n << -16))) << 2,
                            x ^= n = 65535 & ((T ^= n) >>> -16 ^ x),
                            x ^= (n = 1431655765 & (x >>> 1 ^ (T ^= n << -16))) << 1,
                            x ^= n = 16711935 & ((T ^= n) >>> 8 ^ x),
                            n = (x ^= (n = 1431655765 & (x >>> 1 ^ (T ^= n << 8))) << 1) << 8 | (T ^= n) >>> 20 & 240,
                            x = T << 24 | T << 8 & 16711680 | T >>> 8 & 65280 | T >>> 24 & 240,
                            T = n;
                        for (var A = 0; A < C.length; A++)
                            C[A] ? (x = x << 2 | x >>> 26,
                                T = T << 2 | T >>> 26) : (x = x << 1 | x >>> 27,
                                    T = T << 1 | T >>> 27),
                                T &= -15,
                                t = a[(x &= -15) >>> 28] | o[x >>> 24 & 15] | s[x >>> 20 & 15] | c[x >>> 16 & 15] | r[x >>>
                                12 & 15] | l[x >>> 8 & 15] | d[x >>> 4 & 15],
                                i = u[T >>> 28] | h[T >>> 24 & 15] | p[T >>> 20 & 15] | f[T >>> 16 & 15] | m[T >>> 12 &
                                15] | v[T >>> 8 & 15] | g[T >>> 4 & 15],
                                n = 65535 & (i >>> 16 ^ t),
                                b[w++] = t ^ n,
                                b[w++] = i ^ n << 16
                    }
                    return b
                }(e),
        
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
小红书是一个社交电商平台,为了保护用户的数据安全和防止恶意攻击,平台采用了加密算法对一些敏感参数进行加密处理,比如x-s和x-t。逆向工程是指通过对应用程序或代码的逆向分析和解析,以获取其内部的机制、算法或逻辑流程。 要逆向解密小红书的x-s和x-t参数,通常需要进行以下步骤: 1. 获取加密js文件:首先,我们需要获取小红书的相关js文件,可以通过抓包工具或者浏览器开发者工具获取到与加密相关的js文件。 2. 分析加密算法:通过对js文件的逆向分析,我们可以寻找到相关的加密算法或函数。一般来说,加密参数通常会用到一些常见的加密算法,比如AES、RSA、MD5等。分析加密算法的关键是找到加密所使用的密钥和加密的处理过程。 3. 提取密钥和参数:一旦我们找到了加密算法和处理过程,接下来需要尝试提取出密钥和参数。这需要根据具体的算法和代码逻辑进行实际的代码分析和编写。 4. 解密参数:当我们获取到了正确的密钥和参数后,就可以编写相应的解密函数来对加密的x-s和x-t参数进行解密。 需要注意的是,逆向工程涉及对他人软件的解密和分析,这可能涉及到法律和道德等方面的问题,建议在合法和合规的前提下使用逆向工程技术。此外,小红书作为一款商业应用,也会不断更新其加密算法和安全机制,因此逆向解密可能随着时间的推移需要不断更新和调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值