加密与解密——虚拟机的设计

虚拟机的设计

这里说的虚拟机是一种解释执行的系统,类似现在许多解释执行的语言,它可以将自定义的中间字节码当作机器码来执行,仿佛就是在一台机器上执行的一样。而虚拟机保护技术就是基于这样的思想,软件作者通过设计一个虚拟机来执行关键算法和代码,这样,破解人员想要还原出算法,就必须要先对这个解释器进行全方位的分析,最后找出自定义的指令集,才能还原出伪汇编代码,这样使得逆向分析的工作量大大增加,再配合上诸多反跟踪技术,完全是分析人员的噩梦。

 

框架

1.VstartVM,初始化虚拟机及其必要环境

2.将Bytecode通过VMDispatch分配到各个Handler

3.由Handler来完成一条指令

 

VstartVM

VstartVM对虚拟机进行初始化,主要包括分配虚拟CPU环境(通常只是所有通用寄存器以及栈)

约定:(在整个循环中总是遵守)

  • esp表示当前虚拟栈顶
  • edi表示VMContext(寄存器变量)
  • esi表示虚拟eip(字节码地址)
  • ebp表示真实的栈底
struct VMContext //edi指向这个结构的开头,esp在这个结构的后方

{

DWORD v_eax;

DWORD v_ebx;

DWORD v_ecx;

DWORD v_edx;

DWORD v_esi;

DWORD v_edi;

DWORD v_ebp;

DWORD v_efl;

}

 

要初始化虚拟机,先将一系列寄存器压栈存储起来,然后分配一个较大的空间用来保存VMContext,之后,然后初始化VMContext,再进行实际

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值