WeChatFerry/Spy/get_contacts.cpp

40 lines
1.4 KiB
C++
Raw Normal View History

2022-08-07 20:50:49 +08:00
#include "get_contacts.h"
#include "load_calls.h"
#include "util.h"
extern WxCalls_t g_WxCalls;
extern DWORD g_WeChatWinDllAddr;
std::vector<RpcContact_t> GetContacts()
{
int gender = 0;
vector<RpcContact_t> vContacts;
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) {
RpcContact_t rpcContact = { 0 };
2022-08-07 21:08:27 +08:00
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);
2022-08-07 20:50:49 +08:00
2022-08-07 21:08:27 +08:00
gender = GET_DWORD(node + g_WxCalls.contact.wxGender);
2022-08-07 20:50:49 +08:00
if (gender == 1)
rpcContact.wxGender = SysAllocString(L"");
else if (gender == 2)
rpcContact.wxGender = SysAllocString(L"");
else
rpcContact.wxGender = SysAllocString(L"未知");
vContacts.push_back(rpcContact);
node = GET_DWORD(node);
}
return vContacts;
}