|
@@ -17,6 +17,10 @@ m_dwPathLen(0)
|
|
|
_tcscpy_s(m_szDllPath,lpDynamicLibraryPath);
|
|
|
|
|
|
m_hInjectProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, m_dwInjectPID);
|
|
|
+ if ( m_hInjectProcess == NULL)
|
|
|
+ {
|
|
|
+ WriteTextLog(_T("打开WeChat.exe进程失败"));
|
|
|
+ }
|
|
|
//m_hInjectProcess = OpenProcess(PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION | PROCESS_VM_WRITE, FALSE, m_dwInjectPID);
|
|
|
}
|
|
|
|
|
@@ -54,10 +58,14 @@ BOOL CInjection::InjectDynamicLibrary()
|
|
|
m_dwPathLen = _tcslen(m_szDllPath)*sizeof(TCHAR)+1;
|
|
|
m_lpInjectData = VirtualAllocEx(m_hInjectProcess,NULL, m_dwPathLen, MEM_COMMIT, PAGE_READWRITE);
|
|
|
if (NULL == m_lpInjectData)
|
|
|
+ {
|
|
|
+ WriteTextLog(_T("创建WeChat.exe进程虚拟内存失败"));
|
|
|
return FALSE;
|
|
|
+ }
|
|
|
|
|
|
if (WriteProcessMemory(m_hInjectProcess, m_lpInjectData, m_szDllPath, m_dwPathLen, NULL) == 0)
|
|
|
{
|
|
|
+ // 注意:MEM_RELEASE释放时第三参数一定要为0,请查看MSDN;
|
|
|
VirtualFreeEx(m_hInjectProcess, m_lpInjectData, 0, MEM_RELEASE);
|
|
|
return FALSE;
|
|
|
}
|
|
@@ -69,6 +77,7 @@ BOOL CInjection::InjectDynamicLibrary()
|
|
|
m_hInjectThread = CreateRemoteThread(m_hInjectProcess, NULL, 0, (LPTHREAD_START_ROUTINE)lpAddr, m_lpInjectData, 0, NULL);
|
|
|
if (NULL == m_hInjectThread)
|
|
|
{
|
|
|
+ // 注意:MEM_RELEASE释放时第三参数一定要为0,请查看MSDN;
|
|
|
VirtualFreeEx(m_hInjectProcess, m_lpInjectData, 0, MEM_RELEASE);
|
|
|
return FALSE;
|
|
|
}
|
|
@@ -88,15 +97,30 @@ BOOL CInjection::InjectDynamicLibrary()
|
|
|
BOOL CInjection::EjectDynamicLibrary()
|
|
|
{
|
|
|
if(m_hInjectProcess==NULL)
|
|
|
- return -1;
|
|
|
+ return TRUE;
|
|
|
|
|
|
// 获取模块句柄;
|
|
|
HANDLE hModule = FindModuleEx(m_szDllPath, m_dwInjectPID);
|
|
|
if (hModule == NULL )
|
|
|
+ {
|
|
|
+ WriteTextLog(_T("获取WeChat.exe进程模块hook.dll失败"));
|
|
|
return FALSE;
|
|
|
+ }
|
|
|
|
|
|
LPVOID lpAddr = GetProcAddress(GetModuleHandle(_T("kernel32.dll")), "FreeLibraryAndExitThread");//FreeLibraryAndExitThread//FreeLibrary
|
|
|
+ if (lpAddr == NULL )
|
|
|
+ {
|
|
|
+ WriteTextLog(_T("获取kernel32.dll中的FreeLibraryAndExitThread失败"));
|
|
|
+ return FALSE;
|
|
|
+ }
|
|
|
+
|
|
|
m_hEjectThread = CreateRemoteThread(m_hInjectProcess, NULL, 0, (LPTHREAD_START_ROUTINE)lpAddr, hModule, 0, NULL);
|
|
|
+ if ( m_hEjectThread == NULL )
|
|
|
+ {
|
|
|
+ WriteTextLog(_T("创建WeChat.exe远程线程(FreeLibraryAndExitThread)失败"));
|
|
|
+ return FALSE;
|
|
|
+ }
|
|
|
+
|
|
|
WaitForSingleObject(m_hEjectThread, INFINITE);
|
|
|
|
|
|
return TRUE;
|