-
-
[分享] vmp 分析入门对vmp的理解方式
-
发表于:
2013-2-25 04:02
6559
-
本人菜鸟一个 求大牛多多指教
把本人近期 对vmp的分析和理解简单总结下 希望对刚刚开始研究vmp的朋友有些帮助废话不对说
经过对vmp的初步了解 目前看vmp 是以 虚拟堆栈运算为主 虚拟临时寄存器为辅的模式进行运算
vmp的edi 虚拟寄存器的首地址 虚拟寄存器的概念为了方便理解可以理解成数组 edi就是数组首地址初始化时一般寄存器个数 或者说数组大小为0x40(vmreg[0]~vmreg[0x3c])
vmp的ebp 就是虚拟堆栈的vesp 和 正常的esp基本没什么区别 在vmp对数据进程运算时主要依靠vesp来进行运算 虚拟寄存器一般只是保存临时变量并不参与实际运算(可能研究的时间短我也是刚入门还没有发现虚拟寄存器参与运算的现象)
vmp的虚拟指令(handler)也可以叫vmp的原子操作 所有的虚拟指令理论为0-ff个
在跟踪vmp时经常能看到类似
mov al,byte ptr ds:[esi-0x1] 和 mov ecx,dword ptr ds:[eax*4+0x6FCCD4]
这样的指令
其中 mov al,byte ptr ds:[esi-0x1] 是获取vmp运算所需的下一个handler的编号
al的最大值为ff所以 理论上是0-ff个
mov ecx,dword ptr ds:[eax*4+0x6FCCD4] 理解了al的含义 这个指令就好理解了
0x6FCCD4 为handler表的启示地址表的大小为ff*4+0x6FCCD4 写个脚本跑下handler表
去掉重复的就可以获得vmp中所有handler的起始地址了然后将指令简化下去掉花指令
结合上面两条指令的分析 可以看出esi在vmp的大致功能了 也就是eip也可以说是指令控制器
以上只是给刚入门的朋友介绍下我对vmp的简单理解希望对你们有帮助 大牛当然飘过了
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课