补环境主要是补DOM和BOM,一些nodejs没有的属性啊之类。关于 Proxy 对象用来补环境是很方便的,例如监听了window对象,那么运行一些混淆的代码,就能判断该方法做了什么改变。当混淆的js想要获取window的某个属性,就可以通过拦截然后输出到控制台,然后我们可以补下来。
const proxy = new Proxy(obj, {
get(target, prop) {
console.log("方法:Get ||","对象", name, '属性', prop, '值:', target[prop]);
return target[prop];
},
set(target, prop, value) {
console.log("方法:Set ||","对象", name, '属性', prop, '修改值:', value);
target[prop] = value;
return true;
}
});
完整JS代码:
function InterceptorArray(ObjArray) { // 接收变量名的字符串数组
for (const name of ObjArray) {
const obj = eval(name); // 获取原对象
const proxy = new Proxy(obj, {
get(target, prop) {
console.log("方法:Get ||","对象", name, '属性', prop, '值:', target[prop]);
return target[prop];
},
set(target, prop, value) {
console.log("方法:Set ||","对象", name, '属性', prop, '修改值:', value);
target[prop] = value;
return true;
}
});
eval(`${name} = proxy`); // 替换原变量
}
}
InterceptorArray(['a', 'c']); // 传入变量名的字符串数组