初始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指针 +1
                    break;
                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])

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值