CreateRemoteThread注入NOTEPAD

来源:互联网 发布:微信for windows phone 编辑:程序博客网 时间:2024/05/17 00:05
 
#include <cstdlib>#include <iostream>#include <windows.h> #include "tlhelp32.h"using namespace std;typedef HINSTANCE (WINAPI *ProcLoadLibrary)(char*);typedef FARPROC (WINAPI *ProcGetProcAddress)(HMODULE, LPCSTR);typedef int (WINAPI *ProcMessageBox)(HWND,LPCTSTR,LPCTSTR,UINT);//////////////////////////////////////////////////////////////////////////////////////////////typedef struct tagHYPINJECT {       ProcLoadLibrary    fnLoad;       ProcGetProcAddress fnGetProc;       char MsgStr [MAX_PATH];       char DLLName [MAX_PATH];       char ProcName [MAX_PATH];} HYPINJECT;//////////////////////////////////////////////////////////////////////////////////////////////static DWORD WINAPI ThreadProc (LPVOID lpParameter){       HYPINJECT* p = (HYPINJECT*)lpParameter;                                   //初始化一个结构体 Initialize a struct        HMODULE hDLL = p->fnLoad (p->DLLName);                                    //hDll is a parameter of GerProcAddress,fnLoad is a func pointer---LoadLibrary       ProcMessageBox MsgBox = (ProcMessageBox)p->fnGetProc(hDLL,p->ProcName);   //get the address of messagebox       MsgBox(NULL,p->MsgStr,p->MsgStr,MB_OK);                                   //then we can use msgbox       return 0;}static void AfterThreadProc (void) { }                                           //用来计算要写入代码的大小,所以两者都定义成static HYPINJECT hypInject;                                                              //pData写入的结构体 BOOL InjectFunc(DWORD PID){       HMODULE hk = LoadLibrary ("kernel32.dll");       hypInject.fnLoad = (ProcLoadLibrary)GetProcAddress (hk, "LoadLibraryA");       hypInject.fnGetProc = (ProcGetProcAddress)GetProcAddress (hk, "GetProcAddress");       strcpy(hypInject.MsgStr, " hyp's Knowledge Base");       strcpy (hypInject.DLLName, "user32.dll");       strcpy (hypInject.ProcName, "MessageBoxA");                                //pData要写入的是一个结构体,所以把信息都保存在结构体中,执行的是ThreadProc        PVOID pCode = NULL;       PVOID pData = NULL;       BOOL bc = FALSE;       DWORD cbCodeSize = (BYTE*)AfterThreadProc - (BYTE*)ThreadProc;       HANDLE hProc = OpenProcess(              PROCESS_QUERY_INFORMATION |                PROCESS_CREATE_THREAD     |              PROCESS_VM_OPERATION      |              PROCESS_VM_WRITE,                         FALSE, PID);       if (hProc == NULL)       {              return FALSE;       }             pCode=VirtualAllocEx(hProc,NULL,cbCodeSize,MEM_COMMIT,PAGE_EXECUTE_READWRITE);       bc = WriteProcessMemory(hProc,pCode,(LPVOID)(DWORD) ThreadProc,cbCodeSize,NULL);       pData = VirtualAllocEx (hProc,NULL, sizeof (hypInject), MEM_COMMIT, PAGE_EXECUTE_READWRITE);       bc = WriteProcessMemory (hProc, pData, &hypInject, sizeof (hypInject), NULL);       HANDLE ht=CreateRemoteThread(hProc,NULL,NULL,(LPTHREAD_START_ROUTINE)pCode,pData,0,NULL);       CloseHandle(hProc);       return TRUE;}int main(){       HANDLE hSnapshot = NULL;       hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,NULL);       PROCESSENTRY32 pe;       pe.dwSize = sizeof(PROCESSENTRY32);       Process32First(hSnapshot,&pe);          do       {              if(stricmp(pe.szExeFile,"NOTEPAD.EXE")==0)              {                     InjectFunc(pe.th32ProcessID);                     break;              }       }       while(Process32Next(hSnapshot,&pe)==TRUE);              CloseHandle (hSnapshot);           system("pause");       return 0;}

原创粉丝点击