【原创】破解vmp程序的关键点

内容:
引用:
PART I:
vmp里面有很多handle,有一种handle很特殊,有几份copy,大致运算是:

not A
not B
and A , B

这个好像叫什么xx门的,它是计算jcc指令的关键点,一般爆破都是找jcc指令,因此,这条指令是破解的关键点


PART II:
11楼说的东西是基础,在这里:
http://hi.baidu.com/depteicn/blog/it...331add189.html

14楼也是基础的电路图


建议把这两个看懂,再向下看



PART III:

vmp里面有唯一的跳转指令,handle大概是这样的

mov e?x,[ebp]
add ebp,4
mov esi, e?x

这条handle是跳转指令,jmp,唯一的跳转,那么如何实现条件跳转呢?就要用到上面的那条唯一的逻辑运算handle


PART IV:

看到这里,大家应该明白了,vmp实现跳转,是先用上面的xx门,把eflag计算好,是跳还是不跳,然后决定选择哪一个地址,再用PART III里面的指令跳过去


PART V:

所以说要破解vmp要找到关键的jmphandle,确定这个handle是关键跳转,必须利用前面的xx门的计算来确定

资料:
引用:
看懂上面的就可以看下面回帖中的高级教程了,虽然离破解有点远,但是离还原有点近

感谢发哥,感谢B哥,感谢ccfer,感谢bughoho,感谢所有观众,纪念刘和珍君

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: var num1 = 10; var num2 = 20; var result = num1 - num2; console.log(result); 答案: console.log(num1 - num2); ### 回答2: VMP(Virtual Machine Program)是一种用于模拟虚拟机的编程语言,通常用于实现一些简单的计算功能。下面是一个用VMP程序演示JS减法的代码: ```vmp .var operand1 .var operand2 .var result .read operand1 .read operand2 .sub result, operand1, operand2 .print result ``` 以上代码首先声明了三个变量:`operand1`,`operand2`和`result`,分别用于存储运算的两个操作数和结果。 接着使用`.read`指令分别从输入中读取两个操作数的值。 然后使用`.sub`指令进行减法运算,将`operand1`减去`operand2`的结果存入`result`中。 最后使用`.print`指令输出结果。 在实际运行该VMP程序时,可以将它与一个VMP虚拟机一起使用,该虚拟机可以解释和执行VMP程序。通过输入两个操作数的值,虚拟机将会返回两个操作数的差作为输出结果。 需要注意的是,以上代码是一个简化的示例,实际的VMP程序可能会更加复杂,包含更多的指令和处理逻辑,以实现更复杂的功能。 ### 回答3: VMP(Virtual Machine Program)是一种虚拟机程序,用于模拟计算机或处理器的行为,并执行特定的指令集。下面是一个使用VMP实现一段JS减法的演示代码: ``` // 假设我们要计算 10 - 5 的结果 // 定义VMP指令集 const VMP_INSTRUCTIONS = [ { name: 'LOAD', // 加载指令 operation: function (registers, operand) { registers['R0'] = operand; } }, { name: 'SUBTRACT', // 减法指令 operation: function (registers, operand) { registers['R0'] -= operand; } }, { name: 'PRINT', // 打印指令 operation: function (registers) { console.log(registers['R0']); } } ]; // 定义VMP虚拟机程序 function runVMPProgram(program) { const registers = { 'R0': 0 // 定义寄存器R0,用于存储运算结果 }; program.forEach(instruction => { const opcode = instruction[0]; // 指令的操作码 const operand = instruction[1]; // 指令的操作数 // 根据操作码找到对应的指令 const vmpInstruction = VMP_INSTRUCTIONS.find(inst => inst.name === opcode); // 执行指令的操作 vmpInstruction.operation(registers, operand); }); } // 定义JS减法的VMP程序 const jsMinusVMPProgram = [ ['LOAD', 10], // 将操作数10加载到寄存器R0中 ['SUBTRACT', 5], // 从寄存器R0中减去操作数5 ['PRINT'] // 打印寄存器R0中的结果 ]; // 执行VMP程序 runVMPProgram(jsMinusVMPProgram); ``` 以上代码演示了如何使用VMP虚拟机程序模拟JS减法操作。首先定义了一组VMP指令集,其中包含LOAD、SUBTRACT和PRINT三种指令。然后定义了一个运行VMP程序的函数,其中通过循环执行指令集中的指令,并传入相应的操作数。最后定义了一个JS减法的VMP程序,将两个操作数10和5分别加载到寄存器R0中,并执行减法操作,最后打印结果。运行VMP程序之后,控制台会输出结果为5。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值