proxy的作用
proxy可以对目标函数或者对象进行拦截、调试。
它不直接操作对象,而是像代理模式,对对象的代理对象进行操作,同时,可以添加一些需要的额外操作。
proxy在js逆向中的使用
以下代码是对js中navigator对象挂上代理
function vmProxy(object) {
return new Proxy(object, {
set(target, property, value) {
//if (target.toString().includes("global")) {
// debugger;
// }
console.log("set: ", target, property, value);
return Reflect.set(...arguments);
},
get(target, property, receiver) {
if (target[property] == undefined) {
// if (property.toString().includes("setTimeout")) {
// debugger;
// }
// if (property.toString().includes("setInterval")) {
// debugger;
// }
console.warn("[*] get: ", property, target[property])
} else {
console.log("get: ", property, target[property])
} ;
return target[property];
}
});
}
navigator = {}
navigator = vmProxy(navigator)
使用如图
给navigator挂上代理后,执行js文件,在控制台可见,代码中有获取userAgent这个属性。所以在补环境中最好补上,以防止对ua的校验

image.png
结论
我们使用 Proxy 对全局遍历window、document、navigator等常见环境检测点进行代理,拦截代理对象的读取、函数调用等操作,并通过控制台输出,这样的话我们就能够实现检测环境自吐的功能,后续我们再针对吐出来的环境统一的进行补环境,这样就会方便的多