[2022]快速加载shellcode的代码 huoji shellcode 2022-10-08 474 次浏览 1 次点赞 每次都找,每次都找不到,放着了,不想一个一个找了 ```cpp #include #include #include #include using namespace std; void load(char* buf, int shellcode_size) { DWORD dwThreadId; // 线程ID HANDLE hThread; // 线程句柄 char* shellcode = (char*)VirtualAlloc( NULL, shellcode_size, MEM_COMMIT, PAGE_EXECUTE_READWRITE); CopyMemory(shellcode, buf, shellcode_size); //CreateThread函数,创建线程 hThread = CreateThread( NULL, // 安全描述符 NULL, // 栈的大小 (LPTHREAD_START_ROUTINE)shellcode, // 函数 NULL, // 参数 NULL, // 线程标志 &dwThreadId // 若成功,接收新创建的线程的线程ID DWORD变量的地址。 ); //通过调用 WaitForSingleObject 函数来监视事件状态,当事件设置为终止状态(WaitForSingleObject 返回 WAIT_OBJECT_0)时,每个线程都将自行终止执行。 WaitForSingleObject(hThread, INFINITE); // 一直等待线程执行结束 } int wmain(int argc, char* argv[]) { char filename[] = "c:\\f.bin"; // 以读模式打开文件 ifstream infile; //以二进制方式打开 infile.open(filename, ios::out | ios::binary); infile.seekg(0, infile.end); //追溯到流的尾部 int length = infile.tellg(); //获取流的长度 infile.seekg(0, infile.beg);//回溯到流头部 char* data = new char[length]; //存取文件内容 if (infile.is_open()) { cout << "reading from the file" << endl; infile.read(data, length); } cout << "size of data =" << sizeof(data) << endl; cout << "size of file =" << length << endl; /* for (int i = 0; i < length; i++) { printf("\\%x ", data[i]); } */ int shellcode_size = length; load(data, shellcode_size); //加载成功并不会输出,推测load函数新创建的线程执行结束后,主进程也终止了。 cout << "加载成功"; system("pause"); return 0; } ``` 本文由 huoji 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。 点赞 1
还不快抢沙发