WeChatFerry/spy/get_contacts.cpp

32 lines
1.1 KiB
C++
Raw Normal View History

2022-10-16 11:11:47 +08:00
#pragma execution_character_set("utf-8")
#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;
2022-10-15 20:25:42 +08:00
bool GetContacts(wcf::Contacts* contacts)
2022-08-07 20:50:49 +08:00
{
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) {
2022-10-15 20:25:42 +08:00
wcf::Contact* cnt = contacts->add_contacts();
cnt->set_wxid(GetStringByAddress(node + g_WxCalls.contact.wxId));
cnt->set_code(GetStringByAddress(node + g_WxCalls.contact.wxCode));
cnt->set_name(GetStringByAddress(node + g_WxCalls.contact.wxName));
cnt->set_country(GetStringByAddress(node + g_WxCalls.contact.wxCountry));
cnt->set_province(GetStringByAddress(node + g_WxCalls.contact.wxProvince));
cnt->set_city(GetStringByAddress(node + g_WxCalls.contact.wxCity));
2022-10-16 11:11:47 +08:00
cnt->set_gender(GET_DWORD(node + g_WxCalls.contact.wxGender));
2022-08-07 20:50:49 +08:00
node = GET_DWORD(node);
}
2022-10-15 20:25:42 +08:00
return true;
2022-08-07 20:50:49 +08:00
}