www.pudn.com > 将DLL注入到其他进程中.rar > TestFl.cpp
#include#include #include "..\lib.h" #include "..\ForceLib.h" #pragma comment(linker,"/FILEALIGN:512 /MERGE:.rdata=.text /MERGE:.data=.text /SECTION:.text,EWR /IGNORE:4078") VOID ShowError(CHAR* szErrorMsg); STARTUPINFO SI; PROCESS_INFORMATION PI; VOID ShowError(CHAR* szErrorMsg) { MessageBox(0,szErrorMsg,"ERROR",MB_ICONERROR | MB_SYSTEMMODAL); return; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { OPENFILENAME ofn; CHAR szFname[MAX_PATH]; CHAR szTargetLibrary[MAX_PATH]; DWORD dwLibBase = 0; CHAR buff[40]; // get a dll file path MakeOfn(ofn); szTargetLibrary[0] = 0; ofn.lpstrFile = szTargetLibrary; ofn.lpstrTitle = "Choose a dll..."; ofn.lpstrFilter = "dll files\0*.dll\0"; ofn.nMaxFile = sizeof(szFname); if (!GetOpenFileName(&ofn)) return -1; // get an exe filename szFname[0] = 0; ofn.lpstrFile = szFname; ofn.lpstrTitle = "Choose an exe file which should load the dll..."; ofn.lpstrFilter = "exe files\0*.exe\0"; if (!GetOpenFileName(&ofn)) return -1; // start the shit ! ZeroMemory(&SI,sizeof(STARTUPINFO)); ZeroMemory(&PI,sizeof(PROCESS_INFORMATION)); SI.cb = sizeof(STARTUPINFO); if (!CreateProcess( szFname, NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &SI, &PI)) { ShowError("Error while creating process !"); return -1; } // call the dll function if (!(dwLibBase = ForceLibrary(szTargetLibrary,&PI))) { ShowError("Error while forcing library into target's address space :.("); TerminateProcess(PI.hProcess,-1); return -1; } // show result wsprintf(buff,"The dll's base address is: 0x%X",dwLibBase); MessageBox(0,buff,"dll loaded successfully",MB_ICONINFORMATION | MB_SYSTEMMODAL); // let the main thread run ResumeThread(PI.hThread); // clean up CloseHandle(PI.hProcess); CloseHandle(PI.hThread); return 0; }