-
-
[旧帖] [分享]VM程序简单介绍。还差2KX,怎么样才能得到呢? 0.00雪花
-
发表于: 2014-3-28 14:34 1207
-
我是菜鸟,说的不对的地方请指教。谢谢大家!
//在冯~诺依曼的计算机体系结构下,由于执行代码和数据都是存在于内存中的,所以进行代码和数据的混淆成了破解和HACK的方便之门。
在内存中,代码段是很容易被反汇编的,数据段都是一些地址,所以有人就将代码段的代码 (指令)存放到了 数据段中,来增加反汇编的难度。这就是VM程序。
下面就是一个VM程序例子。
#include <windows.h>
const BYTE MyPush = 0x11;
const BYTE MyCall = 0x22;
const BYTE MyEnd = 0x33;
BYTE
DataSec[]={
MyPush ,0x00,0x00,0x00,0x00,
MyPush ,0x00,0x00,0x00,0x00,
MyPush ,0x00,0x00,0x00,0x00,
MyPush ,0x00,0x00,0x00,0x00,
MyCall ,0x00,0x00,0x00,0x00,
MyEnd };
__declspec(naked) void VM(PVOID DataSec)
{
__asm
{
//取得参数
mov ecx,dword ptr ss:[esp+4]
__Start:
//得第一个字节
mov al,byte ptr ds:[ecx]
//判断指令
cmp al,MyPush
je __Push
cmp al,MyCall
je __Call
cmp al,MyEnd
je __End
__Push:
inc ecx //往后加1
mov edx,dword ptr ds:[ecx]
push edx
add ecx,4//加4
jmp __Start
__Call:
inc ecx
mov edx,dword ptr ds:[ecx]
call edx
add ecx,4
jmp __Start
__End:
ret
}
}
void main()
{
char *Caption = "VM";
char *Text = "Hello";
*(DWORD*)(DataSec+ 5 + 1) = (DWORD)Caption;
*(DWORD*)(DataSec + 10 + 1) = (DWORD)Text;
*(DWORD*)(DataSec + 20 + 1) = (DWORD)MessageBoxA;
//执行虚拟指令
VM(DataSec);
}
//在冯~诺依曼的计算机体系结构下,由于执行代码和数据都是存在于内存中的,所以进行代码和数据的混淆成了破解和HACK的方便之门。
在内存中,代码段是很容易被反汇编的,数据段都是一些地址,所以有人就将代码段的代码 (指令)存放到了 数据段中,来增加反汇编的难度。这就是VM程序。
下面就是一个VM程序例子。
#include <windows.h>
const BYTE MyPush = 0x11;
const BYTE MyCall = 0x22;
const BYTE MyEnd = 0x33;
BYTE
DataSec[]={
MyPush ,0x00,0x00,0x00,0x00,
MyPush ,0x00,0x00,0x00,0x00,
MyPush ,0x00,0x00,0x00,0x00,
MyPush ,0x00,0x00,0x00,0x00,
MyCall ,0x00,0x00,0x00,0x00,
MyEnd };
__declspec(naked) void VM(PVOID DataSec)
{
__asm
{
//取得参数
mov ecx,dword ptr ss:[esp+4]
__Start:
//得第一个字节
mov al,byte ptr ds:[ecx]
//判断指令
cmp al,MyPush
je __Push
cmp al,MyCall
je __Call
cmp al,MyEnd
je __End
__Push:
inc ecx //往后加1
mov edx,dword ptr ds:[ecx]
push edx
add ecx,4//加4
jmp __Start
__Call:
inc ecx
mov edx,dword ptr ds:[ecx]
call edx
add ecx,4
jmp __Start
__End:
ret
}
}
void main()
{
char *Caption = "VM";
char *Text = "Hello";
*(DWORD*)(DataSec+ 5 + 1) = (DWORD)Caption;
*(DWORD*)(DataSec + 10 + 1) = (DWORD)Text;
*(DWORD*)(DataSec + 20 + 1) = (DWORD)MessageBoxA;
//执行虚拟指令
VM(DataSec);
}
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
赞赏
雪币:
留言: