特点
不同的压缩壳会先将 pe 文件压缩,载入内存后进行解压缩(TLS函数内)然后运行,而 vmp 是修改 pe文件中的汇编指令为一种 “伪指令” ,这些伪指令被虚拟机引擎解析,代替cpu去执行这些指令(如JVM和.NET),一般一条正常指令会对应多条伪指令(多是些无意义的跳转),所以被 vmp 加壳的程序速度会变慢。
不同的虚拟机支持的 “伪指令” 不同,原则上只要虚拟指令集一变动,那原本的伪指令的解释就会发生变化。,所以很难针对所有 vmp 壳写出一个通用的注册机。要逆向被VM SDK保护起来的原始代码,只有手工分析这段虚拟指令,找到虚拟指令和原始汇编的对应关系,然后重写出原始程序的代码,完成算法的逆向和分析。
举例
比如这是一个正常的x86函数调用:
push uType
push lpCaption
push lpText
push hWnd,
call MessageBox
被 vm 之后:
vPushMem uType
vPushMem lpCaption
vPushMem lpText
vPushMem hWnd,
vCall vCode
此时的虚拟指令只能被VM虚拟解释器执行,普通cpu无法解析,所以我们用调试器看到的被vm后的就是一大堆的无意义的代码。
今天的文章[加壳脱壳] VMP壳原理简介分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/33545.html