void main()
{
char lpDllName[100] = {0};
GetCurrentDirectory( 100, lpDllName );
strcat( lpDllName,
"\\InjectProcessDll.dll"
);
cout<<
"Dll当前路径:"
<<lpDllName<<endl;
HANDLE hSnapshot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
if
( hSnapshot == NULL )
{
cout<<
"Create Snapshot false."
<<endl;
cin.get();
return
;
}
PROCESSENTRY32 stProcessEntry32 = {0};
stProcessEntry32.dwSize = sizeof(PROCESSENTRY32);
Process32First( hSnapshot, &stProcessEntry32 );
bool bFind =
false
;
do
{
if
( strncmp( stProcessEntry32.szExeFile,
"explorer.exe"
, strlen(
"explorer.exe"
) ) == 0 )
{
bFind =
true
;
break
;
}
}
while
( Process32Next( hSnapshot, &stProcessEntry32 ) );
CloseHandle( hSnapshot );
if
( !bFind )
{
cout<<
"查找explorer进程失败."
<<endl;
cin.get();
return
;
}
DWORD dwPId = stProcessEntry32.th32ProcessID;
HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS,
false
, dwPId );
if
( hProcess == NULL )
{
cout<<
"打开explorer进程失败."
<<endl;
cin.get();
return
;
}
LPVOID lpDllNameAddr = VirtualAllocEx( hProcess, NULL, strlen(lpDllName)+1, MEM_COMMIT, PAGE_READWRITE );
if
( lpDllNameAddr == NULL )
{
cout<<
"explorer进程中申请内存失败."
<<endl;
CloseHandle(hProcess);
cin.get();
return
;
}
cout<<
"在目标进程:"
<<stProcessEntry32.szExeFile<<
"中申请的空间地址:"
<<hex<<lpDllNameAddr<<endl;
DWORD dwRes = 0;
bool bRet = WriteProcessMemory( hProcess, lpDllNameAddr, lpDllName, strlen(lpDllName), &dwRes );
if
( !bRet )
{
cout<<
"explorer进程写信息失败."
<<endl;
VirtualFreeEx( hProcess, lpDllNameAddr, strlen(lpDllName)+1, MEM_DECOMMIT );
CloseHandle(hProcess);
cin.get();
return
;
}
HMODULE hModuleKernel32 = GetModuleHandle(
"kernel32.dll"
);
LPTHREAD_START_ROUTINE lpLoadLibraryAddr = (LPTHREAD_START_ROUTINE)GetProcAddress( hModuleKernel32,
"LoadLibraryA"
);
if
( lpLoadLibraryAddr != NULL )
{
cout<<
"获得函数地址:"
<<hex<<lpLoadLibraryAddr<<endl;
HANDLE hRemote = CreateRemoteThread( hProcess, NULL, 0, lpLoadLibraryAddr, lpDllNameAddr, 0, NULL );
if
( hRemote != NULL )
{
cout<<
"创建远程线程成功,句柄:"
<<hex<<hRemote<<endl;
WaitForSingleObject( hRemote, INFINITE );
CloseHandle( hRemote );
cout<<
"远程线程运行结束"
<<endl;
cin.get();
}
else
cout<<
"创建远程线程失败."
<<endl;
}
else
cout<<
"获取LoadLibrary地址失败"
<<endl;
VirtualFreeEx( hProcess, lpDllNameAddr, strlen(lpDllName)+1, MEM_DECOMMIT );
CloseHandle(hProcess);
cin.get();
return
;
}