【原创】VMProtect代码还原技术
来源:互联网 发布:土地测亩仪软件下载 编辑:程序博客网 时间:2024/06/05 03:13
发现大家对VMProtect这个壳比较害怕,所以找了个最新的版本分析了一下,发现他有很多垃圾指令,并且还使用了虚拟机保护,而且每个被他加壳后的程序,虚拟机的代码好像还不一样。如果要做VMProtect的自动脱壳机,应该是要先去掉垃圾指令,再重组指令,再自动识别虚拟机指令的含义,最后重组虚拟机代码,还原出加壳前的EXE。
看了一下VMProtect的垃圾花指令,其实是很有规律的,主要就是在某一条指令前加上多条无效指令,例如下面这条指令:
mov eax, ebx
VMProtect可能会在这条指令前面加上这些无效指令:
mov al, cl
sete eax
因此,根据最后一条指令是很容易识别出前面的垃圾指令的。
折腾了一个下午,写了个花指令去除程序(离自动脱壳还很远,不过如果只是要调试的话应该很容易了)。
基本原理如下:
1.从指定位置或当前eip处开始读取BB块(如果遇到e8,e9跳转就相应的转到目标地址继续读取),生成指令描述表
2.第1次扫描指令描述表识别clc、stc、cmc无效指令
3.第2次扫描指令描述表识别test、cmp无效指令
4.第3次倒着扫描指令描述表,识别赋值、运算等无效指令
5.扫描push、pop指令
看一下运行效果:
取虚拟机指令的代码:
还原后的效果:
再找一个虚拟机指令处理代码:
还原后的效果:
看了一下VMProtect的垃圾花指令,其实是很有规律的,主要就是在某一条指令前加上多条无效指令,例如下面这条指令:
mov eax, ebx
VMProtect可能会在这条指令前面加上这些无效指令:
mov al, cl
sete eax
因此,根据最后一条指令是很容易识别出前面的垃圾指令的。
折腾了一个下午,写了个花指令去除程序(离自动脱壳还很远,不过如果只是要调试的话应该很容易了)。
基本原理如下:
1.从指定位置或当前eip处开始读取BB块(如果遇到e8,e9跳转就相应的转到目标地址继续读取),生成指令描述表
2.第1次扫描指令描述表识别clc、stc、cmc无效指令
3.第2次扫描指令描述表识别test、cmp无效指令
4.第3次倒着扫描指令描述表,识别赋值、运算等无效指令
5.扫描push、pop指令
看一下运行效果:
取虚拟机指令的代码:
还原后的效果:
再找一个虚拟机指令处理代码:
还原后的效果:
- 【原创】VMProtect代码还原技术
- vmprotect
- vmprotect
- 简单三步教你利用VMProtect轻松保护你的代码
- VMProtect 1.1
- VMProtect 1.61
- VMProtect 1.62
- [原创]用PowerShell实现递归还原变量
- 代码还原示例
- sql 还原代码
- 数据还原代码(C#)
- XMl代码还原
- XMl代码还原
- SQL还原数据库代码
- CSS代码还原脚本
- arm 汇编代码还原--for语句还原
- 破解“还原卡”技术方法
- [半原创]指纹识别+谷歌图片识别技术之C++代码
- zz (C语言)共用体union的用法举例
- Android多线程:Looper和HandlerThread
- 让天之痕窗口化运行!
- 简单分析某个棋牌游戏的抢位置功能
- 【原创】Windows处理驱动Path流程
- 【原创】VMProtect代码还原技术
- 昨日的病毒简单分析了下【附Bin样本】
- Android开发案例:多线程中的Handler
- 世界气温总体下降
- myeclipse更改工程名称及发布名称
- 用 _findfirst 和 _findnext 查找文件(windows可用)
- 如何编写高效的 Android 代码
- windows XP 虚拟域名配置路径
- 在升序后降序数组中 找到最大的数