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;
vector<RpcContact_t> vContacts;
DWORD baseAddr = g_WeChatWinDllAddr + 0x23638F4;
DWORD baseAddr = g_WeChatWinDllAddr + g_WxCalls.contact.base;
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);
while (node != head) {
RpcContact_t rpcContact = { 0 };
rpcContact.wxId = GetBstrByAddress(node + 0x30);
rpcContact.wxCode = GetBstrByAddress(node + 0x44);
rpcContact.wxName = GetBstrByAddress(node + 0x8C);
rpcContact.wxCountry = GetBstrByAddress(node + 0x1D0);
rpcContact.wxProvince = GetBstrByAddress(node + 0x1E4);
rpcContact.wxCity = GetBstrByAddress(node + 0x1F8);
rpcContact.wxId = GetBstrByAddress(node + g_WxCalls.contact.wxId);
rpcContact.wxCode = GetBstrByAddress(node + g_WxCalls.contact.wxCode);
rpcContact.wxName = GetBstrByAddress(node + g_WxCalls.contact.wxName);
rpcContact.wxCountry = GetBstrByAddress(node + g_WxCalls.contact.wxCountry);
rpcContact.wxProvince = GetBstrByAddress(node + g_WxCalls.contact.wxProvince);
rpcContact.wxCity = GetBstrByAddress(node + g_WxCalls.contact.wxCity);
gender = GET_DWORD(node + 0x184);
gender = GET_DWORD(node + g_WxCalls.contact.wxGender);
if (gender == 1)
rpcContact.wxGender = SysAllocString(L"");
else if (gender == 2)

View File

@ -4,15 +4,16 @@
#include "load_calls.h"
#define SUPPORT_VERSION L"3.7.0.29"
WxCalls_t wxCalls = {
0x23631D0, // Login Status
WxCalls_t wxCalls = { 0x23631D0, // Login Status
{ 0x236307C, 0x23630F4, 0x2363128 }, // User Info: wxid, nickname, mobile
0x521D30, // Send Message
/* Receive Message:
Hook, call, type, self, id, msgXml, roomId, wxId, content */
{ 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)
{

View File

@ -29,12 +29,25 @@ typedef struct SendImg {
DWORD call3;
} 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 {
DWORD login; // 登录状态
UserInfoCall_t ui; // 用户信息
DWORD sendTextMsg; // 发送消息
RecvMsg_t recvMsg; // 接收消息
SendImg_t sendImg; // 发送图片
Contact_t contact; // 获取联系人
} WxCalls_t;
typedef struct TextStruct {