diff --git a/Spy/Spy.vcxproj b/Spy/Spy.vcxproj index 7c79f57..d3c1c4d 100644 --- a/Spy/Spy.vcxproj +++ b/Spy/Spy.vcxproj @@ -170,10 +170,10 @@ - + @@ -184,10 +184,10 @@ - + diff --git a/Spy/Spy.vcxproj.filters b/Spy/Spy.vcxproj.filters index 0988c9e..f09b380 100644 --- a/Spy/Spy.vcxproj.filters +++ b/Spy/Spy.vcxproj.filters @@ -24,9 +24,6 @@ 头文件 - - 头文件 - 头文件 @@ -51,6 +48,9 @@ 头文件 + + 头文件 + @@ -62,9 +62,6 @@ 源文件 - - 源文件 - 源文件 @@ -86,6 +83,9 @@ 源文件 + + 源文件 + diff --git a/Spy/dllmain.cpp b/Spy/dllmain.cpp index 01dc863..8af8120 100644 --- a/Spy/dllmain.cpp +++ b/Spy/dllmain.cpp @@ -1,37 +1,23 @@ -#include - -#include "monitor.h" -#include "rpc_server.h" - -extern HANDLE g_hEvent; - -BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) -{ - switch (ul_reason_for_call) { - case DLL_PROCESS_ATTACH: { - // MessageBox(NULL, L"RpcStartServer", L"Hey", 0); - if (InitDLL() != 0) { - // Exit - FreeLibraryAndExitThread(hModule, 0); - } - HANDLE rpcThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)RpcStartServer, hModule, NULL, 0); - if (rpcThread != 0) { - CloseHandle(rpcThread); - } - g_hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); // 创建消息句柄 - HANDLE mThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Monitor, hModule, NULL, 0); - if (mThread != 0) { - CloseHandle(mThread); - } - break; - } - case DLL_THREAD_ATTACH: - case DLL_THREAD_DETACH: - break; - case DLL_PROCESS_DETACH: { - RpcStopServer(); - break; - } - } - return TRUE; -} +#include "framework.h" + +#include "spy.h" + +BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) +{ + switch (ul_reason_for_call) { + case DLL_PROCESS_ATTACH: { + // MessageBox(NULL, L"InitSpy", L"DllMain", 0); + InitSpy(hModule); + break; + } + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + break; + case DLL_PROCESS_DETACH: { + // MessageBox(NULL, L"DestroySpy", L"DllMain", 0); + DestroySpy(); + break; + } + } + return TRUE; +} diff --git a/Spy/monitor.h b/Spy/monitor.h deleted file mode 100644 index c227d21..0000000 --- a/Spy/monitor.h +++ /dev/null @@ -1,7 +0,0 @@ -#pragma once - -#include "framework.h" - -int InitDLL(void); -DWORD WINAPI Monitor(HMODULE hModule); -int IsLogin(); diff --git a/Spy/receive_msg.h b/Spy/receive_msg.h index b309f0d..4390490 100644 --- a/Spy/receive_msg.h +++ b/Spy/receive_msg.h @@ -1,3 +1,4 @@ -#pragma once +#pragma once -void ListenMessage(); \ No newline at end of file +void ListenMessage(); +void UnListenMessage(); diff --git a/Spy/rpc_server.cpp b/Spy/rpc_server.cpp index 8c590cb..ad6e268 100644 --- a/Spy/rpc_server.cpp +++ b/Spy/rpc_server.cpp @@ -3,11 +3,11 @@ #include "exec_sql.h" #include "get_contacts.h" -#include "monitor.h" #include "rpc_h.h" #include "rpc_server.h" #include "sdk.h" #include "send_msg.h" +#include "spy.h" #include "spy_types.h" #include "util.h" @@ -16,6 +16,7 @@ using namespace std; extern HANDLE g_hEvent; extern MsgQueue_t g_MsgQueue; extern const MsgTypesMap_t g_WxMsgTypes; +extern int IsLogin(void); int server_IsLogin() { return IsLogin(); } diff --git a/Spy/monitor.cpp b/Spy/spy.cpp similarity index 58% rename from Spy/monitor.cpp rename to Spy/spy.cpp index f02fce1..e01bead 100644 --- a/Spy/monitor.cpp +++ b/Spy/spy.cpp @@ -1,52 +1,59 @@ -#include -#include - -#include "load_calls.h" -#include "monitor.h" -#include "receive_msg.h" -#include "util.h" - -HANDLE g_hEvent = NULL; -WxCalls_t g_WxCalls = { 0 }; -DWORD g_WeChatWinDllAddr = 0; - -int InitDLL(void) -{ - wchar_t version[16] = { 0 }; - - g_WeChatWinDllAddr = (DWORD)LoadLibrary(L"WeChatWin.dll"); //获取wechatWin模块地址 - if (g_WeChatWinDllAddr == 0) { - MessageBox(NULL, L"获取wechatWin.dll模块地址失败", L"错误", 0); - return -1; - } - - if (!GetWeChatVersion(version)) { //获取微信版本 - MessageBox(NULL, L"获取微信版本失败", L"错误", 0); - return -2; - } - - if (LoadCalls(version, &g_WxCalls) != 0) { //加载微信版本对应的Call地址 - MessageBox(NULL, L"不支持当前版本", L"错误", 0); - return -3; - } - - g_hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); - - return 0; -} - -DWORD WINAPI Monitor(HMODULE hModule) -{ - ListenMessage(); - - return TRUE; -} - -int IsLogin(void) -{ - if (g_WeChatWinDllAddr == 0) { - return 0; - } - - return (int)GET_DWORD(g_WeChatWinDllAddr + g_WxCalls.login); -} +#include "load_calls.h" +#include "receive_msg.h" +#include "rpc_server.h" +#include "spy.h" +#include "util.h" + +HANDLE g_hEvent = NULL; +WxCalls_t g_WxCalls = { 0 }; +DWORD g_WeChatWinDllAddr = 0; + +DWORD WINAPI Monitor(HMODULE hModule) +{ + ListenMessage(); + + return TRUE; +} + +void InitSpy(HMODULE hModule) +{ + wchar_t version[16] = { 0 }; + + g_WeChatWinDllAddr = (DWORD)LoadLibrary(L"WeChatWin.dll"); //获取wechatWin模块地址 + if (g_WeChatWinDllAddr == 0) { + MessageBox(NULL, L"获取wechatWin.dll模块地址失败", L"错误", 0); + FreeLibraryAndExitThread(hModule, 0); + } + + if (!GetWeChatVersion(version)) { //获取微信版本 + MessageBox(NULL, L"获取微信版本失败", L"错误", 0); + FreeLibraryAndExitThread(hModule, 0); + } + + if (LoadCalls(version, &g_WxCalls) != 0) { //加载微信版本对应的Call地址 + MessageBox(NULL, L"不支持当前版本", L"错误", 0); + FreeLibraryAndExitThread(hModule, 0); + } + + g_hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); + HANDLE rpcThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)RpcStartServer, hModule, NULL, 0); + if (rpcThread != 0) { + CloseHandle(rpcThread); + } + + HANDLE mThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Monitor, hModule, NULL, 0); + if (mThread != 0) { + CloseHandle(mThread); + } +} + +void DestroySpy() { RpcStopServer(); } + +int IsLogin(void) +{ + if (g_WeChatWinDllAddr == 0) { + return 0; + } + + return (int)GET_DWORD(g_WeChatWinDllAddr + g_WxCalls.login); +} diff --git a/Spy/spy.h b/Spy/spy.h new file mode 100644 index 0000000..59d669e --- /dev/null +++ b/Spy/spy.h @@ -0,0 +1,6 @@ +#pragma once + +#include "framework.h" + +void InitSpy(HMODULE hModule); +void DestroySpy();