当前位置: 首页 > news >正文

【JS逆向学习】补环境代理(Proxy)方法

自动化吐环境

本文主要是实现一个自动化吐环境的方法,对 ProxyReflect 不太了解的朋友可以阅读文章Javascript之Proxy、Reflect,里面对 ProxyReflect 做了简单介绍

代理单个对象
window = new Proxy(window, {set(target, property, value, receiver) {console.log("设置属性set window", property, typeof value);return Reflect.set(...arguments);},get(target, property, receiver) {console.log("获取属性get window", property, typeof target[property]);return target[property]}
});
document = new Proxy(document, {set(target, property, value, receiver) {console.log("设置属性set document", property, typeof value);return Reflect.set(...arguments);},get(target, property, receiver) {console.log("获取属性get document", property, typeof target[property]);return target[property]}
});
navigator = new Proxy(navigator, {set(target, property, value, receiver) {console.log("设置属性set navigator", property, typeof value);return Reflect.set(...arguments);},get(target, property, receiver) {console.log("获取属性get navigator", property, typeof target[property]);return target[property]}
});
location = new Proxy(location, {set(target, property, value, receiver) {console.log("设置属性set location", property, typeof value);return Reflect.set(...arguments);},get(target, property, receiver) {console.log("获取属性get location", property, typeof target[property]);return target[property]}
});
history = new Proxy(history, {set(target, property, value, receiver) {console.log("设置属性set history", property, typeof value);return Reflect.set(...arguments);},get(target, property, receiver) {console.log("获取属性get history", property, typeof target[property]);return target[property]}
});
screen = new Proxy(screen, {set(target, property, value, receiver) {console.log("设置属性set screen", property, typeof value);return Reflect.set(...arguments);},get(target, property, receiver) {console.log("获取属性get screen", property, typeof target[property]);return target[property]}
});
方法封装
function getEnvs(proxyObjs) {for (let i = 0; i < proxyObjs.length; i++) {const handler = `{get: function(target, property, receiver) {console.log("方法:", "get  ", "对象:", "${proxyObjs[i]}", "  属性:", property, "  属性类型:", typeof property, ", 属性值:", target[property], ", 属性值类型:", typeof target[property]);return target[property];},set: function(target, property, value, receiver) {console.log("方法:", "set  ", "对象:", "${proxyObjs[i]}", "  属性:", property, "  属性类型:", typeof property, ", 属性值:", value, ", 属性值类型:", typeof target[property]);return Reflect.set(...arguments);}}`;eval(`try {${proxyObjs[i]};${proxyObjs[i]} = new Proxy(${proxyObjs[i]}, ${handler});} catch (e) {${proxyObjs[i]} = {};${proxyObjs[i]} = new Proxy(${proxyObjs[i]}, ${handler});}`);}
}
测试代码
window = global;
proxyObjs = ['window', 'document', 'location', 'navigator', 'history', 'screen']
getEnvs(proxyObjs);
console.log(window.test);
window.name = "Jim";
console.log(window.name);

OUTPUT:

方法: get   对象: window   属性: test   属性类型: string , 属性值: undefined , 属性值类型: undefined
undefined
方法: set   对象: window   属性: name   属性类型: string , 属性值: Jim , 属性值类型: undefined
方法: get   对象: window   属性: name   属性类型: string , 属性值: Jim , 属性值类型: string
Jim

😄这段代码如同一把瑞士军刀,实现了自动化吐环境,缺啥补啥,妈妈再也不用担心我了!这段代码比快递小哥还要准时,比厨房小帮手还要灵巧,让你的程序世界充满欢乐和便利!赶紧拿着这段神奇的代码,去征服编程世界吧!

相关文章:

  • 【数据结构】链式队列
  • FlinkSql一个简单的测试程序
  • Docker中部署flink集群的两种方式
  • SQL字符集
  • Web 前端 UI 框架Bootstrap简介与基本使用
  • 手拉手Vite+Vue3+TinyVue+Echarts+TailwindCSS
  • 武汉AAA企业信用等级认证
  • 【MATLAB】 EWT信号分解+FFT傅里叶频谱变换组合算法
  • 【DAY03 软考中级备考笔记】存储系统,总线系统,输入输出系统和可靠性
  • verilog学习
  • vue 使用docx库生成word表格文档
  • 编程笔记 Golang基础 013 格式化输入输出
  • 企业级SAS盘SSDPM1643a PM1653 Nytro 2050 KPM71VUG3T20固态硬盘
  • Rust-知多少?
  • mysql-多表查询-内连接
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • co模块的前端实现
  • create-react-app做的留言板
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • JAVA_NIO系列——Channel和Buffer详解
  • Java新版本的开发已正式进入轨道,版本号18.3
  • jQuery(一)
  • JSONP原理
  • Linux中的硬链接与软链接
  • Python 基础起步 (十) 什么叫函数?
  • Python打包系统简单入门
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 利用jquery编写加法运算验证码
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 三栏布局总结
  • 与 ConTeXt MkIV 官方文档的接驳
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 通过调用文摘列表API获取文摘
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • #大学#套接字
  • #控制台大学课堂点名问题_课堂随机点名
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (1)(1.11) SiK Radio v2(一)
  • (1)Nginx简介和安装教程
  • (2020)Java后端开发----(面试题和笔试题)
  • (AngularJS)Angular 控制器之间通信初探
  • (bean配置类的注解开发)学习Spring的第十三天
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (三) diretfbrc详解
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (转)LINQ之路
  • (转)大型网站的系统架构
  • ***通过什么方式***网吧
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .Net - 类的介绍