• VMProtect 学习笔记(转载)


    写的不错,分享下。。。

    MProtect之所以叫做VMProtect,因为它是以VMVirtual Machine)虚拟机为核心来实现的,这里的虚拟机并不是传统意义上的虚拟机,其是将汇编指令进行虚拟化,让其失去原本容易理解的含义,增大对逆向工程的难度。

    一.虚拟机

    1) 虚拟机指令(VM_Handler

    VMP中的虚拟机指令可分为一下几类:

    出入栈:PushRegPushImmPushEspPopRegPopEsp...

    运算:AddDivIDivImulMulNorShlShr...

    内存读写:ReadDsReadFsWriteDsWriteFs...

    一些特殊的指令:GetHashJmpCpuidCallApiRdtsc...

    当然还有一些其他的如浮点运算的指令。

    在这些指令中又可根据操作数大小的不同来进行细分。VMP将原程序的指令进行分解转换为由这些Handler组成的新的指令操作集合,实现程序的虚拟化。这些Handler的地址存放于一张指令表中,通过调度执行。从Opcode的解码过程中可以看出,该表的大小为0x100

    2) 虚拟机调度(VM_Dispatch

    VMP中的虚拟机调度一般以这样的形式存在:

    Opcode 解码

    mov Reg0,dword ptr ds:[Reg1*4+<VMHandlerTable>]

    Handler地址解码

    转到Handler执行

    3) 虚拟机Context

    VM_Context主要涉及对真实环境中上下文的保存,以及一些数据的传递。其组成主要有:

    +00 RELOC

    +04 ANTIDUMP

    +08 ECX

    +0C EDI

    +10 EDX

    +14 EFL

    +18 EBP

    +1C ESI

    +20 EAX

    +24 EBX

    +28 ESI

    +2C RETADDR

    +30 INITKEY

    其中的寄存器存储位置在每个虚拟机中都有所不同。VMP中对一些一些寄存器的使用也有规定比如:ESI记录opcode的位置(VM_Eip),EBP记录VM使用堆栈的位置(VM_Esp),EDI中储存着VM_Context的偏移。

    下载地址:http://www.vdisk.cn/down/index/19534752

  • 相关阅读:
    插槽分发内容
    Java学习-sgg-day07-20200422-复习
    Java学习-sgg-day06-20200421-今天晚上在下载资料
    Java学习-sgg-day05-20200420
    Java学习之面向对象之总结-sgg-day04-20200419
    Java学习之Eclipse的使用-sgg-day04-20200419
    Java学习之面向对象-sgg-day04-20200419
    Java学习之面向对象-sgg-day03-20200418
    Java学习总结-前三天
    Java学习之-sgg-day03-20200418
  • 原文地址:https://www.cnblogs.com/Sendige/p/9600760.html
Copyright © 2020-2023  润新知