首页
社区
课程
招聘
[分享] vmp 分析入门对vmp的理解方式
2013-2-25 04:02 6017

[分享] vmp 分析入门对vmp的理解方式

2013-2-25 04:02
6017
本人菜鸟一个 求大牛多多指教

把本人近期 对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的简单理解希望对你们有帮助 大牛当然飘过了

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞0
打赏
分享
最新回复 (1)
雪    币: 272
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
AASSMM 2013-2-25 05:19
2
0
不错,继续继续
游客
登录 | 注册 方可回帖
返回