初始JSVMP

1.初始JSVMP

JSVMP是"JavaScript Virtual Machine Protection"的缩写,是一种前端代码虚拟化保护技术。它的核心思想是在JavaScript代码保护过程中引入代码虚拟化,将目标代码转换成自定义的字节码,这些字节码只有特殊的解释器才能识别,从而隐藏目标代码的关键逻辑。JSVMP的保护流程大致如下:服务器端读取JavaScript代码,进行词法分析、语法分析,生成AST语法树,然后生成私有指令,最后生成对应私有解释器,并将私有指令加密与私有解释器发送给浏览器。在执行时,一边解释一边执行。目前,JSVMP的逆向方法主要有三种:RPC远程调用、补环境、日志断点还原算

2.如何用jsvmp实现下面代码

console.log(2*5+8);

1.什么是栈

栈(stack)是一种类似数组的数据结构
栈的特点:

  1. 属于有序集合
  2. 遵从后进先出(LIFO)原则
  3. 最早进入栈中元素的位置叫做栈底,最后进入的叫做栈顶
  4. 新元素靠近栈顶,旧元素靠近栈底

2.实现过程

1.先计算 2* 5 =10

2.在计算 10 + 8 = 18;
3.console.log(18); //打印栈顶元素即可

3.设计指令

入栈操作 push 指令为 1
操作运算符 op * 指令为 2
操作运算符 op + 指令为 3
函数调用 console.log 指令为 4

2.手动生成指令集

第一步 2 和 5 分别入栈
入栈指令为1

1 2 1 5

第二步,需要用到 op *,因此,这里需要 指令 2

1 2 1 5 2

第三步 8入栈

1 2 1 5 2 1 8

第四步 需要用到 op +,因此,这里需要 指令 3

1 2 1 5 2 1 8 3

第五步 调用打印函数

1 2 1 5 2 1 8 3 4

function vmFunc(instList)
{function vm(pc,stack){stack = stack || [];let left,right,top;console.log(instList[9])while(1){let inst = instList[pc++]; //元素已取完,退出循环if(inst == undefined){break;}switch(inst){case 1:stack.push(instList[pc++]); //入栈,pc指针 +1break;case 2://操作运算符 op  *right = stack.pop();left  = stack.pop();stack.push(left * right);break;case 3://操作运算符 op  +right = stack.pop();left  = stack.pop();stack.push(left + right);break;                   case 4://函数调用 console.log top = stack.pop();console.log(top);break;default:throw {};}}}vm(0);
}vmFunc([1,2,1,5,2,1,8,3,4])

学习是漫长的事情,坚持一定很酷!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/10988.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux无root配置Node,安装nvm

1. 安装NVM: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash # 或者,如果你使用wget wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash 对于bash用户,可以运行&…

力扣Hot100-T8无重复字符的最长子串(经典)

(难度:中等)给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2: …

k8s kubectl 常用yaml

存储挂载pvc apiVersion: v1 kind: Pod metadata:name: hw-mountnamespace: cnoc-hw-storage#namespace: project-10321 spec:# nodeSelector:# csi.storage.k8s.io/lvm: "true"# nodeName: 10-10-10-10.hw# schedulerName: lvm-schedulercontainers:- name: busybo…

ollama离线安装,在CPU运行它所支持的哪些量化的模型

在线安装的链接: Download Ollama on LinuxGet up and running with large language models.https://ollama.com/download/linux 离线安装教程: 下载install.sh: https://ollama.ai/install.sh

2024OD机试卷-整型数组按个位值排序(java\python\c++)

题目:整型数组按个位值排序 题目描述 给定一个非空数组(列表),其元素数据类型为整型,请按照数组元素十进制最低位从小到大进行排序,十进制最低位相同的元素,相对位置保持 当数组元素为负值时,十进制最低位等同于去除符号位后对应十进制值最低位。 输入描述 给定一个…

26.使用CMake和CTest组织工程测试

文章目录 使用CMake和CTest组织工程测试软件测试CMake中如何组织测试测试属性使用CTestreference 欢迎访问个人网络日志🌹🌹知行空间🌹🌹 使用CMake和CTest组织工程测试 软件测试 软件相关的测试包括: 1.冒烟测试(S…

Java | Leetcode Java题解之第77题组合

题目&#xff1a; 题解&#xff1a; class Solution {List<Integer> temp new ArrayList<Integer>();List<List<Integer>> ans new ArrayList<List<Integer>>();public List<List<Integer>> combine(int n, int k) {List&l…

ES:聚合查询语法

基础查询结构&#xff1a; GET http://ip:prot/textbook/_search { "query" : { ...query子句... }, "aggs" : { "agg_name":{ "agg_type": { "agg_arg": agg_arg_value } } }, "sort" : { ..sor…

Tomcat7+ 弱口令 后台getshell漏洞

1 漏洞背景 Tomcat 是一个流行的开源Web应用服务器&#xff0c;用于部署和运行Java Web应用程序。Tomcat 7 版本中存在一个安全隐患&#xff0c;即默认的管理员密码可能较弱或者未被修改&#xff0c;攻击者可以利用这一漏洞登录到Tomcat的管理后台&#xff0c;并上传恶意的WAR…

二、使用插件一键安装HybridCLR

预告 本专栏将介绍如何使用这个支持热更的AR开发插件&#xff0c;快速地开发AR应用。 专栏&#xff1a; Unity开发AR系列 插件简介 通过热更技术实现动态地加载AR场景&#xff0c;简化了AR开发流程&#xff0c;让用户可更多地关注Unity场景内容的制作。 热更方案 基于Hybri…

ACAT2021纳新题(C语言)(旧)

ACAT2021纳新题&#xff08;C语言&#xff09; 前言说明&#xff1a;题目&#xff1a;1. 请分析下列代码的运行结果&#xff0c;并解释其原因。2&#xff0e;请分析下面函数的运行结果&#xff0c;并解释其原因。3&#xff0e;请分析下列代码的运行结果&#xff0c;并解释其原因…

物联网杀虫灯—新型的环保杀虫设备

型号推荐&#xff1a;云境天合TH-FD2S】物联网杀虫灯是一种新型环保杀虫设备&#xff0c;其中风吸式太阳能杀虫灯作为其一种特殊类型&#xff0c;展现了独特的工作原理和优势。 风吸式太阳能杀虫灯以太阳能电池板为电源&#xff0c;白天储存电源&#xff0c;晚上为杀虫灯提供电…

QSharedPointer的使用

在 Qt 框架中&#xff0c;QSharedPointer 是一个智能指针&#xff0c;用于自动管理对象的生命周期。当你试图将一个裸指针&#xff08;例如 QLabel*&#xff09;赋给一个 QSharedPointer<QLabel> 时&#xff0c;会出现错误。QSharedPointer 没有定义用于从裸指针赋值的操…

树莓派python开发

树莓派自带thonny 点亮LED灯 import RPi.GPIO as GPIO import time# 设置GPIO模式为BCM GPIO.setmode(GPIO.BCM)# 设置LED引脚 led_pin 18# 设置LED引脚为输出 GPIO.setup(led_pin, GPIO.OUT)# 点亮LED GPIO.output(led_pin, GPIO.HIGH)# 延时2秒 time.sleep(2)# 关闭LED GPI…

数字水印 | Arnold 变换的 Matlab 代码实现

&#x1f34d;原文&#xff1a; 图像加密笔记之 Arnold 变换及 Matlab 代码实现 &#x1f34d;写在前面&#xff1a; 在原文的基础上补全了代码。注意&#xff0c;Matlab 貌似是从 1 开始计数的&#xff0c;而非 0&#xff01; 1 核心代码 A r n o l d \mathsf{Arnold} Arnol…

通过linux花里胡哨的控制台,学习linux基础命令

今天这个B我装定了&#xff01; 前言命令集 开始1、cowsay &#xff08;让牛说话&#xff0c;够无聊的&#xff0c;但牛说的话是你输入的&#xff0c;细思极恐&#xff01;&#xff09;Debian/Ubuntu 安装命令&#xff1a;RHEL/CentOS/Fedora 安装&#xff1a;运行解释 2、fort…

Windows离线安装snmp服务

打开1里面有教程 选择“管理” 启动&#xff0c;发现不行 再把2拷贝到&#xff1a; 在启动就可以了&#xff08;查看服务&#xff1a;ctrlshiftEsc&#xff09;

【ROS2】节点

文章目录 ROS2 节点示例&#xff1a;创建并运行成功一个节点1. 创建功能包2. 编写源文件、CMakeLists.txt、package.xml3. 编译功能包4. 设置环境变量5. 运行节点6. 查看节点 参考链接 ROS2 节点 机器人的每一项功能&#xff0c;都被称为是一个节点。 每个节点都是一个独立的…

ASP.NET一种多商家网络商店的设计与实现

摘 要 21世纪是网络的世纪&#xff0c;电子商务随之将成为主流商业模式&#xff0c;多商家网络商店系统就是一个C2C型的电子商务系统。本文详细论述了采用ASP.NET 2005 和 SQL Server 2000等技术实现的一个多商家网络商店的过程。论文首先阐述了本设计题目的选题意义、背景&a…

Swift 使用枚举协议CaseIterable遍历枚举所有值

在Swift中&#xff0c;可以使用.allCases属性来枚举一个符合CaseIterable协议的枚举的所有情况。使用不同的方法&#xff0c;如for-in循环&#xff0c;reduce&#xff0c;filter和map函数&#xff0c;你可以迭代一个枚举。 什么是CaseIterable协议&#xff1f; CaseIterable是…