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++->分类选择预编译的文件头->选择不使用预补偿页眉