Fix get contacts

This commit is contained in:
Changhua 2022-08-07 21:08:27 +08:00
parent 3042de5183
commit 1da3e0d69f
3 changed files with 33 additions and 19 deletions

View File

@ -9,21 +9,21 @@ std::vector<RpcContact_t> GetContacts()
{ {
int gender = 0; int gender = 0;
vector<RpcContact_t> vContacts; vector<RpcContact_t> vContacts;
DWORD baseAddr = g_WeChatWinDllAddr + 0x23638F4; DWORD baseAddr = g_WeChatWinDllAddr + g_WxCalls.contact.base;
DWORD tempAddr = GET_DWORD(baseAddr); DWORD tempAddr = GET_DWORD(baseAddr);
DWORD head = GET_DWORD(tempAddr + 0x4C); DWORD head = GET_DWORD(tempAddr + g_WxCalls.contact.head);
DWORD node = GET_DWORD(head); DWORD node = GET_DWORD(head);
while (node != head) { while (node != head) {
RpcContact_t rpcContact = { 0 }; RpcContact_t rpcContact = { 0 };
rpcContact.wxId = GetBstrByAddress(node + 0x30); rpcContact.wxId = GetBstrByAddress(node + g_WxCalls.contact.wxId);
rpcContact.wxCode = GetBstrByAddress(node + 0x44); rpcContact.wxCode = GetBstrByAddress(node + g_WxCalls.contact.wxCode);
rpcContact.wxName = GetBstrByAddress(node + 0x8C); rpcContact.wxName = GetBstrByAddress(node + g_WxCalls.contact.wxName);
rpcContact.wxCountry = GetBstrByAddress(node + 0x1D0); rpcContact.wxCountry = GetBstrByAddress(node + g_WxCalls.contact.wxCountry);
rpcContact.wxProvince = GetBstrByAddress(node + 0x1E4); rpcContact.wxProvince = GetBstrByAddress(node + g_WxCalls.contact.wxProvince);
rpcContact.wxCity = GetBstrByAddress(node + 0x1F8); rpcContact.wxCity = GetBstrByAddress(node + g_WxCalls.contact.wxCity);
gender = GET_DWORD(node + 0x184); gender = GET_DWORD(node + g_WxCalls.contact.wxGender);
if (gender == 1) if (gender == 1)
rpcContact.wxGender = SysAllocString(L""); rpcContact.wxGender = SysAllocString(L"");
else if (gender == 2) else if (gender == 2)

View File

@ -4,17 +4,18 @@
#include "load_calls.h" #include "load_calls.h"
#define SUPPORT_VERSION L"3.7.0.29" #define SUPPORT_VERSION L"3.7.0.29"
WxCalls_t wxCalls = { WxCalls_t wxCalls = { 0x23631D0, // Login Status
0x23631D0, // Login Status { 0x236307C, 0x23630F4, 0x2363128 }, // User Info: wxid, nickname, mobile
{ 0x236307C, 0x23630F4, 0x2363128 }, // User Info: wxid, nickname, mobile 0x521D30, // Send Message
0x521D30, // Send Message /* Receive Message:
/* Receive Message: Hook, call, type, self, id, msgXml, roomId, wxId, content */
Hook, call, type, self, id, msgXml, roomId, wxId, content */ { 0x550F4C, 0xA94A50, 0x38, 0x3C, 0x184, 0x1EC, 0x48, 0x170, 0x70 },
{ 0x550F4C, 0xA94A50, 0x38, 0x3C, 0x184, 0x1EC, 0x48, 0x170, 0x70 }, { 0xBD780, 0x770120, 0x521640 }, // Send Image Message
{ 0xBD780, 0x770120, 0x521640 } // Send Image Message /* Get Contacts:
}; Base, head, wxId, Code, Name, Gender, Country, Province, City*/
{ 0x23638F4, 0x4C, 0x30, 0x44, 0x8C, 0x184, 0x1D0, 0x1E4, 0x1F8 } };
int LoadCalls(const wchar_t* version, WxCalls_t* calls) int LoadCalls(const wchar_t *version, WxCalls_t *calls)
{ {
if (wcscmp(version, SUPPORT_VERSION) != 0) { if (wcscmp(version, SUPPORT_VERSION) != 0) {
return -1; return -1;

View File

@ -29,12 +29,25 @@ typedef struct SendImg {
DWORD call3; DWORD call3;
} SendImg_t; } SendImg_t;
typedef struct Contact {
DWORD base;
DWORD head;
DWORD wxId;
DWORD wxCode;
DWORD wxName;
DWORD wxGender;
DWORD wxCountry;
DWORD wxProvince;
DWORD wxCity;
} Contact_t;
typedef struct WxCalls { typedef struct WxCalls {
DWORD login; // 登录状态 DWORD login; // 登录状态
UserInfoCall_t ui; // 用户信息 UserInfoCall_t ui; // 用户信息
DWORD sendTextMsg; // 发送消息 DWORD sendTextMsg; // 发送消息
RecvMsg_t recvMsg; // 接收消息 RecvMsg_t recvMsg; // 接收消息
SendImg_t sendImg; // 发送图片 SendImg_t sendImg; // 发送图片
Contact_t contact; // 获取联系人
} WxCalls_t; } WxCalls_t;
typedef struct TextStruct { typedef struct TextStruct {