|
@@ -1,6 +1,7 @@
|
|
// dllmain.cpp : 定义 DLL 应用程序的入口点。
|
|
// dllmain.cpp : 定义 DLL 应用程序的入口点。
|
|
#include "stdafx.h"
|
|
#include "stdafx.h"
|
|
#include "..\common\CurlClient.h"
|
|
#include "..\common\CurlClient.h"
|
|
|
|
+#include <process.h>
|
|
|
|
|
|
//https://docs.microsoft.com/zh-cn/windows/desktop/winmsg/using-hooks
|
|
//https://docs.microsoft.com/zh-cn/windows/desktop/winmsg/using-hooks
|
|
HHOOK ghk_CBT = NULL;
|
|
HHOOK ghk_CBT = NULL;
|
|
@@ -101,6 +102,47 @@ LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
|
|
return CallNextHookEx(ghk_Mouse, nCode, wParam, lParam);
|
|
return CallNextHookEx(ghk_Mouse, nCode, wParam, lParam);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static unsigned WINAPI WorkProc(LPVOID lpParam)
|
|
|
|
+{
|
|
|
|
+ DWORD dwThreadId = 0;
|
|
|
|
+ GetProcInfo(dwThreadId);
|
|
|
|
+ if (ghk_CBT == NULL)
|
|
|
|
+ {
|
|
|
|
+ ghk_CBT = SetWindowsHookEx(WH_CBT, CBTProc, HINSTANCE(0x000604F4), dwThreadId);
|
|
|
|
+ if (ghk_CBT == NULL)
|
|
|
|
+ WriteTextLog(_T("hook api失败"));
|
|
|
|
+ else
|
|
|
|
+ WriteTextLog(_T("hook api成功:%ld,%p"), GetLastError(), HINSTANCE(0x000604F4));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ WriteTextLog(_T("dll已成功注入:【当前线程id=%d, 目标线程id=%d,进程id=%d】"), ::GetCurrentThreadId(), dwThreadId, ::GetCurrentProcessId());
|
|
|
|
+ WxInfo wxInfo;
|
|
|
|
+ GetWxInfo(wxInfo);
|
|
|
|
+
|
|
|
|
+#if 1
|
|
|
|
+ CCurlClient curl;
|
|
|
|
+ if (curl.Initialize() == CURLE_OK)
|
|
|
|
+ {
|
|
|
|
+ std::string strData;
|
|
|
|
+ if (curl.Get(wxInfo.strWxLImgAddr, strData) == CURLE_OK)
|
|
|
|
+ {
|
|
|
|
+ FILE* pf = NULL;
|
|
|
|
+ TCHAR szWxImage[MAX_PATH] = { 0 };
|
|
|
|
+ _stprintf_s(szWxImage, _T("%s%s\\%s.jpg"), g_szCurModulePath, _T("image"), wxInfo.strWxID.c_str());
|
|
|
|
+ pf = _tfopen(szWxImage, _T("wb+"));
|
|
|
|
+ if (pf)
|
|
|
|
+ {
|
|
|
|
+ fwrite(strData.c_str(), strData.size(), 1, pf);
|
|
|
|
+ fclose(pf);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
BOOL APIENTRY DllMain(HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
|
|
BOOL APIENTRY DllMain(HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
|
|
{
|
|
{
|
|
g_hCurModule = hModule;
|
|
g_hCurModule = hModule;
|
|
@@ -117,40 +159,11 @@ BOOL APIENTRY DllMain(HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserve
|
|
{
|
|
{
|
|
case DLL_PROCESS_ATTACH:
|
|
case DLL_PROCESS_ATTACH:
|
|
{
|
|
{
|
|
- DWORD dwThreadId = 0;
|
|
|
|
- GetProcInfo(dwThreadId);
|
|
|
|
- if (ghk_CBT == NULL)
|
|
|
|
- {
|
|
|
|
- ghk_CBT = SetWindowsHookEx(WH_CBT, CBTProc, HINSTANCE(0x000604F4), dwThreadId);
|
|
|
|
- if (ghk_CBT == NULL)
|
|
|
|
- WriteTextLog(_T("hook api失败"));
|
|
|
|
- else
|
|
|
|
- WriteTextLog(_T("hook api成功:%ld,%p"), GetLastError(), HINSTANCE(0x000604F4));
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- WriteTextLog(_T("dll已成功注入:【当前线程id=%d, 目标线程id=%d,进程id=%d】"), ::GetCurrentThreadId(), dwThreadId, ::GetCurrentProcessId());
|
|
|
|
- WxInfo wxInfo;
|
|
|
|
- GetWxInfo(wxInfo);
|
|
|
|
-
|
|
|
|
-#if 0
|
|
|
|
- CCurlClient curl;
|
|
|
|
- if (curl.Initialize() == CURLE_OK)
|
|
|
|
- {
|
|
|
|
- std::string strData;
|
|
|
|
- if (curl.Get(wxInfo.strWxSImgAddr, strData) == CURLE_OK)
|
|
|
|
- {
|
|
|
|
- FILE* pf = NULL;
|
|
|
|
- TCHAR szWxImage[MAX_PATH] = { 0 };
|
|
|
|
- _stprintf_s(szWxImage, _T("%s%s\\%s.jpg"), g_szCurModulePath, _T("image"), wxInfo.strWxID.c_str());
|
|
|
|
- pf = _tfopen(szWxImage, _T("w+"));
|
|
|
|
- if (pf)
|
|
|
|
- {
|
|
|
|
- fwrite(strData.c_str(), strData.size(), 1, pf);
|
|
|
|
- fclose(pf);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-#endif
|
|
|
|
|
|
+
|
|
|
|
+ HANDLE hThread = NULL;
|
|
|
|
+ unsigned int dwThreadId = 0;
|
|
|
|
+ hThread = (HANDLE)_beginthreadex(NULL, 0, WorkProc, NULL, NULL, &dwThreadId);
|
|
|
|
+ CloseHandle(hThread);
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
case DLL_THREAD_ATTACH:
|
|
case DLL_THREAD_ATTACH:
|