【JS逆向】企X科技 数据加密

本文介绍了一种针对特定加密网站数据的逆向解析方法。通过分析网页加密逻辑,找到并利用反解函数,成功实现了对加密数据的解密。文中详细展示了逆向过程及关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意:文章内容仅用于学习和技术交流,如有侵权请联系我删除。

学者应洁身自好,切勿做出违法的事情,旨在提供逆向思路。

➣➣欢迎关注本人微信公众号Anonymous NoteBook➣➣

分享好玩有趣的网络资源&软件工具~

分享各种技术性PDF资源/付费查询PDF资源~

分享各种编程语言、开发技术、分布式事务、大数据与云计算技术~

分享有关网络爬虫(Web爬虫逆向 | 安卓逆向)案例、数据挖掘、技术心得等~

aHR0cHM6Ly9xaW1pbmdwaWFuLmNuL2Zpbm9zZGEvcHJvamVjdC9waW52ZXN0bWVudA==

【该网站加密比较简单,练手较好~~】

问题分析:

访问页面时,出现数据列表,通过F12工具可以查看数据接口:

一大串的加密字符串,淡定。。。。。。

其实很简单,只要找到反解函数,把加密字符串传进去,就可以得到加密前的数据。

逆向分析:

既然返回的字段含有encry关键词,那么我们试着搜索一下:

 搜索出来的数据不多,经过一条一条的观察和筛选后发现,最后一条正是我们需要的,点击进去,打上断点,刷新页面,果不其然。。。。。。

 e.encrypt_data : 就是浏览器返回的数据加密字符串.。

而加密字符串又作为Object(u.a)的参数,真实调用的函数为o(t):

这个o函数就是反解函数了。

跟进去O函数:

 

 函数内部设置了一些固定值。decode 函数来解码, 最后通过json来序列化。

a.a.deocde 函数真实调用的是decode函数:

decode函数里有使用事先声明好的变量:

 好了,分析到这里,逆向工作已经完成95%了, 接下里就是拷贝相应的函数和变量到本地js文件中,进行调试、运行。

 与原网页中的数据进行对比, 正确无误。

 js代码:

function s(t, e, i, n, a, s) {
    var o, c, r, l, u, d, h, p, f, v, m, g, b, y, _ = 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(0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0), C = 0, w = 0, x = 0; x < b; x++) {
            var k = t.charCodeAt(C++) << 24 | t.charCodeAt(C++) << 16 | t.charCodeAt(C++) << 8 | t.charCodeAt(C++)
                , T = t.charCodeAt(C++) << 24 | t.charCodeAt(C++) << 16 | t.charCodeAt(C++) << 8 | t.charCodeAt(C++);
            ...................
            // 此处省略多行代码
        }
        return y
    }(t), S = 0, F = e.length, j = 0, I = 32 == z.length ? 3 : 9;
    p = 3 == I ? i ? new Array(0,32,2) : new Array(30,-2,-2) : i ? new Array(0,32,2,62,30,-2,64,96,2) : new Array(94,62,-2,32,64,2,30,-2,-2),
        2 == s ? e += "        " : 1 == s ? i && (r = 8 - F % 8,
            e += String.fromCharCode(r, r, r, r, r, r, r, r),
        8 === r && (F += 8)) : s || (e += "\0\0\0\0\0\0\0\0");
    var B = ""
        , O = "";
    for (1 == n && (f = a.charCodeAt(S++) << 24 | a.charCodeAt(S++) << 16 | a.charCodeAt(S++) << 8 | a.charCodeAt(S++),
       ...................
        // 此处省略多行代码
    }
    if (B = (B += O).replace(/\0*$/g, ""),
        !i) {
        if (1 === s) {
            var $ = 0;
            (F = B.length) && ($ = B.charCodeAt(F - 1)),
            $ <= 8 && (B = B.substring(0, F - $))
        }
        B = decodeURIComponent(escape(B))
    }
    return B
}

var f = "/[\\t\\n\\f\\r ]/g",
    c = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

function decode(t) {
    var e = (t = String(t).replace(f, "")).length;
    e % 4 == 0 && (e = (t = t.replace(/==?$/, "")).length),
    (e % 4 == 1 || /[^+a-zA-Z0-9/]/.test(t)) && l("Invalid character: the string to be decoded is not correctly encoded.");
    for (var n, r, i = 0, o = "", a = -1; ++a < e; )
        r = c.indexOf(t.charAt(a)),
            n = i % 4 ? 64 * n + r : r,
        i++ % 4 && (o += String.fromCharCode(255 & n >> (-2 * i & 6)));
    return o
}

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

var str_ = "加密数据字符串"
console.log(o(str_))

完事~~ 收工~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值