js_reverse/猿人学练习/21js加密一个套了轻ob的webpack
2023-07-20 11:43:21 +08:00
..
2023-03-13 15:36:17 +08:00
2023-07-20 11:43:21 +08:00
2023-03-13 15:27:38 +08:00
2023-03-13 15:27:38 +08:00

知识点webpack4魔改的md5eval渗透AC表转字符串

解题思路

https://blog.csdn.net/qq523176585/article/details/124722785
https://app.yinxiang.com/fx/970ae39c-9964-4aae-aa96-7e81fee4ef8f
js基础课的webpack

查看请求地址,发现存在s加密变量和t变量

请求

断点进入

请求

很容易就找到了加密函数的位置,并且利用控制台,就能判断出加密的初始值是时间戳

请求

个人习惯:不管如何混淆,先解混淆,让代码更加直观,最后用reres替换文件

请求

reres替换成本地文件

请求

断点进入代码了解过webpack打包的就不难发现这段代码是webpack4的打包

webpack打包后的基本结构

请求

想要调试webpack代码只需要在分发器上打上断点就能知道运行的哪些模块

请求

刷新页面,第一个加载的模块是110,查看代码也符合预期,这里初始执行的模块就是110

请求

继续断点执行,并每次执行后打印模块名,可以发现模块执行顺序是512520684200274200555567

请求

就是说整个加密过程经历了512520684200274200555567模块

如何扣webpack代码类似如下

window = global;
p = window;
var getToken;

!function (_0x33909e) {
    var t={}

    // 分发器
    function d(n){
        if (t[n])
            return t[n].exports;
        console.log(n)
        var r = t[n] = {
            i:n,
            l:!1,
            exports:{}
            };
        return e[n].call(r.exports,r,r.exports,d),
        r.l = !0;
        r.exports
    }

    // d(1)
    getToken = d;  // 导出执行入口函数
}({
    // 模块
    520: function (_0x30cc03, _0x3b380c, _0x3f415a) {},
    684: function (_0x41d8d5, _0x220a8e) {},
    200: function (_0xd2ef5e, _0x515626) {},
    274: function (_0x4dc078, _0x4f5a3) {},
    555: function (_0x71207c, _0x1e06ab, _0x4c8811) {},
    567: function (_0x244241, _0x257cd8, _0x4d003a) {},
});

// 函数外执行
var k = getToken(520);
let _0x4d0a2e = k();
console.dir(_0x4d0a2e);

将入口函数d赋值给全局变量getToken,将需要执行的函数复制粘贴到模块中,在函数外给到需要执行的模块,最后得到想要的值

注意点

利用AC表插入一断危险代码

请求

并执行一断定时任务

请求

类似的地方还有一处

请求