WIP receive transfer

This commit is contained in:
Changhua 2023-04-18 23:23:41 +08:00
parent 8214d45620
commit 3949504ca6
8 changed files with 88 additions and 3 deletions

View File

@ -22,6 +22,7 @@ enum Functions {
FUNC_EXEC_DB_QUERY = 0x50; FUNC_EXEC_DB_QUERY = 0x50;
FUNC_ACCEPT_FRIEND = 0x51; FUNC_ACCEPT_FRIEND = 0x51;
FUNC_ADD_ROOM_MEMBERS = 0x52; FUNC_ADD_ROOM_MEMBERS = 0x52;
FUNC_RECV_TRANSFER = 0x53;
FUNC_DECRYPT_IMAGE = 0x60; FUNC_DECRYPT_IMAGE = 0x60;
} }
@ -39,6 +40,7 @@ message Request
AddMembers m = 8; AddMembers m = 8;
XmlMsg xml = 9; XmlMsg xml = 9;
DecPath dec = 10; DecPath dec = 10;
Transfer tf = 11;
} }
} }
@ -157,6 +159,12 @@ message UserInfo
message DecPath message DecPath
{ {
string src = 1; // string src = 1; //
string dst = 2; // string dst = 2; //
}
message Transfer
{
string wxid = 1; //
string tid = 2; // id transferid
} }

View File

@ -239,6 +239,7 @@ C:\Tools\nanopb\protoc --nanopb_out=. wcf.proto
<ClInclude Include="load_calls.h" /> <ClInclude Include="load_calls.h" />
<ClInclude Include="log.h" /> <ClInclude Include="log.h" />
<ClInclude Include="receive_msg.h" /> <ClInclude Include="receive_msg.h" />
<ClInclude Include="receive_transfer.h" />
<ClInclude Include="resource.h" /> <ClInclude Include="resource.h" />
<ClInclude Include="rpc_server.h" /> <ClInclude Include="rpc_server.h" />
<ClInclude Include="send_msg.h" /> <ClInclude Include="send_msg.h" />
@ -262,6 +263,7 @@ C:\Tools\nanopb\protoc --nanopb_out=. wcf.proto
<ClCompile Include="load_calls.cpp" /> <ClCompile Include="load_calls.cpp" />
<ClCompile Include="log.cpp" /> <ClCompile Include="log.cpp" />
<ClCompile Include="receive_msg.cpp" /> <ClCompile Include="receive_msg.cpp" />
<ClCompile Include="receive_transfer.cpp" />
<ClCompile Include="rpc_server.cpp" /> <ClCompile Include="rpc_server.cpp" />
<ClCompile Include="send_msg.cpp" /> <ClCompile Include="send_msg.cpp" />
<ClCompile Include="spy.cpp" /> <ClCompile Include="spy.cpp" />

View File

@ -87,6 +87,9 @@
<ClInclude Include="decrypt_image.h"> <ClInclude Include="decrypt_image.h">
<Filter>头文件</Filter> <Filter>头文件</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="receive_transfer.h">
<Filter>头文件</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="dllmain.cpp"> <ClCompile Include="dllmain.cpp">
@ -146,6 +149,9 @@
<ClCompile Include="decrypt_image.cpp"> <ClCompile Include="decrypt_image.cpp">
<Filter>源文件</Filter> <Filter>源文件</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="receive_transfer.cpp">
<Filter>源文件</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="spy.def"> <None Include="spy.def">

View File

@ -22,7 +22,8 @@ WxCalls_t wxCalls = {
Exec, base, start, end, slot, name*/ Exec, base, start, end, slot, name*/
{ 0x141BDF0, 0x2366934, 0x1428, 0x142C, 0x3C, 0x50 }, { 0x141BDF0, 0x2366934, 0x1428, 0x142C, 0x3C, 0x50 },
{ 0x771980, 0x2AE8D0, 0x1EE40E0 }, // Accept New Friend application { 0x771980, 0x2AE8D0, 0x1EE40E0 }, // Accept New Friend application
{ 0xE29F0, 0x771980, 0x43D8D0 } // Add chatroom members { 0xE29F0, 0x771980, 0x43D8D0 }, // Add chatroom members
{ 0xCD2A90 } // Receive transfer
}; };
int LoadCalls(const wchar_t *version, WxCalls_t *calls) int LoadCalls(const wchar_t *version, WxCalls_t *calls)

34
spy/receive_transfer.cpp Normal file
View File

@ -0,0 +1,34 @@
#include "receive_transfer.h"
#include "load_calls.h"
#include "log.h"
#include "util.h"
using namespace std;
extern WxCalls_t g_WxCalls;
extern DWORD g_WeChatWinDllAddr;
int ReceiveTransfer(string wxid, string transferid)
{
int rv = 0;
DWORD addRoomMemberCall = g_WeChatWinDllAddr + g_WxCalls.tf;
WxString_t wxWxid = { 0 };
wstring wsWxid = String2Wstring(wxid);
wxWxid.text = (wchar_t *)wsWxid.c_str();
wxWxid.size = wsWxid.size();
wxWxid.capacity = wsWxid.capacity();
WxString_t wxTid = { 0 };
wstring wsTid = String2Wstring(wxid);
wxTid.text = (wchar_t *)wsTid.c_str();
wxTid.size = wsTid.size();
wxTid.capacity = wsTid.capacity();
LOG_DEBUG("Receiving transfer, from: {}, transferid{}", wxid, transferid);
__asm {
}
return rv;
}

5
spy/receive_transfer.h Normal file
View File

@ -0,0 +1,5 @@
#pragma once
#include <string>
int ReceiveTransfer(std::string wxid, std::string transferid);

View File

@ -31,6 +31,7 @@
#include "spy_types.h" #include "spy_types.h"
#include "user_info.h" #include "user_info.h"
#include "util.h" #include "util.h"
#include "receive_transfer.h"
#define URL_SIZE 20 #define URL_SIZE 20
#define BASE_URL "tcp://0.0.0.0" #define BASE_URL "tcp://0.0.0.0"
@ -486,6 +487,28 @@ bool func_add_room_members(char *roomid, char *wxids, uint8_t *out, size_t *len)
return true; return true;
} }
bool func_receive_transfer(char *wxid, char *transferid, uint8_t *out, size_t *len)
{
Response rsp = Response_init_default;
rsp.func = Functions_FUNC_RECV_TRANSFER;
rsp.which_msg = Response_status_tag;
rsp.msg.status = 0;
rsp.msg.status = ReceiveTransfer(wxid, transferid);
if (rsp.msg.status != 1) {
LOG_ERROR("AddChatroomMember failed: {}", rsp.msg.status);
}
pb_ostream_t stream = pb_ostream_from_buffer(out, *len);
if (!pb_encode(&stream, Response_fields, &rsp)) {
LOG_ERROR("Encoding failed: {}", PB_GET_ERROR(&stream));
return false;
}
*len = stream.bytes_written;
return true;
}
bool func_decrypt_image(char *src, char *dst, uint8_t *out, size_t *len) bool func_decrypt_image(char *src, char *dst, uint8_t *out, size_t *len)
{ {
Response rsp = Response_init_default; Response rsp = Response_init_default;
@ -606,6 +629,11 @@ static bool dispatcher(uint8_t *in, size_t in_len, uint8_t *out, size_t *out_len
ret = func_add_room_members(req.msg.m.roomid, req.msg.m.wxids, out, out_len); ret = func_add_room_members(req.msg.m.roomid, req.msg.m.wxids, out, out_len);
break; break;
} }
case Functions_FUNC_RECV_TRANSFER: {
LOG_DEBUG("[Functions_FUNC_RECV_TRANSFER]");
ret = func_receive_transfer(req.msg.tf.wxid, req.msg.tf.tid, out, out_len);
break;
}
case Functions_FUNC_DECRYPT_IMAGE: { case Functions_FUNC_DECRYPT_IMAGE: {
LOG_DEBUG("[FUNCTIONS_FUNC_DECRYPT_IMAGE]"); LOG_DEBUG("[FUNCTIONS_FUNC_DECRYPT_IMAGE]");
ret = func_decrypt_image(req.msg.dec.src, req.msg.dec.dst, out, out_len); ret = func_decrypt_image(req.msg.dec.src, req.msg.dec.dst, out, out_len);

View File

@ -84,6 +84,7 @@ typedef struct WxCalls {
Sql_t sql; // 执行 SQL Sql_t sql; // 执行 SQL
NewFriend_t anf; // 通过好友申请 NewFriend_t anf; // 通过好友申请
RoomMember_t arm; // 添加群成员 RoomMember_t arm; // 添加群成员
DWORD tf; // 接收转账
} WxCalls_t; } WxCalls_t;
typedef struct WxString { typedef struct WxString {