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; 
}