运行 cpp 中的 shellcode
Run shellcode in cpp
我正在尝试 运行 cpp 中的 shellcode(shellcode 来自用户,因此程序应该是动态的)
当我尝试 运行 我的程序时,我得到了一个异常,我认为它告诉我我不能 运行 来自数据部分的代码。
之后我尝试创建一个新的可执行部分并将我的数据放在那里但它没有用
#pragma section(".shell",read,execute)
__declspec(allocate(".shell"))
unsigned char code[] =
"\xB8\x04\x00\x00\x00";
// Function pointer points to the address of function.
int(*shell)(); //Function pointer
// Initializing a function pointer with the address of a shellcode
shell = ((int(*)())&code);
// Execute shellcode
int a = shell();
有人可以向我解释我做错了什么吗?
你写的都是正确的。仅仅因为你的 shellcode 只包含 mov eax, 4
就引发了异常。 Windows 分配器将您的部分与页面大小对齐并用零填充它,但 0x00
是 add byte ptr [rax], al
的操作码。现在你的 shellcode 中不仅有 mov eax, 4
,还有:
mov eax, 4
add byte ptr [rax],al
add byte ptr [rax],al
....
在 mov
之后,您尝试在 eax
地址 0x00000004
处获取值,其中放置了 Windows 页保护。
现在你有 0xC0000005: Access violation on write "0x0000000000000004"
.
将 ret
添加到您的 shellcode:
unsigned char code[] = ""\xB8\x04\x00\x00\x00\xC3"
并且不会执行未使用的命令并成功退出。
我正在尝试 运行 cpp 中的 shellcode(shellcode 来自用户,因此程序应该是动态的) 当我尝试 运行 我的程序时,我得到了一个异常,我认为它告诉我我不能 运行 来自数据部分的代码。 之后我尝试创建一个新的可执行部分并将我的数据放在那里但它没有用
#pragma section(".shell",read,execute)
__declspec(allocate(".shell"))
unsigned char code[] =
"\xB8\x04\x00\x00\x00";
// Function pointer points to the address of function.
int(*shell)(); //Function pointer
// Initializing a function pointer with the address of a shellcode
shell = ((int(*)())&code);
// Execute shellcode
int a = shell();
有人可以向我解释我做错了什么吗?
你写的都是正确的。仅仅因为你的 shellcode 只包含 mov eax, 4
就引发了异常。 Windows 分配器将您的部分与页面大小对齐并用零填充它,但 0x00
是 add byte ptr [rax], al
的操作码。现在你的 shellcode 中不仅有 mov eax, 4
,还有:
mov eax, 4
add byte ptr [rax],al
add byte ptr [rax],al
....
在 mov
之后,您尝试在 eax
地址 0x00000004
处获取值,其中放置了 Windows 页保护。
现在你有 0xC0000005: Access violation on write "0x0000000000000004"
.
将 ret
添加到您的 shellcode:
unsigned char code[] = ""\xB8\x04\x00\x00\x00\xC3"
并且不会执行未使用的命令并成功退出。