WeChatFerry/spy/get_contacts.cpp

34 lines
1.2 KiB
C++
Raw Normal View History

2022-10-16 11:11:47 +08:00
#pragma execution_character_set("utf-8")
2023-02-16 22:50:18 +08:00
2022-10-16 11:11:47 +08:00
#include "get_contacts.h"
2022-08-07 20:50:49 +08:00
#include "load_calls.h"
#include "util.h"
extern WxCalls_t g_WxCalls;
extern DWORD g_WeChatWinDllAddr;
2023-02-16 22:50:18 +08:00
vector<RpcContact_t> GetContacts()
2022-08-07 20:50:49 +08:00
{
2023-02-16 22:50:18 +08:00
vector<RpcContact_t> contacts;
2022-08-07 21:08:27 +08:00
DWORD baseAddr = g_WeChatWinDllAddr + g_WxCalls.contact.base;
2022-08-07 20:50:49 +08:00
DWORD tempAddr = GET_DWORD(baseAddr);
2022-08-07 21:08:27 +08:00
DWORD head = GET_DWORD(tempAddr + g_WxCalls.contact.head);
2022-08-07 20:50:49 +08:00
DWORD node = GET_DWORD(head);
while (node != head) {
2023-02-16 22:50:18 +08:00
RpcContact_t cnt;
cnt.wxid = GetStringByAddress(node + g_WxCalls.contact.wxId);
cnt.code = GetStringByAddress(node + g_WxCalls.contact.wxCode);
2023-04-13 00:05:21 +08:00
cnt.remark = GetStringByAddress(node + g_WxCalls.contact.wxRemark);
2023-02-16 22:50:18 +08:00
cnt.name = GetStringByAddress(node + g_WxCalls.contact.wxName);
cnt.country = GetStringByAddress(node + g_WxCalls.contact.wxCountry);
cnt.province = GetStringByAddress(node + g_WxCalls.contact.wxProvince);
cnt.city = GetStringByAddress(node + g_WxCalls.contact.wxCity);
cnt.gender = GET_DWORD(node + g_WxCalls.contact.wxGender);
contacts.push_back(cnt);
2022-08-07 20:50:49 +08:00
node = GET_DWORD(node);
}
2023-02-16 22:50:18 +08:00
return contacts;
2022-08-07 20:50:49 +08:00
}