首页 > 其他分享 >js逆向之补环境-proxy

js逆向之补环境-proxy

时间:2024-07-30 16:30:19浏览次数:6  
标签:username 浏览器 之补 qiao age 环境 js proxy

目录

【1】补环境介绍

浏览器环境:是指JS代码在浏览器中的运行时环境,它包括V8自动构建的对象(即ECMAScript的内容,如Date、Array),浏览器(内置)传递给V8的操作DOM和BOM的对象(如document、navigator);
Node环境:是基于V8引擎的Js运行时环境,它包括V8与其自己的内置API,如fs,http,path;

Node环境与浏览器环境的异同点可以简单概括如图:
image

所以我们所说的“补浏览器环境”其实是补浏览器有而Node没有的环境,即补BOM和DOM的对象;

当我们每次把辛辛苦苦扣出来的“js加密算法代码”,并且放在浏览器环境中能正确执行后,就需要将它放到Node环境中去执行,而由于Node环境与浏览器环境之间存在差异,会导致部分JS代码在浏览器中运行的结果,与在node中运行得到的结果不一样,从而影响我们最终逆向成果

window对象结果图
image
image
image
image
image
image
image
image
image
image
image

【2】proxy代理监控器

// 简单版本,便于理解
var qiao = {
    username : "qiao",
    age: 25,
}
var proxy = new Proxy(qiao, {
    get(target, property, receiver) {
	//target对象
	//property目标值
	//receiver不怎么使用
        console.log(target, property, receiver)
        return Reflect.get(target, property);
    },
    set(target, property, value, receiver) {
        console.log("setter");
        Reflect.set(target, property, value);
    }
});

proxy.username;  // 走get的方法并打印{ username: 'qiao', age: 25 } username { username: 'qiao', age: 25 }
proxy.age = 26;  // 走set并打印setter
proxy.age;	 // 走get的方法并打印{ username: 'qiao', age: 26 } age { username: 'qiao', age: 26 }

封装版本

function getEnv(proxy_array) {
    for(let i=0; i<proxy_array.length; i++){
        handler = `{
            get: function(target, property, receiver) {
                   console.log('方法:get','    对象:${proxy_array[i]}','    属性:',property,'    属性类型:',typeof property,'    属性值类型:',typeof target[property]);
                   return target[property];
            },
            set: function(target, property, value, receiver){
                    console.log('方法:set','    对象:${proxy_array[i]}','    属性:',property,'    属性类型:',typeof property,'    属性值类型:',typeof target[property]);
                    return Reflect.set(...arguments);
            }
        }`;
        eval(`
            try{
                ${proxy_array[i]};
                ${proxy_array[i]} = new Proxy(${proxy_array[i]},${handler});
            }catch(e){
                ${proxy_array[i]}={};
                ${proxy_array[i]} = new Proxy(${proxy_array[i]},${handler});
            }
        `);
    }
}

使用

var qiao = {
    username : "qiao",
    age: 25,
}

getEnv(["qiao"])
qiao.username // get
qiao.age = 16 // set

/*
方法:get     对象:qiao     属性: username     属性类型: string     属性值类型: string
方法:set     对象:qiao     属性: age          属性类型: string     属性值类型: number
*/

标签:username,浏览器,之补,qiao,age,环境,js,proxy
From: https://www.cnblogs.com/a438842265/p/18332426

相关文章

  • 使用Nginx Proxy Manager配置Halo的反向代理和申请 SSL 证书
    本文介绍NginxProxyManager配置Halo的反向代理和申请SSL证书,如需要了解Halo2的安装,参考如何在Linux云服务器上通过DockerCompose部署安装Halo,搭建个人博客网站?。目录安装NginxProxyManagerNginxProxyManager安装新建docker-compose.yaml启动NPM配置Halo的反向代理申......
  • 将字符串转换为json格式
    我有一个Excel电子表格,当我直接在python中读取它时,它失败了。所以我先在PowerQuery中读,然后在python中读,但是在PowerQuery中读时丢失了json双引号。我尝试了demjson3,但无法成功。我尝试用Python逐行阅读,这不是一个好主意。我希望能够在python中将其呈现为json。......
  • 超级好用的JSON可视化工具
    理想的在线JSON工具,应该支持快速格式化、可压缩、快捷复制、可下载导出,对存在语法错误的地方能明确显示。提供搜索定位功能,可视区足够大,最好支持全屏。经过多方面对比,以下工具能满足这个需求: 工具地址直达:在线JSON可视化工具工具支持全屏模式操作,通过搜索框可以快速进行查找,双......
  • 招募[星巴克项目]- Node.js开发
    职位职责:负责公司Node.js和TypeScript技术栈相关项目的开发和维护工作。参与系统架构设计,编写高性能、高可用的Node.js应用程序。优化并提升现有系统的性能和可靠性。制定有效的监控方案,及时响应和解决线上问题。持续跟进新技术动向,积极学习和实践新技术。职位要求:1......
  • 使用 json 列规范化 Dataframe
    您好,我正在寻找一种有效的方法来标准化包含json数据列的数据框。我从保存为数据帧的网站获取json响应。结构如下所示在此处输入图像描述我有3个标准列,第4列包含我想要规范化的json数据,并创建使用前3列中的值复制每行的行以及拆分的行第四列。如下......
  • springsecurity整合thymeleaf(thymeleaf模板引擎等价于jsp)
    创建一个springboot工程导入依赖<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><dependency>......
  • 069基于SSM+Jsp的智能停车场管理系统
     开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9系统展示系统功能界面用户注册用户信息车位信息管理员登录界面管理员功能界面用户管理车位信息管理......
  • 三行代码高搞定nestjs静态图片映射方案
    方案一@nestjs/serve-static库映射上代码npmi@nestjs/serve-staticimport{ServeStaticModule}from'@nestjs/serve-static';import{join}from'path';conststaticPath=join(__dirname,'..','/public/');@Module({......
  • JSP-概念与应用
    1.JSP是什么?JSP是一种基于Java的技术,用于创建动态网页。JSP允许在HTML中嵌入Java代码,这些代码在服务器端执行。2.Java的工作原理当浏览器请求一个JSP页面时,服务器将JSP文件编译成为一个Servlet(Java类)。这个Servlet生成HTML内容并发送回客户端(浏览器)3.JSP九大内置对......
  • js-数组内置函数-filter、map、forEach、reduce
    1、过滤数组-filter筛选数组元素,并生成新数组//过滤出分数为60分以上的数据<script>constarr=[{'name':'张三','score':80},{'name':'张六','score':50},{'name':'李四','score&#......