From eb5dfe1f7ce482b4df09f777279f4fe3ad3c96f7 Mon Sep 17 00:00:00 2001 From: ljc545w Date: Tue, 15 Mar 2022 08:20:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0wxid=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E5=A5=BD=E5=8F=8B=E4=BF=A1=E6=81=AF=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CWeChatRobot/FriendList.h | 3 +- CWeChatRobot/UserInfo.cpp | 39 +++++ CWeChatRobot/UserInfo.h | 5 + CWeChatRobot/WeChatRobot.cpp | 10 ++ CWeChatRobot/WeChatRobot.h | 1 + CWeChatRobot/WeChatRobotCOM.idl | 1 + CWeChatRobot/WeChatRobotCOM.vcxproj | 2 + CWeChatRobot/WeChatRobotCOM.vcxproj.filters | 18 +- CWeChatRobot/WeChatRobotCOM_i.h | 12 ++ CWeChatRobot/WeChatRobotCOM_p.c | 49 +++++- CWeChatRobot/pch.cpp | 4 + CWeChatRobot/robotdata.h | 7 +- DWeChatRobot/DWeChatRobot.vcxproj | 2 + DWeChatRobot/DWeChatRobot.vcxproj.filters | 24 ++- DWeChatRobot/UserInfo.cpp | 177 ++++++++++++++++++++ DWeChatRobot/UserInfo.h | 5 + DWeChatRobot/dllmain.cpp | 10 +- DWeChatRobot/pch.h | 5 +- Release/CWeChatRobot.exe | Bin 60416 -> 61440 bytes Release/DWeChatRobot.dll | Bin 17920 -> 22016 bytes wxRobot.py | 11 +- 21 files changed, 363 insertions(+), 22 deletions(-) create mode 100644 CWeChatRobot/UserInfo.cpp create mode 100644 CWeChatRobot/UserInfo.h create mode 100644 DWeChatRobot/UserInfo.cpp create mode 100644 DWeChatRobot/UserInfo.h diff --git a/CWeChatRobot/FriendList.h b/CWeChatRobot/FriendList.h index b730a90..9fba197 100644 --- a/CWeChatRobot/FriendList.h +++ b/CWeChatRobot/FriendList.h @@ -1,4 +1,5 @@ #pragma once #include - +#include +using namespace std; std::wstring GetFriendList(); \ No newline at end of file diff --git a/CWeChatRobot/UserInfo.cpp b/CWeChatRobot/UserInfo.cpp new file mode 100644 index 0000000..a510e6d --- /dev/null +++ b/CWeChatRobot/UserInfo.cpp @@ -0,0 +1,39 @@ +#include "pch.h" + +struct GetUserInfoStruct { + DWORD message; + DWORD length; +}; + +std::wstring GetWxUserInfo(wchar_t* wxid) { + wstring WString = L""; + DWORD GetUserInfoProcAddr = GetWeChatRobotBase() + GetWxUserInfoOffset; + LPVOID wxidaddr = VirtualAllocEx(hProcess, NULL, 1, MEM_COMMIT, PAGE_READWRITE); + DWORD dwWriteSize = 0; + DWORD dwId = 0; + DWORD dwHandle = 0; + GetUserInfoStruct userinfo = { 0 }; + if (!wxidaddr) + return WString; + WriteProcessMemory(hProcess, wxidaddr, wxid, wcslen(wxid) * 2 + 2, &dwWriteSize); + HANDLE hThread = ::CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)GetUserInfoProcAddr, wxidaddr, 0, &dwId); + if (hThread) { + WaitForSingleObject(hThread, INFINITE); + GetExitCodeThread(hThread, &dwHandle); + CloseHandle(hThread); + } + + if(dwHandle) + ReadProcessMemory(hProcess, (LPCVOID)dwHandle, &userinfo, sizeof(GetUserInfoStruct), &dwWriteSize); + if (userinfo.length) { + wchar_t* wmessage = new wchar_t[userinfo.length + 1]; + ZeroMemory(wmessage, (userinfo.length + 1) * 2); + ReadProcessMemory(hProcess, (LPCVOID)userinfo.message, wmessage, userinfo.length * 2, &dwWriteSize); + WString += wmessage; + delete[] wmessage; + wmessage = NULL; + } + + VirtualFreeEx(hProcess, wxidaddr, 0, MEM_RELEASE); + return WString; +} \ No newline at end of file diff --git a/CWeChatRobot/UserInfo.h b/CWeChatRobot/UserInfo.h new file mode 100644 index 0000000..5f02bca --- /dev/null +++ b/CWeChatRobot/UserInfo.h @@ -0,0 +1,5 @@ +#pragma once +#include +#include +using namespace std; +std::wstring GetWxUserInfo(wchar_t* wxid); \ No newline at end of file diff --git a/CWeChatRobot/WeChatRobot.cpp b/CWeChatRobot/WeChatRobot.cpp index 6be4e73..9e52d75 100644 --- a/CWeChatRobot/WeChatRobot.cpp +++ b/CWeChatRobot/WeChatRobot.cpp @@ -59,4 +59,14 @@ STDMETHODIMP CWeChatRobot::CGetFriendList(BSTR* __result) { string smessage = _com_util::ConvertBSTRToString((BSTR)(GetFriendList().c_str())); *__result = _com_util::ConvertStringToBSTR(smessage.c_str()); return S_OK; +} + +/* +* 参数1:要查询的wxid +* 参数2:预返回的值,调用时无需提供 +*/ +STDMETHODIMP CWeChatRobot::CGetWxUserInfo(BSTR wxid,BSTR* __result) { + string smessage = _com_util::ConvertBSTRToString((BSTR)(GetWxUserInfo(wxid).c_str())); + *__result = _com_util::ConvertStringToBSTR(smessage.c_str()); + return S_OK; } \ No newline at end of file diff --git a/CWeChatRobot/WeChatRobot.h b/CWeChatRobot/WeChatRobot.h index 00aa2e2..d51c660 100644 --- a/CWeChatRobot/WeChatRobot.h +++ b/CWeChatRobot/WeChatRobot.h @@ -57,6 +57,7 @@ public: STDMETHODIMP CSendText(BSTR wxid, BSTR wxmsg, int* __result); STDMETHODIMP CSendFile(BSTR wxid, BSTR filepath, int* __result); STDMETHODIMP CGetFriendList(BSTR* __result); + STDMETHODIMP CGetWxUserInfo(BSTR wxid, BSTR* __result); }; OBJECT_ENTRY_AUTO(__uuidof(WeChatRobot), CWeChatRobot) diff --git a/CWeChatRobot/WeChatRobotCOM.idl b/CWeChatRobot/WeChatRobotCOM.idl index 141ad98..7a5c677 100644 --- a/CWeChatRobot/WeChatRobotCOM.idl +++ b/CWeChatRobot/WeChatRobotCOM.idl @@ -22,6 +22,7 @@ interface IWeChatRobot : IDispatch [id(4)] HRESULT CSendImage([in] BSTR wxid, [in] BSTR imagepath, [out, retval] int* __result); [id(5)] HRESULT CSendFile([in] BSTR wxid, [in] BSTR filepath, [out, retval] int* __result); [id(6)] HRESULT CGetFriendList([out, retval] BSTR* __result); + [id(7)] HRESULT CGetWxUserInfo([in] BSTR wxid, [out, retval] BSTR* __result); }; [ uuid(721abb35-141a-4aa2-94f2-762e2833fa6c), diff --git a/CWeChatRobot/WeChatRobotCOM.vcxproj b/CWeChatRobot/WeChatRobotCOM.vcxproj index ddf1220..06ff668 100644 --- a/CWeChatRobot/WeChatRobotCOM.vcxproj +++ b/CWeChatRobot/WeChatRobotCOM.vcxproj @@ -221,6 +221,7 @@ + @@ -237,6 +238,7 @@ + diff --git a/CWeChatRobot/WeChatRobotCOM.vcxproj.filters b/CWeChatRobot/WeChatRobotCOM.vcxproj.filters index 2186321..50687b8 100644 --- a/CWeChatRobot/WeChatRobotCOM.vcxproj.filters +++ b/CWeChatRobot/WeChatRobotCOM.vcxproj.filters @@ -32,9 +32,15 @@ {eb0eba18-3b38-466c-8978-f7d0f2bb756e} - + + {19933e02-50d4-489c-823e-4e7fe6539792} + + {be3e55a9-dd57-4e92-a340-cb558f3cd4f7} + + {cdd9e8b4-4576-499c-b20e-60e05911f6d6} + @@ -68,7 +74,7 @@ 发送消息\发送文本 - 好友列表 + 好友相关\好友列表 发送消息\发送文件 @@ -76,6 +82,9 @@ 头文件 + + 好友相关\好友信息 + @@ -103,11 +112,14 @@ 发送消息\发送文本 - 好友列表 + 好友相关\好友列表 发送消息\发送文件 + + 好友相关\好友信息 + diff --git a/CWeChatRobot/WeChatRobotCOM_i.h b/CWeChatRobot/WeChatRobotCOM_i.h index 28cafe9..d327934 100644 --- a/CWeChatRobot/WeChatRobotCOM_i.h +++ b/CWeChatRobot/WeChatRobotCOM_i.h @@ -113,6 +113,10 @@ EXTERN_C const IID IID_IWeChatRobot; virtual /* [id] */ HRESULT STDMETHODCALLTYPE CGetFriendList( /* [retval][out] */ BSTR *__result) = 0; + virtual /* [id] */ HRESULT STDMETHODCALLTYPE CGetWxUserInfo( + /* [in] */ BSTR wxid, + /* [retval][out] */ BSTR *__result) = 0; + }; @@ -202,6 +206,11 @@ EXTERN_C const IID IID_IWeChatRobot; IWeChatRobot * This, /* [retval][out] */ BSTR *__result); + /* [id] */ HRESULT ( STDMETHODCALLTYPE *CGetWxUserInfo )( + IWeChatRobot * This, + /* [in] */ BSTR wxid, + /* [retval][out] */ BSTR *__result); + END_INTERFACE } IWeChatRobotVtbl; @@ -256,6 +265,9 @@ EXTERN_C const IID IID_IWeChatRobot; #define IWeChatRobot_CGetFriendList(This,__result) \ ( (This)->lpVtbl -> CGetFriendList(This,__result) ) +#define IWeChatRobot_CGetWxUserInfo(This,wxid,__result) \ + ( (This)->lpVtbl -> CGetWxUserInfo(This,wxid,__result) ) + #endif /* COBJMACROS */ diff --git a/CWeChatRobot/WeChatRobotCOM_p.c b/CWeChatRobot/WeChatRobotCOM_p.c index aecd154..51fef3f 100644 --- a/CWeChatRobot/WeChatRobotCOM_p.c +++ b/CWeChatRobot/WeChatRobotCOM_p.c @@ -49,7 +49,7 @@ #include "WeChatRobotCOM_i.h" #define TYPE_FORMAT_STRING_SIZE 71 -#define PROC_FORMAT_STRING_SIZE 259 +#define PROC_FORMAT_STRING_SIZE 301 #define EXPR_FORMAT_STRING_SIZE 1 #define TRANSMIT_AS_TABLE_SIZE 0 #define WIRE_MARSHAL_TABLE_SIZE 1 @@ -334,6 +334,42 @@ static const WeChatRobotCOM_MIDL_PROC_FORMAT_STRING WeChatRobotCOM__MIDL_ProcFor /* 256 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ + /* Procedure CGetWxUserInfo */ + +/* 258 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 260 */ NdrFcLong( 0x0 ), /* 0 */ +/* 264 */ NdrFcShort( 0xd ), /* 13 */ +/* 266 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 268 */ NdrFcShort( 0x0 ), /* 0 */ +/* 270 */ NdrFcShort( 0x8 ), /* 8 */ +/* 272 */ 0x47, /* Oi2 Flags: srv must size, clt must size, has return, has ext, */ + 0x3, /* 3 */ +/* 274 */ 0x8, /* 8 */ + 0x47, /* Ext Flags: new corr desc, clt corr check, srv corr check, has range on conformance */ +/* 276 */ NdrFcShort( 0x1 ), /* 1 */ +/* 278 */ NdrFcShort( 0x1 ), /* 1 */ +/* 280 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter wxid */ + +/* 282 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 284 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 286 */ NdrFcShort( 0x26 ), /* Type Offset=38 */ + + /* Parameter __result */ + +/* 288 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 290 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 292 */ NdrFcShort( 0x3c ), /* Type Offset=60 */ + + /* Return value */ + +/* 294 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 296 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 298 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + 0x0 } }; @@ -433,7 +469,8 @@ static const unsigned short IWeChatRobot_FormatStringOffsetTable[] = 78, 126, 174, - 222 + 222, + 258 }; static const MIDL_STUBLESS_PROXY_INFO IWeChatRobot_ProxyInfo = @@ -457,7 +494,7 @@ static const MIDL_SERVER_INFO IWeChatRobot_ServerInfo = 0, 0, 0}; -CINTERFACE_PROXY_VTABLE(13) _IWeChatRobotProxyVtbl = +CINTERFACE_PROXY_VTABLE(14) _IWeChatRobotProxyVtbl = { &IWeChatRobot_ProxyInfo, &IID_IWeChatRobot, @@ -473,7 +510,8 @@ CINTERFACE_PROXY_VTABLE(13) _IWeChatRobotProxyVtbl = (void *) (INT_PTR) -1 /* IWeChatRobot::CSendText */ , (void *) (INT_PTR) -1 /* IWeChatRobot::CSendImage */ , (void *) (INT_PTR) -1 /* IWeChatRobot::CSendFile */ , - (void *) (INT_PTR) -1 /* IWeChatRobot::CGetFriendList */ + (void *) (INT_PTR) -1 /* IWeChatRobot::CGetFriendList */ , + (void *) (INT_PTR) -1 /* IWeChatRobot::CGetWxUserInfo */ }; @@ -488,6 +526,7 @@ static const PRPC_STUB_FUNCTION IWeChatRobot_table[] = NdrStubCall2, NdrStubCall2, NdrStubCall2, + NdrStubCall2, NdrStubCall2 }; @@ -495,7 +534,7 @@ CInterfaceStubVtbl _IWeChatRobotStubVtbl = { &IID_IWeChatRobot, &IWeChatRobot_ServerInfo, - 13, + 14, &IWeChatRobot_table[-3], CStdStubBuffer_DELEGATING_METHODS }; diff --git a/CWeChatRobot/pch.cpp b/CWeChatRobot/pch.cpp index 2144f5c..2f7e437 100644 --- a/CWeChatRobot/pch.cpp +++ b/CWeChatRobot/pch.cpp @@ -9,6 +9,7 @@ DWORD SendFileOffset = 0x0; DWORD GetFriendListInitOffset = 0x0; DWORD GetFriendListRemoteOffset = 0x0; DWORD GetFriendListFinishOffset = 0x0; +DWORD GetWxUserInfoOffset = 0x0; HANDLE hProcess = NULL; @@ -83,6 +84,9 @@ void GetProcOffset(wchar_t* workPath) { DWORD GetFriendListFinishProcAddr = (DWORD)GetProcAddress(hd, GetFriendListFinish); GetFriendListFinishOffset = GetFriendListFinishProcAddr - WeChatBase; + DWORD GetWxUserInfoProcAddr = (DWORD)GetProcAddress(hd, GetWxUserInfoRemote); + GetWxUserInfoOffset = GetWxUserInfoProcAddr - WeChatBase; + FreeLibrary(hd); delete[] dllpath; dllpath = NULL; diff --git a/CWeChatRobot/robotdata.h b/CWeChatRobot/robotdata.h index 9889c21..3cd8b3d 100644 --- a/CWeChatRobot/robotdata.h +++ b/CWeChatRobot/robotdata.h @@ -4,6 +4,7 @@ #include "SendText.h" #include "SendFile.h" #include "FriendList.h" +#include "UserInfo.h" extern HANDLE hProcess; extern DWORD SendImageOffset; @@ -14,6 +15,8 @@ extern DWORD GetFriendListInitOffset; extern DWORD GetFriendListRemoteOffset; extern DWORD GetFriendListFinishOffset; +extern DWORD GetWxUserInfoOffset; + #define dllname L"DWeChatRobot.dll" #define SendTextRemote "SendTextRemote" @@ -22,4 +25,6 @@ extern DWORD GetFriendListFinishOffset; #define GetFriendListInit "GetFriendListInit" #define GetFriendListRemote "GetFriendListRemote" -#define GetFriendListFinish "GetFriendListFinish" \ No newline at end of file +#define GetFriendListFinish "GetFriendListFinish" + +#define GetWxUserInfoRemote "GetWxUserInfoRemote" \ No newline at end of file diff --git a/DWeChatRobot/DWeChatRobot.vcxproj b/DWeChatRobot/DWeChatRobot.vcxproj index 25d7438..96b67a2 100644 --- a/DWeChatRobot/DWeChatRobot.vcxproj +++ b/DWeChatRobot/DWeChatRobot.vcxproj @@ -159,6 +159,7 @@ + @@ -174,6 +175,7 @@ + diff --git a/DWeChatRobot/DWeChatRobot.vcxproj.filters b/DWeChatRobot/DWeChatRobot.vcxproj.filters index 87583fe..c4cb538 100644 --- a/DWeChatRobot/DWeChatRobot.vcxproj.filters +++ b/DWeChatRobot/DWeChatRobot.vcxproj.filters @@ -25,15 +25,21 @@ {069b8c09-e473-4bba-a49e-571f35f2efef} - - {24dc11dd-cb6a-4c63-bf21-35823cd389ab} - {25f77de8-b12c-4f2b-a3ac-0260b6a16897} {166b9e01-bc1c-4366-abcf-c14ec3fbbfb1} + + {8ad1ff87-550b-4942-8ebd-afbe1cfaddc9} + + + {24dc11dd-cb6a-4c63-bf21-35823cd389ab} + + + {564cc9ef-a939-4bfd-a420-a08b3072d198} + @@ -52,11 +58,14 @@ 发送消息\发送文件 - 好友列表 + 好友相关\好友列表 自动功能\聊天表情 + + 好友相关\好友信息 + @@ -75,13 +84,16 @@ 发送消息\发送文件 - 好友列表 + 好友相关\好友列表 自动功能\聊天表情 - 好友列表 + 好友相关\好友列表 + + + 好友相关\好友信息 \ No newline at end of file diff --git a/DWeChatRobot/UserInfo.cpp b/DWeChatRobot/UserInfo.cpp new file mode 100644 index 0000000..8d6adf2 --- /dev/null +++ b/DWeChatRobot/UserInfo.cpp @@ -0,0 +1,177 @@ +#include "pch.h" +#include +#include +#include + +#define GetUserInfoCall1Offset 0x645BD9A0 - 0x64530000 +#define GetUserInfoCall2Offset 0x64C08420 - 0x64530000 +#define GetUserInfoCall3Offset 0x64914260 - 0x64530000 + +struct GetUserInfoStruct { + DWORD message; + DWORD length; +}; + +wstring wUserInfo = L""; +GetUserInfoStruct ret = { 0 }; + +struct GetDetailUserInfoStruct { + WxString* pWxString; + DWORD ptr1 = 0; + DWORD ptr2 = 0; + char fill[0x18] = { 0 }; + GetDetailUserInfoStruct(WxString* pWxString) { + this->pWxString = pWxString; + ptr1 = DWORD(pWxString) + sizeof(WxString); + ptr2 = DWORD(pWxString) + sizeof(WxString); + } +}; + +struct UserInfoBaseStruct { + DWORD data; + DWORD endbuffer1; + DWORD endbuffer2; + char fill[0x18] = { 0 }; +}; + + +VOID WxUserInfo(DWORD address) { + vector InfoType{ + address + 0x10, + address + 0x24, + address + 0x38, + address + 0x6C, + address + 0xFC, + address + 0x110, + address + 0x19C, + address + 0x1B0, + address + 0x1C4, + address + 0x1D8, + address + 0x27C + }; + vector InfoTypeName{ + (WCHAR*)L"\"wxId\"", + (WCHAR*)L"\"wxNumber\"", + (WCHAR*)L"\"wxV3\"", + (WCHAR*)L"\"wxNickName\"", + (WCHAR*)L"\"wxBigAvatar\"", + (WCHAR*)L"\"wxSmallAvatar\"", + (WCHAR*)L"\"wxSignature\"", + (WCHAR*)L"\"wxNation\"", + (WCHAR*)L"\"wxProvince\"", + (WCHAR*)L"\"wxCity\"", + (WCHAR*)L"\"wxBackground\"", + }; + wUserInfo += L"{"; + for (unsigned int i = 0; i < InfoType.size(); i++) { + wchar_t* wstemp = ((*((DWORD*)InfoType[i])) != 0) ? (WCHAR*)(*((LPVOID*)InfoType[i])) : (WCHAR*)L"null"; + wUserInfo = wUserInfo + InfoTypeName[i] + L":\"" + wstemp + L"\""; + if (i != InfoType.size() - 1) { + wUserInfo += L","; + } + } + wUserInfo += L"}"; +#ifdef _DEBUG + wcout.imbue(locale("chs")); + wcout << wUserInfo.c_str() << endl; +#endif +} + + +DWORD GetWxUserInfoRemote(LPVOID lparamter) { + wchar_t* userwxid = (wchar_t*)lparamter; + DWORD address = 0; + + if (!GetUserDetailInfoByWxId(userwxid, address)) { + return 0; + } + ret.message = (DWORD)wUserInfo.c_str(); + ret.length = (DWORD)wUserInfo.length(); + return (DWORD)&ret; +} + + +BOOL GetUserDetailInfoByWxId(wchar_t* wxid,DWORD &address) { + DWORD WeChatWinBase = GetWeChatWinBase(); + DWORD GetUserDetailInfoCall1 = WeChatWinBase + 0x5F917490 - 0x5F230000; + DWORD GetUserDetailInfoCall2 = WeChatWinBase + 0x5F2BD9A0 - 0x5F230000; + DWORD GetUserDetailInfoCall3 = WeChatWinBase + 0x5F619F70 - 0x5F230000; + + DWORD DeleteCacheCall1 = WeChatWinBase + 0x56C349A0 - 0x56B80000; + DWORD DeleteCacheCall2 = WeChatWinBase + 0x56D983B0 - 0x56B80000; + WxString* pWxid = new WxString; + pWxid->buffer = wxid; + pWxid->length = wcslen(wxid); + pWxid->maxLength = wcslen(wxid) * 2; + + UserInfoBaseStruct temp = { 0 }; + UserInfoBaseStruct userinfo = { 0 }; + GetDetailUserInfoStruct pUser(pWxid); + DWORD isSuccess = 0; + + __asm { + pushad; + pushfd; + mov eax, 0x7; + lea ecx, pUser; + lea edx, temp; + call GetUserDetailInfoCall1; + call GetUserDetailInfoCall2; + lea ecx, userinfo; + push ecx; + lea ecx, temp; + push ecx; + mov ecx, eax; + call GetUserDetailInfoCall3; + mov isSuccess, eax; + popfd; + popad; + } + address = userinfo.data; + if(isSuccess != 0) + WxUserInfo(address); + __asm { + pushad; + pushfd; + lea ecx, temp; + call DeleteCacheCall1; + lea ecx, userinfo; + call DeleteCacheCall2; + popfd; + popad; + } + delete pWxid; + pWxid = NULL; + return (isSuccess != 0); +} + +BOOL GetWxUserInfoByWxid(wchar_t* wxid, DWORD& address) { + DWORD WeChatWinBase = GetWeChatWinBase(); + DWORD WxUserDataCall1 = WeChatWinBase + GetUserInfoCall1Offset; + DWORD WxUserDataCall2 = WeChatWinBase + GetUserInfoCall2Offset; + DWORD WxUserDataCall3 = WeChatWinBase + GetUserInfoCall3Offset; + char buffer[0xF90] = { 0 }; + WxBaseStruct pWxid(wxid); + DWORD r_ebx = 0; + DWORD isSuccess = 0; + __asm + { + pushad; + call WxUserDataCall1; + lea ebx, buffer; + mov esi, eax; + push ebx; + sub esp, 0x14; + lea eax, pWxid; + mov ecx, esp; + push eax; + call WxUserDataCall2; + mov ecx, esi; + call WxUserDataCall3; + mov r_ebx, ebx; + mov isSuccess, eax; + popad; + } + address = r_ebx; + return isSuccess; +} \ No newline at end of file diff --git a/DWeChatRobot/UserInfo.h b/DWeChatRobot/UserInfo.h new file mode 100644 index 0000000..098b46d --- /dev/null +++ b/DWeChatRobot/UserInfo.h @@ -0,0 +1,5 @@ +#pragma once +#include +BOOL GetWxUserInfoByWxid(wchar_t* wxid, DWORD& address); +BOOL GetUserDetailInfoByWxId(wchar_t* wxid, DWORD& address); +extern "C" __declspec(dllexport) DWORD GetWxUserInfoRemote(LPVOID lparamter); \ No newline at end of file diff --git a/DWeChatRobot/dllmain.cpp b/DWeChatRobot/dllmain.cpp index c2a5abf..db25ebb 100644 --- a/DWeChatRobot/dllmain.cpp +++ b/DWeChatRobot/dllmain.cpp @@ -16,13 +16,19 @@ BOOL APIENTRY DllMain( HMODULE hModule, { #ifdef _DEBUG CreateConsole(); - DWORD base = (DWORD)GetModuleHandleA("MyWeChatRobot.dll"); + DWORD base = (DWORD)GetModuleHandleA("DWeChatRobot.dll"); printf("SendImage 0x%08X\n", (DWORD)SendImage); printf("SendText 0x%08X\n", (DWORD)SendText); printf("SendFile 0x%08X\n", (DWORD)SendFile); printf("GetFriendList 0x%08X\n", (DWORD)GetFriendList); printf("HookExtractExpression 0x%08X\n", (DWORD)HookExtractExpression); + printf("GetWxUserInfoByWxid 0x%08X\n", (DWORD)GetWxUserInfoByWxid); + printf("GetUserDetailInfoByWxId 0x%08X\n", (DWORD)GetUserDetailInfoByWxId); + printf("GetWxUserInfoRemote 0x%08X\n", (DWORD)GetWxUserInfoRemote); + system("pause"); + wchar_t* wxid = (wchar_t*)L"wxid_ltedgfwcw7yu22"; + GetWxUserInfoRemote(wxid); #endif break; } @@ -33,7 +39,7 @@ BOOL APIENTRY DllMain( HMODULE hModule, detach_count++; if (detach_count != 1) { FreeConsole(); - UnHookAll(); + // UnHookAll(); } #endif break; diff --git a/DWeChatRobot/pch.h b/DWeChatRobot/pch.h index a1fc949..11a1810 100644 --- a/DWeChatRobot/pch.h +++ b/DWeChatRobot/pch.h @@ -16,6 +16,7 @@ #include "SendFile.h" #include "FriendList.h" #include "SaveGif.h" +#include "UserInfo.h" #endif //PCH_H using namespace std; @@ -43,8 +44,8 @@ struct WxString wchar_t* buffer; DWORD length; DWORD maxLength; - DWORD fill1; - DWORD fill2; + DWORD fill1 = 0; + DWORD fill2 = 0; }; diff --git a/Release/CWeChatRobot.exe b/Release/CWeChatRobot.exe index 39b9b985ca855056ba9bff98a198288b0726df9f..628335666e9764ee07d25f8de8b96b86bc7c9450 100644 GIT binary patch delta 22887 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 J#g=ab{|nRv4< zZRdE*I)G`Mva+L+%6BE-2m5MsnZw&Haaf-^C_q(2%fzdjb_w#!%f4uMhxb|i3 zwbx#I?X}mwJcC7TeTrK8RA>dEyL3|vpBeIM^40aN;U2iuZ*KTyl*{~E!kYQ?v#=|C z`bpTQe0n9U6X^#-Tf$oS^pmiUkzQT@N%(A}tNpKpeaNS-`qloU!msi5_wwm#|4+lH zJa5fP3;Gm0kg>B3zj!Uo6Y ztt!X^y737_)MEt;6Al~r>OII-0;GUFEJ--LZxeFV?`igcFf3j&7}+*JAmDv~S1_Wp z*!8P&)~)1tF*pvg4FtibN8c7E3U>SWB{vy4XOOni$d%gj$2o&kd~RF6faCT79OqwD zYTq=(a^x8!cgFYnM@CNIXx+kbi|Tk(y)TE>F<|F7vxUv^2@P*Ha`nCv#411!+u_8P zZTAT(Bo6KU>V37Sjz+rxiLd#vkxLC237?CY-Ho15epPA~TxwZZ)OXgpQ zCyBV=dGK&N%yGr1eKP9aC?J-ztbkxr#RN{U~0cSp>PL#*>AD1vXu4rSB6y^xzz#9oYf>Mw)>bJQ%b2PQN5qN znl1Jpb9c4SQ{7n2_W4K4(YjvHh}a`T<3ejks`XYtn%$PHcK{Nojs20fq_G{m|iH_}1((Gf!r^T@8hyzAW{$ao%AKB`v ziO8=mpC*%7O|`4b11D2=-}GB2IKYpo|DPXVgLJr#_nJ0WWhdCr~+#|wDz_{{=;T?kc z5zi7gPrn|)ng*=_pTxm?g->L&%Y)|$HQ6j?$VR-iWHWWATJyzeR$W6SlLm)?J~?=_P+IX|^Nvx(_{*hr^+{q949H~}^7HpO`n&Ni_YWUg+#$Bj?sAO$ zyVGe2JV9Qn3qIX9kL?RhNT|r-EkbUuPa^lj)h7j#L9Z_N%cye(-G-oju zh%xr?Cn0GC@?A#%o|xUG&VZ6b7_Bvu_Kj?3n)8y))M-w0ZF%qqBsXn?#DzAyiNC|9 z+|+@Eu_D`PcCxTxgO~gci4{HN$$9?Z{m+yEmkf50*b13U}eMN zg}2r+`>_1P+e<;y;97GJ*(Q%FZfh$~zTG|uUZsDE<5Se4u3ad%r@=CENZB;^@_ z4((dDZg_m`NuEHotb7>G8h03}L;IuC={Vl)bh;NtZOcdO((p+zQbAOp3X|kH_3%s2 z43qRYQ@Bx)MI?kVDZu_t`((4DLWH&HY<1MMLh!%>f!d;qw{}Zxrt8_#fT^bImdlvH z9wWW68zYDDkcnAgQUN8~fk@-II)i9Nt;$&xcUu(C!Zw`EmT5>Q)XzWAK^E3*S>P^q zx{6uuVi)gUn=J+IG98~lz0+N!Bb2k5*wFFG8Dv2p&io^euqABW2w9xVNZ-GY^eb{X zsw*habdkPzok)6h0=s3GMvN>ZLFs_BmA9sm{3!0S)y{uyt9et%g7_m299)l;{&Rz} zn!1){xFifKbc;wu`!f0Y42P&!XkKPfugs}w)~zB-CGb<58Oyl!8X;h61i=r&N7(!B=Yc5L}W_|-#WUU%Lx z)ZOUc4b0Sy3s)FFFpTx?fx#Czp1}fvv>s1J3!2v}_N-%zTti~FMhz2GGD&n4Vp()Z zp=XWIjiVq?vR-I~QX5HMMWjuBc<^m|>|ip^&7{YkVtVHW?dPYKo32|;;MXm!p`z|`upNt-koh=?co<9Zh zP9Anvp6@Vc|<)hjUdhKDqT*VzgCdhFS+}8 zZZ)-7l_$Z*y)Sq+nq~`ESOoWu_3Y{k2)^v;yV=W6KA7gxHq__kC+~A(UDm-H_rFl! zlArHZpufPamp7tE{qNEld8q$8I;&dvdpfhavHzLQc47hCX>|W5bVhFcf2Gc*|HpQA zasKb=?1UT3!X|15Zhflfl8(j7vL?!f|LD*DJaMvcWH4);7^RFj2v_!V5Xaf(`Z&Hr zYMt(b9dHmlz#e!2_>=nSIJXg=c19PT$tFb#SI%SRNq-hfnpyiK>4>r#BUe-q%H{Pp zpD~7F(HgOc+z$vbsg8$Im^Svlk>qadrDyYpIP)cM&>_lkDFmzsD3C25NGW?GHgde1 zEU%w6NQ->whxtRD`Jt``kM%U5%H8)&6*RGF_dHHlCue?Os#TEUG{@k8yY$^qFxED) zukV@Y={HZL_9ceYf1r!qtYBCFOeIxB(o2-%VJXMaD~H>QW1%|p#ST*!E0=}~9bN2@ zG+OxT53Er-Ot|7lKB@i(6U)L(zWaN0UEHDQ@r|9SX=Zq=tOL9jx8lZOH#-(z;e9oH zuBhI0n`+4QnjJ#+a@;8PxNMM6_jgt$Q~F~LaQOU)4VRAq$oSY=>9b#&ldxTzt%NG?V`8ciHeDcRz2aqzY0;kyr zV)V88SwFzbnpsSE)~MVeY^Y%i;vbPpdJQ!7w+wI9`(61+6>l2acEfVFEvJ)KEe%kP@$T=f@jNQtxtP@2evMO}z>$?vUW>LEZhNHqzv4 z6K7EJXks~J8>AV9SgF}Q^h9ryl-lSK9Ot-vFE&WDyP#PZ34^eec6^3QY8#z%oy|CB z_}X$s?K3Rb53tGF&`_XV6g`zg+J{;?4zLHcSA|DRY__hbug?suzv$AgWY(;k4V^^m z(-3db4}%O(>Bk}ep8n6my6G&_AO&idVLMPmjN1pQl8l@VFaCTf>liolH6^e?99{);P=OA ziQ^l;=(#%ZOB)LtubB7uT6A#-&M+=@PKzTw#+nj`xy(;A5z}9u#9Oc1s@n(D-k8mH zn1%~8_3Sy5A@I3>#VIKvkSxe+RiJ(A9JVPbdUTYLUx5wqps9{;vG2F{NyQs9-OhT} zje@tVOpOe=Kvuaq*j9EhhF@||giPg_$yNqs9EP>Cnb2H4syc!lc zQ#zMqD7RfljcuyW57)x4jcUo8XBqh-j-+D82U`B3R9;Fgp-j1LgSeiP%)%6u7vLSy z3~gF@w$`blRI749CEGtU9D1mosYHBp=2!_)Oc$eVSi6WP7=7=qL34XGQrr^VSB znWL3h()e|di3FEVR6Ratz29V%Zlp55xg)U&j+=Xr$TQ0|p!&ga-?DRVJ~d*;O=&X_k6oVU*# zhxmngqoK)*^GbkEoi7FE(fN^x56+hbpSk2&t1z_f9nlbg1nZc;7)_=xcpP!_0u|zb zg;EUNxNt>4Hyo<1^fvq$hL%&wURgK{%$gPs72ZC`+86Gd6u6AnpcqLCX%N=Yr~Rtj zzFPBcK%GS6)we(hH?>M9-p zW)pzp1OoiKJMbq(-cFOTjgy@&SrIObILJ1w&0>l8@%K(?A5+jC`ftUHK!Et_;I8+`IBwtv(XXaO9KV!`K!m z$5z?}ZSqg7^!SqQ()l{a!cTD-vJp4=_w}WU!@}bkY46lClW^vx(ALbb*zPiy` zl{$kuk-CY~Kup(bU)(zQccYJodgvYE;kc*^EIV;xbQtU&N8&opvu{QPv*P=s$O+eT zIQwH|byl$>_ov*28EA=cVMcmr5-d?m(_g^Lz_jNv1gprIBJRB=I7cT}dq3IZt?HID zXc};|kLSmzlC*h)og1ZRl5_%RPyv}={j!WYdcVyEexfr-QN@l~9#H3idA14pUz%%GfGnk3TrS|}S}O%iK-bC3-v zd0EK8+za5U&6YA=Pk5LsLKP{B?RcO}3Uxt9ku80|4FQNPdqIUw0WB;=97p4b0EyYL zgUlx~u$ryQ4eocz>{x}erRI5-v2L3`&5aJ8?{DiY^qTumc`UpL9!j3aFyZCr*%P@< zQJ}{pyWT!~=C(cwH%bmdVu}kN9GZYh;y?1?t!zFXzUXzjo(Q-qJ9J%c>RMfOnliI5 zuP!%rr{Ve(XVqcHzwlssa06B3w>pEQP-*tUfa5KcWxDl>K|r8rHMIpC7h!_~Hhe=Q z`^);_!EJXmn&)YBd42rvHqr)n-O=Db=;gwO;lUA@h+fhDO)vN64 z-xsrev-!`P37EBNGHmPYF7Wl^pBF@Y<3$@MEX916PnTk&O>=#XNwXZ;gn8i~s7uI@ z@PQy-;(W+$66MRJ_y#ortBL1{#S+Zd@%~`0qR-hB?8)@e2T5xs`+Q>%mgx^0C)4u? zZ!$Jh2Q=~l)rE0ERs4gv<08v>Xt<8FGvHfZJ3&3#=}+3hs4rr}p|5~0FCw?| zegvoSZ#Tr@E0ejJH9SNI%l3y7vCzj9(95x@Uo@E`sgmUO$)wzpLW0 zA8#Z4{J@$qMX}p|^%Dq+0!q(AyOtVsSHV-$YMOJm%4#V9YSO{K;0O5v$j1##2fgf5+Y?g}u@@EzEFDQ6u*keYPGv5#c&bNF?R~8ItwlQiH%)ndSpL=Qy@xepDzGRWOCdOZmlfd* z+6hXiyuYQA_nK`e((km`m@SHtB<`Gv88;??I#vFCYASvL^8&q6iQ!U%`1hhMTa@EK z=6)ITx<%*qo@9G((O0)DfvqHLrQ_}cTO);?rOdW91cifJ=|*{GYgBOUJ8-avclR8F zi#tN;{B(P3E(q3c+bnj;n}TCBHjMAKB>+94Fb460!ck*jNqAMlvmbuKkzNf=H1n5U z{%e97nyE*q%hOYmTXUeJbSj^D=f0J&$o|4!S|7Kf@XH{kqL-@c_a?8 zw0LwTS%n@yyjz4h3a~U%@g7$(Z$g~CU0QtBSw6rHboqeOeB8jtL|8tciH|QMKI8iq zV!;tX#?rcMU&q+K_*r2#zO~ueYsCi#qUuq>(mIG*q&wNnEG1)y0Of?<^ZgzD@N32P z{uX;Pt1g)+wA)!z3EkpumMo%=i~QUiLB`V8hqF6_YLJBjpGCqm#J#EyPHQ2~ph}>i zGv93CqVwYpw0ukgUZyyxiQ>pcij@r%>rNwHy)&qjPX=7)lSn(C_@3mG(X}5N3qdpK z7>fI!@O2=unz#e4eCl(c4XMo}I?zGo(pIdidfyo2alYrOsPe#d46)v~1u;op@7szT zZ5;K!4tFlwC;bn0uD+-PWg%)@W$OU?@LWF2w|fW>r`oX7EO8?&(id6!j!~o+8mV=* z=zq~j|KovP$3UwV|4)q%QkIv|5FtIR%NJ*V1zjv%%$RLG{sD z<>3PV?d7P4H+kT(uw)fvuNT-sOtQOwnR69aFUx{cWC>kn$8P-4q|xP!oJtPCIxSjK zo)ayx0VcG$2iWx3gup9C+@Lz5iw6{8Vg=d#$aquw{{?q@~H>aB?y zD)q50?W`jD;s#;8Z#Ph6Oa}<_!zudxZa@hGqPW4wRZ9kiTBh9@OP@oE8$>QVR*S3E z_jOTun&O5i7aFqj6G2nV^bTuEKvGl<-NwoYz00@S``O{{5W5S-^%JI_sk5oU9? zbmtG(Y^EBVGj04T2)l;gWc-R>ARR_MooSpwM=DvXEsowezBf4pd42)MO&w?Jviqf< zt-JB(N~e?d%V<38J+2ou|B<$%!@wV@QxPknpun?~*gMVjw63{A7@@to1mdcp0>i>j$J2cPfY<4QiR;A0=Y zwi|h@j+A0u_Z2o`SMi+gO?W(=z2`+ePOzoBW71FH5%W#FVciHT&zH3v$f$7<%Ta@k~{m;Z(Bds02;`01PrV*NvcD{>M(WrF5E5OnJco* zw)ejwDj@M%Zb+=`Qx=@OhHplLT}I8GeH+alb~p19u?qxxA~;FfTI?d=AG57kLJt3L zn08NCq(4z)kv>M<*>fXEnS4)-pAS|3jaBUlE?o624XXvCy|J0k(o^}3b$qs!vRTO9 zrK-p5sDLQhbPwaFC=ysgcXWKpUyn|e=g_M5{$7^bCvo(R+ zjUZ}ZYoqM@$nuPP75rEuDj-Y|&xmGmBQa_ugV^n6#5W;+4WEF?L7v}9%I+)t9fp;t z0UK$LWMhb-iWpA0lVPtEGaYF0D;|$)MRw4IfzGS41C^gsrQ{SUfBDfp2>i@wI_<_y z`+APiuDy!xjJ+Rci*+2FC9a3JIfT6Xy#Hzfe*_V4jg(fhD}Rik!zp>lTkAivNRW4Z z$)`WvU}1k6w+0x`HSyMlu-?C#;ClaRg8!ol*A*xHbEgweP}rhRwIN5>o{SrQge*Yz z#_j8#F}QSVN#;B3#O6@PE(#TeFEw!7Gl0hdTL3wL#ei9WcL5YmzQ=J*fHuHQz^?$w z8IFqr=mDvK9KdG4PQbH(lYkEa*8yFCm(V5{k1!(vD!@!YYCZP{ZZ$Fw0JZ^ke!y}2 zFL2x=01F@$kO&w97!2q_eG8xw@H*fbFf9XY1grqe0jK~Y0e;{Yh_n)P6#U+2ADoCS z>^$o#R-^g|;BCNFKpe&z0T2PYQ2q));n4e_1H23P0MG)s2@s!yj*#vL>;|j`Yyl_$ z6iQG};a#M)fZX$_KgShv-?}Rn13_U+qbu!)bPQk$zzkRn$N{_r`U<2qfCj+VfbRi5 zXfFng1WW|%2Hmeji@eI+M-lRYfDCu}>bbQT1qxre5nUMV7c^>UB@{3o&;WQHPz@*p zc5Hw0%+_a(ToXWX5KI7hfHJ^-Kn>ss;56VezyWynRnRMqTpOShz{TTX z6;K(^lAbQRwgO-W)Yh<@mBFm3QZlduj3_`NF8X<(6AE93nsi_dkP^5X79qd) z72pj}j~?9uI2F1C6anmN&_X0LpaPH!I09$_Ohda&(A&YIjd+4b>k+gyx^R^!dw7lf zcg&1N_CeKwp~uktL9ovSOMn^qOu&)cqmNa;DJ-;?p_|u@+!N(Sj_!YSFI=%aD{6TT z{w{8L-kNm}V8jTXKLx}Ta8?A;ajfoO z;(#V2R{#;HX?iv5cPO<_!|O2Epgvt!jPQ)Ikxii31GDu6nuTXkKJ3OdHL;ftg{ZtJ zi1HX(wR+)5^bVA}0iKpbBVex_8lv;2q}Dr86N5SS1jx>*P)-JTb09h)ahTyvO|4=s zVq9(xBr&X&D?|BNfb^)5n*|7k`IR6QW11*X8(-o!&eM{x)OQnFwE@g%L9HlQK+X59 zv!jLr^&(2zuVwYd6CVj35f!oClJ2^l#ATBO3-sG z<%K|BAUZFyXKF$Uy~wdJxdxPfuPYBrN=rUOYj->9qAwv|fx-d*k=STY!=%7!4~g|2 zW-b)w9t7!NMu9pY!7M0m0g(1QdZGGbAF^$K4O!r(CJY4!I2`ukKq8(*`8wb~5s})9 zNVCH{T!<^lB0>M28H~CF%MBjQ0p$r~rqfXNo@mu2x0#Ms+(o$s-+HK5!A@a8~tLRM81NJ4mr3RH-Wx^OfOcwH_O<$q?&MDN4f7PUHdiOqQ- zB--7c_|iZNQ1+|?!Zo3dfDJl4WMt)Clt)lL321TSn=Y}pUkLF^^uVh zZXy7eSSRIY1M(;PP!a1hWA&^!a%2iO3i=t)>4EJDJEw%4IA%1Jm* z4lyzZ;Rw1OW%Lu33#V}ejebIT-u!9vH3Pm|wnck<_FJL11^c$;-DIIJYx_3 zWXoMRLKfYHn+jYBk1O0vhM` zyy>2T^?56!XH4dW+It6XF)!49FI-{t0vBN=khDL=QsV_K!W!Tj;3{HyiJ}Wo&E=kQ zbuxLutmtLSmUDS`l-F_vca%4C^gk#}6o7}zR^o_9&AYBs7jT7SKypH!1k%f>6ojKI z*fafl8pjikYr;tfNvvB-J5k0Oa+RUcn2YFu44Ajg^&9vmA3?)}Td{#Jb8TQlLah(j zuzqEsq)kX!)Ej}jUlXs~k36v;APtj%JAtDizTlP&sGdOhO5jP$6g(;6qnh#Rlaw_Fl5xd(d0UDxhdE3aII~F}(ZY2%&n~3if%>6PggYYzt=-l4G^7;77hS1mtk_h!PIQN_X#ChOyHig&>M<8R z%It5)2c@n zeBq$oMs75Kg2$U=opPCuw2!OY_kC%PJY)?u&4UjW$&!pmN`pMVPm!)Lv4W8TMB2s$4xhGWjbAAl~$3s-p_ z2N2-wUbuIG^Qp!qgU2m#N%RGfWgygg5eh%RTm#qSg^K|$5RJ3Ea5I6c0o@WWTsCl( zRl7z6|Nm!A*vS7w&zjo*&a>vx__vz+u{L2$U%Wq_GUEIL4>r`#co>`dVHVpkUMMMN ziyPvE`1Q!+4Pz1~zG&plH`XvY6|Yvy_*X0AhP*7Jk@K!wRj_hZEi#tw^42e3KV|ubRn&^Q z>}i)e74>shWUpG8XT*u|cj~9EV}Cgp@NR`O3U?>o@WJu@BEpA)$jC z$5S$;kuU9N97(0;8xtw{%9V^fKaWZq&-1$aBcB|7{X7%QyY9MEkc1SPP~IVQQU)13>f_X8Y(VK@J<&9PZbRhh<)gI@)nHOTcnk z%LEgT{-gCC0bB5CD9Z)x{514v&8Lg{!0^(U;ER_9TK38p|5a$#rRpkl$91Q4*LDBU z-PQ^90s5i(;rdv;T5r_P(J#7S%0q!*=eGL>wlY>li)wnN5bHL{mv zZ^=%}&KJtA$=YQ<%M#*J zzhaCcL2;krLB)rP7DXRrUuBeXj8d*lR?bl_Rc0yIDj!x_l}{=C;s?hcj<1jZEdI|4 z=Mq{Il2i*+%T)KPN>#g5PpfKFFR8v&ZCCGA7rv*ysJ^EDN*$5docLv8spbn!jCQ5A zP+P8jM|(z_t=p|Tp!-VKr5mgtuYXk^ZKb$xbS;=RUwx83UB6TRp8lNvWBo6BA495PiD8u?$FRrng5jv)4a2*JvxW~0 zmkq6kFGy&!OX&X6XlY@*G#OG`rAMT1N$W9B0kR;OR<=m?zAQ9uT-?KPFUHlywZ(lM z_fuT3e3m>OL|1|!~_>TC@gsg-|6KXM-&l0{$ z2v^0bR;%(=KdHv36VwaT52_ETb&0mblZl@t_SM{@Iaa9oQqxB}Q+rUW(5=-y!<%2M zeun-_eTV)#z1Scz#2b<^hMx^wCa$Yc^$@8{S|L3z^^v8@a%8t;!nnS1L*laIO5>i4 ztBxBZpCn%byQxyVp%5q^Qf^f~rrf3cTG=PwC*kJ=u_|0OQB|yZUUgOVx$3`EovOkg zplqSKpIV|0RZmlAtIO1{s&A@SCT1r-n7AdeDDnBk`b4AV&zgI+8QM+So7(BRWc|1L zNW&b%BZkKeTrO5Pgc3>zN;9Q7(sJpO(&N&T(hsFyNq?0NmOUbSOjaR#RrZGLlI$y4 zzqmf~Ir95q2cO9QCU2MDlK)gF7byBEvLWpR<$h(2@>Qicet7)m`0Dr<<7?yV;y;2~ zug9-V*p^U{us`8sf<`qN(!Z=ar8=+rM)kJ3Uj2#s2le2@@We@pk0w?mK9$&%*p@g< zGgcF)S)szIKQrW0%$1Fz2C&k|z zzc~I}d{RP6LV3cg3C#(A!_1CQ=~Y>(GSyS67ggs}pQ`?@8mlf=Kc#+C{jJ)NxH9n` z&3&53HODk{nyZ>N%~zTZ&9|Cv&99omA=()2JzAx9x;91o23Gt{EvJjs&C(sxy{vl^ zUh%T-3!OuE6CU6v9jEu#57Y#_U5b5*v+$1B6gL##Dgu?^%2?$zr6gV&pBTS3-U`iKjE_x7PDo40Ojw&xSe)=y z!kL6i30D&OsK%+{R4SEGWm2W9a#RnhN>qP>vpk^sD-7;6)d?6~JWbL7KvdW3qcdXieMR;vwa6C7BII!(P)y;8kKy-uC4E>v$$Jdt=k z(MJ=lS)|#eY1NFDp3sie$>0I%bYlGyeTlvbN_-FA?7#Hi=zq{h873Oy zV2&#cYYauu*B=d)@NB0H^`x;%+!@)EUyttRP;@9d6T-vvs7m60qLqGs!R;5Otn*0q1vO`tJ<%sR5hqBtHf{tfp7v5>L@jfYEK$rPF#?f z-s66wbuqe$I;l>fYt^;EB8>WU_NVqaK1Xl_IC`UfyP&W`)1|qs3DrhvCu(PD7igDg zv$VO|z1kY>G3`lh8{GD7Z6J6kbVgmKE=RXVSEDO%EV`WU@buf^cA^tt*9 z{a$^g{;>Ws?5G=VFwmfY8%&2w&%^Nd8X65vhBgCdcbzwUq!MYUOe&SCq(->&CDH=v u9_e1`F=?%|Me2}>WudYt*({k^mM+VbS>QGE==G}U=&+k#2yh&j^*;dh1-CZ< diff --git a/Release/DWeChatRobot.dll b/Release/DWeChatRobot.dll index 17f6993f003cb19e70624f9a3bdb0e42f135cb56..1096dc81a28a64affc7f9d723836497ee23aaecc 100644 GIT binary patch delta 11708 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 Nsn&GFgoM86{{nCVTATm? delta 7555 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 diff --git a/wxRobot.py b/wxRobot.py index 4d9f0ee..f8f9a02 100644 --- a/wxRobot.py +++ b/wxRobot.py @@ -1,4 +1,4 @@ -# -*- coding: utf-8 -*- +# -*- coding: utf-8 -*- """ Created on Thu Feb 24 16:19:48 2022 @@ -100,6 +100,9 @@ class WeChatRobot(): def GetChatSession(self,wxid): return ChatSession(self.robot, wxid) + + def GetWxDetailUserInfo(self,wxid): + return self.robot.CGetWxUserInfo(wxid) if __name__ == '__main__': @@ -115,10 +118,14 @@ if __name__ == '__main__': wx = WeChatRobot(dllpath) wx.StartService() - me = wx.GetFriendByWxNickName("文件传输助手") + me = wx.GetFriendByWxNickName("文件传送助手") session = wx.GetChatSession(me.get('wxid')) + print(me.get('wxid')) + session.SendText('来自python的消息') + a = wx.GetWxDetailUserInfo(me.get('wxid')) + print(a) session.SendImage(imgpath) session.SendFile(filepath) session.SendMp4(mp4path) -- GitLab