初始JSVMP

2024-05-12 23:20
文章标签 初始 jsvmp

本文主要是介绍初始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])

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

这篇关于初始JSVMP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/984029

相关文章

MySQL数据库介绍——初始数据库MySQL

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。  公众号:网络豆云计算学堂 座右铭:低头赶路,敬事如仪 个人主页: 网络豆的主页​​​​​ 目录 写在前面: 一.数据库基础知识 1.什么是数据库 数据库的发展⼤致划分为以下⼏个阶段: 其种类⼤概有3种: 2.表 2.1数据类型 2.2主键 二.数据库技术构成 1.数据库系统 1.2

初始MYSQL数据库(2)——创建、查询、更新、删除数据表的相关操作

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏: MYSQL 前面我们学习了创建、删除数据库以及创建、查看、删除数据表的相关操作。 我们知道数据库中所存储的数据其实就是数据表中一条一条的记录。但是我们在创建数据表时,其没有存放任何数据。因此今天我们就来学习如果在数据表中存储数据记录,以及查看、删除等操作。 对数据表的一系列操作,我

苍穹初始-云与应用设计

1.“云”与“应用”:顶层模型 “云”、“应用”是金蝶云·苍穹领域模型的顶层模型,也是业务的顶层设计 业务划分微服务划分数据库分库项目工程设计 2.动态领域模型:“云”与“应用” 3.“云”:标准产品云划分 4.“云”:定义 一个完整的业务领域解决方案一个业务云中可包括多个应用一个业务云与其他业务云可有业务相关性通常一个业务云的数据存放在同一个数据库中,也支持将几个业务云数据存

Cobalt Strike 4.8 用户指南-第五节-获取初始访问

Cobalt Strike 有多个选项,有助于在目标上建立初始访问。这些选项包括剖析潜在目标、创建payload和投放payload。 # 5.1、客户端 System Profiler System Profiler 是一个为客户端攻击提供的侦察工具。这个工具启动一个本地的 web 服务器,并对访问者进行指纹识别。System Profiler 提供通过用户浏览器发现的应用和插件的列表。Sy

使用BDT利率二叉树模型来计算期权的初始价值

Black-Derman-Toy (BDT) 模型是于1990年开发的一种用于金融市场的利率模型。这个模型是一个单因子短期利率模型,它假设利率遵循一个均值回归过程,即利率随时间趋向于回归到长期平均值。 BDT模型的关键特点包括: 它能够校准到初始的利率期限结构,使其对固定收益衍生品(如债券和利率期权)的定价非常有用。模型考虑了波动率和均值回归参数,以更好地反映利率的行为。BDT模型假设短期利率

Qt-初始Qt

1. Qt背景介绍 1.1 什么是Qt Qt是⼀个跨平台的C++图形⽤⼾界⾯应⽤程序框架。它为应⽤程序开发者提供了建⽴艺术级图形界⾯所需的所有功能。它是完全⾯向对象的,很容易扩展。Qt为开发者提供了⼀种基于组件的开发模式,开发者可以通过简单的拖拽和组合来实现复杂的应⽤程序,同时也可以使⽤C++语⾔进⾏⾼级开发。 **图形⽤⼾界⾯:**指采⽤图形⽅式显⽰的计算机操作⽤⼾界⾯,是计算机

初始MYSQL数据库(1)——创建、删除数据库和数据表的相关操作

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏: MYSQL 目录 数据库的概念 数据库的相关操作 常用的数据类型  数值型  字符串类型 日期类型 数据表的相关操作 练习 数据库的概念 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。我们也可以将数据存储在文件中,但是在文件中读写数

Go开发运维:Go项目工程化进行初始配置

目录 一、实验 1.环境 2.初始化Go项目 3.Go项目工程化 4. 导入Gin包 5.下载viper与logrus依赖 二、问题 1.Windows如何进行go的版本升级 2. Go mod常用命令 3.下载Gin依赖失败 一、实验 1.环境 (1)主机 表1 主机 系统 软件版本备注Windows11VS Code1.92.2go1.20.4

Java之初始泛型

1 包装类 在Java中,由于基本类型不是继承自Object,为了在泛型代码中可以支持基本类型,Java给每个基本类型都对应了一个包装类型。 1.1 基本数据类型和对应的包装类 基本数据类型包装类byteByteshortShortintIntegerlongLongfloatFloatdoubleDoublecharCharacterbooleanBoolean 1.2 装箱和拆箱 p

Java 获取一天初始时间和结束时间

Java 获取一天初始时间和结束时间 long current=System.currentTimeMillis();long zero=current/(1000*3600*24)*(1000*3600*24)-TimeZone.getDefault().getRawOffset();String start = new Timestamp(