From 6e0492611e0786cd42a44097ccc6d9b09b9df596 Mon Sep 17 00:00:00 2001 From: ljc545w Date: Tue, 14 Jun 2022 14:51:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=AF=AD=E9=9F=B3=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E6=96=87=E4=BB=B6=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DWeChatRobot/HookVoiceMessage.cpp | 20 +++++++++++++++++--- Release/DWeChatRobot.dll | Bin 63488 -> 64512 bytes 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/DWeChatRobot/HookVoiceMessage.cpp b/DWeChatRobot/HookVoiceMessage.cpp index 54d665a..0f78a95 100644 --- a/DWeChatRobot/HookVoiceMessage.cpp +++ b/DWeChatRobot/HookVoiceMessage.cpp @@ -12,10 +12,24 @@ static char VoiceMsgOldAsm[5] = { 0 }; static wstring savepath = L""; void SaveVoiceMsg(unsigned char* buffer, int length, DWORD msgHandle) { - time_t curtime = time(0); + /*time_t curtime = time(0); wchar_t timestamp[32] = { 0 }; - _itow_s((int)curtime, timestamp, 10); - wstring filename = savepath + timestamp + L".amr"; + _itow_s((int)curtime, timestamp, 10);*/ + wchar_t* temp; + int wxid_length = *(DWORD*)(msgHandle + 0x174); + temp = new wchar_t[wxid_length + 1]; + memcpy(temp, (void*)(*(DWORD*)(msgHandle + 0x170)), (wxid_length + 1) * 2); + wstring sender(temp); + delete[] temp; + temp = NULL; + + int clientmsg_length = *(DWORD*)(msgHandle + 0x188); + temp = new wchar_t[clientmsg_length + 1]; + memcpy(temp, (void*)(*(DWORD*)(msgHandle + 0x184)), (clientmsg_length + 1) * 2); + wstring clientmsgid(temp); + delete[] temp; + temp = NULL; + wstring filename = savepath + sender + L"-" + clientmsgid + L".amr"; HANDLE hFile = CreateFile(filename.c_str(), GENERIC_ALL, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { diff --git a/Release/DWeChatRobot.dll b/Release/DWeChatRobot.dll index 24b8274b802d27bb35a993ad9867d433cb11dff3..ff6877786c5e46b27c93359730006cd255bf7810 100644 GIT binary patch delta 14461 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 KQMTf#nf-sbO2h*I -- GitLab