将shellcode变成pe文件去执行的两种方法

本文介绍了两种在Windows环境下执行shellcode的方法。对于小数据量的shellcode,可以将其转换为C代码数组,然后通过VirtualAlloc和memcpy在内存中执行。而对于大数据量的shellcode,可以通过加载资源并直接执行。这两种技术是逆向工程和安全研究中的常见实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法一

适用于shellcode的数据量很小的时候

先将shellcode转成c代码数组

在这里插入图片描述

转成C代码的数据

在这里插入图片描述

将数据拷贝到开辟的内存空间中执行

unsigned char buff[] = {}
void* exec = VirtualAlloc(0, sizeof(buff), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
memcpy(exec, buff, sizeof(buff));
((void(*)())exec)();

方法二

适用于shellcode的数据量很大的时候

将shellcode添加到资源中,从资源中读取执行

//定位我们的自定义资源,这里因为我们是从本模块定位资源,所以将句柄简单地置为NULL即可
	HRSRC hRsrc = FindResource(NULL, MAKEINTRESOURCE(IDR_SHELLCODE1), "SHELLCODE");
	if (NULL == hRsrc)
		return FALSE;
	//获取资源的大小
	DWORD dwSize = SizeofResource(NULL, hRsrc);
	if (0 == dwSize)
		return FALSE;
	//加载资源
	HGLOBAL hGlobal = LoadResource(NULL, hRsrc);
	if (NULL == hGlobal)
		return FALSE;
	//锁定资源
	LPVOID pBuffer = LockResource(hGlobal);
	if (NULL == pBuffer)
		return FALSE;
	DWORD old;
	VirtualProtect(pBuffer, dwSize, PAGE_EXECUTE_READWRITE, &old);

	((void(*)())pBuffer)();
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值