WeChatFerry/spy/receive_transfer.cpp

66 lines
1.9 KiB
C++
Raw Normal View History

2023-06-24 10:25:22 +08:00
#include "receive_transfer.h"
2023-04-18 23:23:41 +08:00
#include "load_calls.h"
#include "log.h"
#include "util.h"
using namespace std;
extern WxCalls_t g_WxCalls;
extern DWORD g_WeChatWinDllAddr;
2023-06-24 10:25:22 +08:00
int ReceiveTransfer(string wxid, string transferid, string transactionid)
2023-04-18 23:23:41 +08:00
{
int rv = 0;
2023-06-24 10:25:22 +08:00
DWORD recvTransferCall1 = g_WeChatWinDllAddr + g_WxCalls.tf.call1;
2023-04-19 23:17:15 +08:00
DWORD recvTransferCall2 = g_WeChatWinDllAddr + g_WxCalls.tf.call2;
2023-06-24 10:25:22 +08:00
DWORD recvTransferCall3 = g_WeChatWinDllAddr + g_WxCalls.tf.call3;
2023-04-18 23:23:41 +08:00
2023-06-24 10:25:22 +08:00
char payInfo[0x134] = { 0 };
wstring wsWxid = String2Wstring(wxid);
WxString_t wxWxid = { 0 };
wxWxid.text = (wchar_t *)wsWxid.c_str();
wxWxid.size = wsWxid.size();
wxWxid.capacity = wsWxid.capacity();
wstring wsTfid = String2Wstring(transferid);
WxString_t wxTfid = { 0 };
wxTfid.text = (wchar_t *)wsTfid.c_str();
wxTfid.size = wsTfid.size();
wxTfid.capacity = wsTfid.capacity();
wstring wsTaid = String2Wstring(transactionid);
WxString_t wxTaid = { 0 };
wxTaid.text = (wchar_t *)wsTaid.c_str();
wxTaid.size = wsTaid.size();
wxTaid.capacity = wsTaid.capacity();
LOG_DEBUG("Receiving transfer, from: {}, transferid: {}, transactionid: {}", wxid, transferid, transactionid);
__asm {
pushad;
lea ecx, payInfo;
call recvTransferCall1;
mov dword ptr[payInfo + 0x4], 0x1;
mov dword ptr[payInfo + 0x4C], 0x1;
popad;
}
memcpy(&payInfo[0x1C], &wxTaid, sizeof(wxTaid));
memcpy(&payInfo[0x38], &wxTfid, sizeof(wxTfid));
2023-04-18 23:23:41 +08:00
__asm {
2023-06-24 10:25:22 +08:00
pushad;
push 0x1;
sub esp, 0x8;
lea edx, wxWxid;
lea ecx, payInfo;
call recvTransferCall2;
mov rv, eax;
add esp, 0xC;
push 0x0;
lea ecx, payInfo;
call recvTransferCall3;
popad;
2023-04-18 23:23:41 +08:00
}
return rv;
}