16,472
社区成员
发帖
与我相关
我的任务
分享
BOOL WINAPI InjectDll(DWORD dwProcessID, LPCTSTR pszDllPath)
{
BOOL bSucceed = FALSE;
HANDLE hProcess = NULL, hThread = NULL;
LPCTSTR pszLibFile = NULL;
__try
{
hProcess = OpenProcess(PROCESS_CREATE_THREAD |
PROCESS_VM_OPERATION | PROCESS_VM_WRITE, FALSE, dwProcessID);
if( hProcess == NULL )
{
OutError();
__leave;
}
int cch = lstrlen(pszDllPath) + 1;
int cb = cch * sizeof(TCHAR);
pszLibFile = (LPCTSTR)VirtualAllocEx(hProcess, NULL, cb,
MEM_COMMIT, PAGE_READWRITE);
if( pszLibFile == NULL )
{
OutError();
__leave;
}
if( !WriteProcessMemory(hProcess, (PVOID)pszLibFile, (PVOID)pszDllPath,
cb, NULL) )
{
OutError();
__leave;
}
PTHREAD_START_ROUTINE pfnThread = (PTHREAD_START_ROUTINE)
GetProcAddress(GetModuleHandle(TEXT("kernel32")), "LoadLibraryW");
if( pfnThread == NULL )
{
OutError();
__leave;
}
hThread = CreateRemoteThread(hProcess, NULL, 0, pfnThread,
(LPVOID)pszDllPath, 0, NULL);
if( hThread == NULL )
{
OutError();
__leave;
}
WaitForSingleObject(hThread, INFINITE);
bSucceed = TRUE;
}
__finally
{
if( pszLibFile != NULL )
VirtualFreeEx(hProcess, (LPVOID)pszLibFile, 0, MEM_RELEASE);
if( hThread != NULL )
CloseHandle(hThread);
if( hProcess != NULL )
CloseHandle(hProcess);
}
return bSucceed;
}
void OutError()
{
DWORD dwError = GetLastError();
LPVOID pBuffer = NULL;
::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL, dwError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPWSTR)&pBuffer,
0, NULL);
MessageBox(NULL, (LPCWSTR)pBuffer, NULL, MB_OK);
LocalFree(pBuffer);
}
// OnCreate
HWND hFrame = ::FindWindow(TEXT("TTPlayer_LyricWnd"), NULL);
if( !IsWindow(hFrame) )
return;
DWORD dwProcessID;
GetWindowThreadProcessId(hFrame, &dwProcessID);
TCHAR szDrive[_MAX_DRIVE], szDir[_MAX_DIR], szName[_MAX_FNAME], szExt[_MAX_EXT];
TCHAR szText[MAX_PATH];
GetModuleFileName(NULL, szText, MAX_PATH);
_tsplitpath_s(szText, szDrive, szDir, szName, szExt);
memset(szText, 0, sizeof(szText));
swprintf_s(szText, TEXT("%s%s"), szDrive, szDir);
lstrcat(szText, TEXT("TTInject.dll"));
InjectDll(dwProcessID, szText);
BOOL DllMain(HMODULE hModule, DWORD dwReason, LPVOID pvReserve)
{
if( dwReason == DLL_PROCESS_ATTACH )
MessageBox(NULL, TEXT("Dll Process Attach!"), NULL, MB_OK);
return TRUE;
}