From a0f83b5a9981ca1b37ae1e0187109d041ddb3d3b Mon Sep 17 00:00:00 2001 From: hugy <504650082@qq.com> Date: Tue, 7 Feb 2023 08:36:13 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BD=AC=E8=B4=A6=E6=94=B6=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/confirm_receipt.cc | 49 ++++++++++++++++++++++++++++++++++++++++++ src/confirm_receipt.h | 6 ++++++ 2 files changed, 55 insertions(+) create mode 100644 src/confirm_receipt.cc create mode 100644 src/confirm_receipt.h diff --git a/src/confirm_receipt.cc b/src/confirm_receipt.cc new file mode 100644 index 0000000..16cfa13 --- /dev/null +++ b/src/confirm_receipt.cc @@ -0,0 +1,49 @@ +#include "pch.h" +#include "confirm_receipt.h" + +#include "common.h" +#include "wechat_data.h" + +#define WX_NEW_WCPAYINFO_OFFSET 0x69d2b0 +#define WX_FREE_WCPAYINFO_OFFSET 0x68d610 +#define WX_CONFIRM_RECEIPT_OFFSET 0x13d5e00 + +int DoConfirmReceipt(wchar_t *wxid, wchar_t *transcationid, + wchar_t *transferid) { + int success = -1; + WeChatString recv_id(wxid); + WeChatString transcation_id(transcationid); + WeChatString transfer_id(transferid); + char pay_info[0x134] = {0}; + DWORD base = GetWeChatWinBase(); + DWORD new_pay_info_addr = base + WX_NEW_WCPAYINFO_OFFSET; + DWORD free_pay_info_addr = base + WX_FREE_WCPAYINFO_OFFSET; + DWORD do_confirm_addr = base + WX_CONFIRM_RECEIPT_OFFSET; + __asm { + PUSHAD + LEA ECX,pay_info + CALL new_pay_info_addr + MOV dword ptr [pay_info + 0x4], 0x1 + MOV dword ptr [pay_info + 0x4C], 0x1 + POPAD + } + memcpy(&pay_info[0x1c], &transcation_id, sizeof(transcation_id)); + memcpy(&pay_info[0x38], &transfer_id, sizeof(transfer_id)); + + __asm { + PUSHAD + PUSH 0x1 + SUB ESP,0x8 + LEA EDX,recv_id + LEA ECX,pay_info + CALL do_confirm_addr + MOV success,EAX + ADD ESP,0xC + PUSH 0x0 + LEA ECX,pay_info + CALL free_pay_info_addr + POPAD + } + + return success; +} \ No newline at end of file diff --git a/src/confirm_receipt.h b/src/confirm_receipt.h new file mode 100644 index 0000000..0fdee8f --- /dev/null +++ b/src/confirm_receipt.h @@ -0,0 +1,6 @@ +#ifndef CONFIRM_RECEIPT_H +#define CONFIRM_RECEIPT_H + +int DoConfirmReceipt(wchar_t* wxid,wchar_t *transcationid, wchar_t *transferid); + +#endif \ No newline at end of file