JS逆向-补环境-通杀方案

本文介绍了一种JavaScript逆向工程的通用解决方案,重点是如何补充运行环境,以确保代码在各种情况下都能正常执行。通过调用get_env_script函数并传入适当的参数,可以自动化处理环境设置,适用于大多数场景。
var eval_env_script = "";
var all_eval_env_script = "";
var base_script = "";
//常用的proxy_array(按照"_"规范填写,后面会进行解析)
var proxy_array = ["window","window_document","window_location","window_navigator"];

function vmProxy(object) {
    return new Proxy(object, {

        set: function (target, property, value) {
            console.log("set", target, property, value);
            return Reflect.set(...arguments);
        },
        get: function (target, property, recelver) {
            console.log("get", target, property, target[property]);
            if (target[property] == undefined) {
                //拼接脚本
                eval_env_script = target.name.replaceAll("_", ".") + '.' + property;
            }
            return target[property];
        },

    });
}

for(var i = 0; i < proxy_array.length; i++) {
    var proxy_function = proxy_array[i].replaceAll("_", ".");
    base_script += proxy_function + ' = ' + '{};\r\n';
    eval( proxy_function + ' = ' + 'vmProxy(function ' + proxy_array[i] + '(){})');
}

function get_env_script (source_js_code, count) {

    //最多循环conut次,防止一直无法得到环境
    for(var i = 0; i < count; i++) {
        try {
            eval(source_js_code);//需要补环境的js
            break;//成功后退出循环
        } catch(err) {
            if (err.message.indexOf('Cannot read') != -1) {
                eval_env_script += ' = "";';
            } else if (err.message.indexOf('is not a function') != -1) {
                eval_env_script += ' = function() {return {};}';
            }
            eval(eval_env_script);
            all_eval_env_script += "\r\n" + eval_env_script;
        }
    }

    all_eval_env_script = base_script + all_eval_env_script;
    console.log("result: \r\n" + all_eval_env_script);

    return all_eval_env_script;

}

自己的代码调用get_env_script传入code与循环次数即可使用,普通的环境是没什么问题的,自动吐出 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

class_c

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值