V5加密如何解密? V5解密方法全过程分享

2023-05-11 13:26:35 浏览数 (2)

代码语言:javascript复制
(function (js_body) {
    // 脱壳 && 解密
    let js_arr = js_body.split("n").pop().split(';'),
        fun_name = /vars (_0x[a-z0-9] )=/.exec(js_arr[6])[1],
        reg_str = fun_name   '\('   "'([^'] )',s*'([^'] )'"   '\)',
        js_str = js_arr.slice(54, js_arr.length - 4).join(';'),
        code_shell = js_arr.slice(0, 54).join(';'),
        shell_obj = eval("(function(){"   code_shell   ";return "   fun_name   "})()");
    js_str = js_str.replace(new RegExp(reg_str, 'g'), function (str, id, key) {
        return '"'   shell_obj(id, key)   '"';
    }).replace(/([a-z0-9-_A-Z)]] )s?[["']([^"'] )["']]/g, '$1.$2').replace(/(?, function (hex) {
        return parseInt(hex).toString();
    });
    // 还原混淆
    let obj = null, name = '';
    js_str = js_str.replace(/{(vars (_0x[0-9a-z] )=({(.*)}));/g, function (str, code_str, _name, obj_str) {
        obj = eval("(function () {return "   obj_str   "})()");
        name = _name;
        return '{';
    });
    if (obj) {
        let i = 5;
        while (js_str.indexOf(name) && --i > 0) {
            for (const key in obj) {
                if (!obj.hasOwnProperty(key)) continue;
                if (typeof obj[key] == 'function') {
                    let fun_info = /functions*_0x[0-9a-z] (([^)]*)){returns*([^;] );}/.exec(obj[key].toString());
                    js_str = js_str.replace(new RegExp(name   '\.'   key   '\(([^())]*)\)', 'g'), function (string, args_str) {
                        let args = args_str.split(','),
                            fun_args = fun_info[1].split(','),
                            fun_body = fun_info[2];
                        fun_args.forEach(function (item, index) {
                            fun_body = fun_body.replace(item, args[index]);
                        });
                        return fun_body;
                    });
                } else if (typeof obj[key] == 'string') {
                    js_str = js_str.replace(name   '.'   key, '"'   obj[key]   '"');
                } else {
                    js_str = js_str.replace(name   '.'   key, obj[key].toString());
                }
            }
        }
    }
    return js_str;
})($('#resultSource').val() || $('#jsdata').val());

0 人点赞