From 46789198b29d00808e91da54a5ff5a5968847a4d Mon Sep 17 00:00:00 2001 From: ljc545w Date: Sun, 20 Mar 2022 17:10:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A03.6.0.18=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ComWeChatRobot.sln | 36 +++- .../DWeChatRobot_3.5.0.46.vcxproj | 4 +- .../DWeChatRobot_3.5.0.46.vcxproj.filters | 0 .../DWeChatRobot_3.5.0.46.vcxproj.user | 0 .../FriendList.cpp | 0 .../FriendList.h | 0 .../SaveGif.cpp | 0 .../SaveGif.h | 0 .../SelfInfo.cpp | 2 +- .../SelfInfo.h | 0 .../SendArticle.cpp | 0 .../SendArticle.h | 0 .../SendCard.cpp | 0 .../SendCard.h | 0 .../SendFile.cpp | 0 .../SendFile.h | 0 .../SendImage.cpp | 0 .../SendImage.h | 0 .../SendText.cpp | 0 .../SendText.h | 0 .../UserInfo.cpp | 0 .../UserInfo.h | 0 .../dllmain.cpp | 0 .../framework.h | 0 .../pch.cpp | 0 {DWeChatRobot => DWeChatRobot_3.5.0.46}/pch.h | 0 .../DWeChatRobot_3.6.0.18.vcxproj | 188 ++++++++++++++++++ .../DWeChatRobot_3.6.0.18.vcxproj.filters | 114 +++++++++++ .../DWeChatRobot_3.6.0.18.vcxproj.user | 4 + DWeChatRobot_3.6.0.18/FriendList.cpp | 97 +++++++++ DWeChatRobot_3.6.0.18/FriendList.h | 6 + DWeChatRobot_3.6.0.18/SelfInfo.cpp | 85 ++++++++ DWeChatRobot_3.6.0.18/SelfInfo.h | 6 + DWeChatRobot_3.6.0.18/SendArticle.cpp | 100 ++++++++++ DWeChatRobot_3.6.0.18/SendArticle.h | 4 + DWeChatRobot_3.6.0.18/SendCard.cpp | 51 +++++ DWeChatRobot_3.6.0.18/SendCard.h | 4 + DWeChatRobot_3.6.0.18/SendFile.cpp | 126 ++++++++++++ DWeChatRobot_3.6.0.18/SendFile.h | 5 + DWeChatRobot_3.6.0.18/SendImage.cpp | 51 +++++ DWeChatRobot_3.6.0.18/SendImage.h | 5 + DWeChatRobot_3.6.0.18/SendText.cpp | 45 +++++ DWeChatRobot_3.6.0.18/SendText.h | 5 + DWeChatRobot_3.6.0.18/UserInfo.cpp | 129 ++++++++++++ DWeChatRobot_3.6.0.18/UserInfo.h | 5 + DWeChatRobot_3.6.0.18/dllmain.cpp | 46 +++++ DWeChatRobot_3.6.0.18/framework.h | 5 + DWeChatRobot_3.6.0.18/pch.cpp | 67 +++++++ DWeChatRobot_3.6.0.18/pch.h | 59 ++++++ Release/DWeChatRobot.dll | Bin 31744 -> 27136 bytes wxRobot.py | 2 +- 51 files changed, 1238 insertions(+), 13 deletions(-) rename DWeChatRobot/DWeChatRobot.vcxproj => DWeChatRobot_3.5.0.46/DWeChatRobot_3.5.0.46.vcxproj (96%) rename DWeChatRobot/DWeChatRobot.vcxproj.filters => DWeChatRobot_3.5.0.46/DWeChatRobot_3.5.0.46.vcxproj.filters (100%) rename DWeChatRobot/DWeChatRobot.vcxproj.user => DWeChatRobot_3.5.0.46/DWeChatRobot_3.5.0.46.vcxproj.user (100%) rename {DWeChatRobot => DWeChatRobot_3.5.0.46}/FriendList.cpp (100%) rename {DWeChatRobot => DWeChatRobot_3.5.0.46}/FriendList.h (100%) rename {DWeChatRobot => DWeChatRobot_3.5.0.46}/SaveGif.cpp (100%) rename {DWeChatRobot => DWeChatRobot_3.5.0.46}/SaveGif.h (100%) rename {DWeChatRobot => DWeChatRobot_3.5.0.46}/SelfInfo.cpp (96%) rename {DWeChatRobot => DWeChatRobot_3.5.0.46}/SelfInfo.h (100%) rename {DWeChatRobot => DWeChatRobot_3.5.0.46}/SendArticle.cpp (100%) rename {DWeChatRobot => DWeChatRobot_3.5.0.46}/SendArticle.h (100%) rename {DWeChatRobot => DWeChatRobot_3.5.0.46}/SendCard.cpp (100%) rename {DWeChatRobot => DWeChatRobot_3.5.0.46}/SendCard.h (100%) rename {DWeChatRobot => DWeChatRobot_3.5.0.46}/SendFile.cpp (100%) rename {DWeChatRobot => DWeChatRobot_3.5.0.46}/SendFile.h (100%) rename {DWeChatRobot => DWeChatRobot_3.5.0.46}/SendImage.cpp (100%) rename {DWeChatRobot => DWeChatRobot_3.5.0.46}/SendImage.h (100%) rename {DWeChatRobot => DWeChatRobot_3.5.0.46}/SendText.cpp (100%) rename {DWeChatRobot => DWeChatRobot_3.5.0.46}/SendText.h (100%) rename {DWeChatRobot => DWeChatRobot_3.5.0.46}/UserInfo.cpp (100%) rename {DWeChatRobot => DWeChatRobot_3.5.0.46}/UserInfo.h (100%) rename {DWeChatRobot => DWeChatRobot_3.5.0.46}/dllmain.cpp (100%) rename {DWeChatRobot => DWeChatRobot_3.5.0.46}/framework.h (100%) rename {DWeChatRobot => DWeChatRobot_3.5.0.46}/pch.cpp (100%) rename {DWeChatRobot => DWeChatRobot_3.5.0.46}/pch.h (100%) create mode 100644 DWeChatRobot_3.6.0.18/DWeChatRobot_3.6.0.18.vcxproj create mode 100644 DWeChatRobot_3.6.0.18/DWeChatRobot_3.6.0.18.vcxproj.filters create mode 100644 DWeChatRobot_3.6.0.18/DWeChatRobot_3.6.0.18.vcxproj.user create mode 100644 DWeChatRobot_3.6.0.18/FriendList.cpp create mode 100644 DWeChatRobot_3.6.0.18/FriendList.h create mode 100644 DWeChatRobot_3.6.0.18/SelfInfo.cpp create mode 100644 DWeChatRobot_3.6.0.18/SelfInfo.h create mode 100644 DWeChatRobot_3.6.0.18/SendArticle.cpp create mode 100644 DWeChatRobot_3.6.0.18/SendArticle.h create mode 100644 DWeChatRobot_3.6.0.18/SendCard.cpp create mode 100644 DWeChatRobot_3.6.0.18/SendCard.h create mode 100644 DWeChatRobot_3.6.0.18/SendFile.cpp create mode 100644 DWeChatRobot_3.6.0.18/SendFile.h create mode 100644 DWeChatRobot_3.6.0.18/SendImage.cpp create mode 100644 DWeChatRobot_3.6.0.18/SendImage.h create mode 100644 DWeChatRobot_3.6.0.18/SendText.cpp create mode 100644 DWeChatRobot_3.6.0.18/SendText.h create mode 100644 DWeChatRobot_3.6.0.18/UserInfo.cpp create mode 100644 DWeChatRobot_3.6.0.18/UserInfo.h create mode 100644 DWeChatRobot_3.6.0.18/dllmain.cpp create mode 100644 DWeChatRobot_3.6.0.18/framework.h create mode 100644 DWeChatRobot_3.6.0.18/pch.cpp create mode 100644 DWeChatRobot_3.6.0.18/pch.h diff --git a/ComWeChatRobot.sln b/ComWeChatRobot.sln index 102dc6f..5a74978 100644 --- a/ComWeChatRobot.sln +++ b/ComWeChatRobot.sln @@ -5,10 +5,14 @@ VisualStudioVersion = 16.0.31605.320 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CWeChatRobot", "CWeChatRobot\WeChatRobotCOM.vcxproj", "{F54A8A7E-C2C0-4FD8-B625-59C77FF613BA}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DWeChatRobot", "DWeChatRobot\DWeChatRobot.vcxproj", "{7EDE81C4-63BC-4C4F-8424-210D91034FDE}" -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WeChatTools", "WeChatTools\WeChatTools.vcxproj", "{3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DWeChatRobot", "DWeChatRobot", "{9C5F2C6B-73CE-49FC-B19C-478C50550FE4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DWeChatRobot_3.5.0.46", "DWeChatRobot_3.5.0.46\DWeChatRobot_3.5.0.46.vcxproj", "{7EDE81C4-63BC-4C4F-8424-210D91034FDE}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DWeChatRobot_3.6.0.18", "DWeChatRobot_3.6.0.18\DWeChatRobot_3.6.0.18.vcxproj", "{C0FC8DAB-0590-46AC-9270-6FEA45D52390}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 @@ -25,14 +29,6 @@ Global {F54A8A7E-C2C0-4FD8-B625-59C77FF613BA}.Release|x64.Build.0 = Release|x64 {F54A8A7E-C2C0-4FD8-B625-59C77FF613BA}.Release|x86.ActiveCfg = Release|Win32 {F54A8A7E-C2C0-4FD8-B625-59C77FF613BA}.Release|x86.Build.0 = Release|Win32 - {7EDE81C4-63BC-4C4F-8424-210D91034FDE}.Debug|x64.ActiveCfg = Debug|x64 - {7EDE81C4-63BC-4C4F-8424-210D91034FDE}.Debug|x64.Build.0 = Debug|x64 - {7EDE81C4-63BC-4C4F-8424-210D91034FDE}.Debug|x86.ActiveCfg = Debug|Win32 - {7EDE81C4-63BC-4C4F-8424-210D91034FDE}.Debug|x86.Build.0 = Debug|Win32 - {7EDE81C4-63BC-4C4F-8424-210D91034FDE}.Release|x64.ActiveCfg = Release|x64 - {7EDE81C4-63BC-4C4F-8424-210D91034FDE}.Release|x64.Build.0 = Release|x64 - {7EDE81C4-63BC-4C4F-8424-210D91034FDE}.Release|x86.ActiveCfg = Release|Win32 - {7EDE81C4-63BC-4C4F-8424-210D91034FDE}.Release|x86.Build.0 = Release|Win32 {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.Debug|x64.ActiveCfg = Debug|x64 {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.Debug|x64.Build.0 = Debug|x64 {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.Debug|x86.ActiveCfg = Debug|Win32 @@ -41,10 +37,30 @@ Global {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.Release|x64.Build.0 = Release|x64 {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.Release|x86.ActiveCfg = Release|Win32 {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.Release|x86.Build.0 = Release|Win32 + {7EDE81C4-63BC-4C4F-8424-210D91034FDE}.Debug|x64.ActiveCfg = Debug|x64 + {7EDE81C4-63BC-4C4F-8424-210D91034FDE}.Debug|x64.Build.0 = Debug|x64 + {7EDE81C4-63BC-4C4F-8424-210D91034FDE}.Debug|x86.ActiveCfg = Debug|Win32 + {7EDE81C4-63BC-4C4F-8424-210D91034FDE}.Debug|x86.Build.0 = Debug|Win32 + {7EDE81C4-63BC-4C4F-8424-210D91034FDE}.Release|x64.ActiveCfg = Release|x64 + {7EDE81C4-63BC-4C4F-8424-210D91034FDE}.Release|x64.Build.0 = Release|x64 + {7EDE81C4-63BC-4C4F-8424-210D91034FDE}.Release|x86.ActiveCfg = Release|Win32 + {7EDE81C4-63BC-4C4F-8424-210D91034FDE}.Release|x86.Build.0 = Release|Win32 + {C0FC8DAB-0590-46AC-9270-6FEA45D52390}.Debug|x64.ActiveCfg = Debug|x64 + {C0FC8DAB-0590-46AC-9270-6FEA45D52390}.Debug|x64.Build.0 = Debug|x64 + {C0FC8DAB-0590-46AC-9270-6FEA45D52390}.Debug|x86.ActiveCfg = Debug|Win32 + {C0FC8DAB-0590-46AC-9270-6FEA45D52390}.Debug|x86.Build.0 = Debug|Win32 + {C0FC8DAB-0590-46AC-9270-6FEA45D52390}.Release|x64.ActiveCfg = Release|x64 + {C0FC8DAB-0590-46AC-9270-6FEA45D52390}.Release|x64.Build.0 = Release|x64 + {C0FC8DAB-0590-46AC-9270-6FEA45D52390}.Release|x86.ActiveCfg = Release|Win32 + {C0FC8DAB-0590-46AC-9270-6FEA45D52390}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {7EDE81C4-63BC-4C4F-8424-210D91034FDE} = {9C5F2C6B-73CE-49FC-B19C-478C50550FE4} + {C0FC8DAB-0590-46AC-9270-6FEA45D52390} = {9C5F2C6B-73CE-49FC-B19C-478C50550FE4} + EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {20BD2B3B-13AA-4C38-8216-127895041F93} EndGlobalSection diff --git a/DWeChatRobot/DWeChatRobot.vcxproj b/DWeChatRobot_3.5.0.46/DWeChatRobot_3.5.0.46.vcxproj similarity index 96% rename from DWeChatRobot/DWeChatRobot.vcxproj rename to DWeChatRobot_3.5.0.46/DWeChatRobot_3.5.0.46.vcxproj index 2281cb2..a453914 100644 --- a/DWeChatRobot/DWeChatRobot.vcxproj +++ b/DWeChatRobot_3.5.0.46/DWeChatRobot_3.5.0.46.vcxproj @@ -24,7 +24,7 @@ {7ede81c4-63bc-4c4f-8424-210d91034fde} MyWeChatRobot 10.0 - DWeChatRobot + DWeChatRobot_3.5.0.46 @@ -73,9 +73,11 @@ true + DWeChatRobot false + DWeChatRobot true diff --git a/DWeChatRobot/DWeChatRobot.vcxproj.filters b/DWeChatRobot_3.5.0.46/DWeChatRobot_3.5.0.46.vcxproj.filters similarity index 100% rename from DWeChatRobot/DWeChatRobot.vcxproj.filters rename to DWeChatRobot_3.5.0.46/DWeChatRobot_3.5.0.46.vcxproj.filters diff --git a/DWeChatRobot/DWeChatRobot.vcxproj.user b/DWeChatRobot_3.5.0.46/DWeChatRobot_3.5.0.46.vcxproj.user similarity index 100% rename from DWeChatRobot/DWeChatRobot.vcxproj.user rename to DWeChatRobot_3.5.0.46/DWeChatRobot_3.5.0.46.vcxproj.user diff --git a/DWeChatRobot/FriendList.cpp b/DWeChatRobot_3.5.0.46/FriendList.cpp similarity index 100% rename from DWeChatRobot/FriendList.cpp rename to DWeChatRobot_3.5.0.46/FriendList.cpp diff --git a/DWeChatRobot/FriendList.h b/DWeChatRobot_3.5.0.46/FriendList.h similarity index 100% rename from DWeChatRobot/FriendList.h rename to DWeChatRobot_3.5.0.46/FriendList.h diff --git a/DWeChatRobot/SaveGif.cpp b/DWeChatRobot_3.5.0.46/SaveGif.cpp similarity index 100% rename from DWeChatRobot/SaveGif.cpp rename to DWeChatRobot_3.5.0.46/SaveGif.cpp diff --git a/DWeChatRobot/SaveGif.h b/DWeChatRobot_3.5.0.46/SaveGif.h similarity index 100% rename from DWeChatRobot/SaveGif.h rename to DWeChatRobot_3.5.0.46/SaveGif.h diff --git a/DWeChatRobot/SelfInfo.cpp b/DWeChatRobot_3.5.0.46/SelfInfo.cpp similarity index 96% rename from DWeChatRobot/SelfInfo.cpp rename to DWeChatRobot_3.5.0.46/SelfInfo.cpp index 393cc93..1b9fe22 100644 --- a/DWeChatRobot/SelfInfo.cpp +++ b/DWeChatRobot_3.5.0.46/SelfInfo.cpp @@ -71,7 +71,7 @@ DWORD GetSelfInfoRemote() { } wchar_t* wtemp = new wchar_t[strlen(temp) + 1]; ZeroMemory(wtemp, (strlen(temp) + 1) * 2); - MultiByteToWideChar(CP_UTF8, MB_COMPOSITE, temp, -1, wtemp, strlen(temp) + 1); + MultiByteToWideChar(CP_UTF8, 0, temp, -1, wtemp, strlen(temp) + 1); selfinfo = selfinfo + wtemp; selfinfo = selfinfo + L"\""; if(i!= SelfInfoAddr.size() - 1) diff --git a/DWeChatRobot/SelfInfo.h b/DWeChatRobot_3.5.0.46/SelfInfo.h similarity index 100% rename from DWeChatRobot/SelfInfo.h rename to DWeChatRobot_3.5.0.46/SelfInfo.h diff --git a/DWeChatRobot/SendArticle.cpp b/DWeChatRobot_3.5.0.46/SendArticle.cpp similarity index 100% rename from DWeChatRobot/SendArticle.cpp rename to DWeChatRobot_3.5.0.46/SendArticle.cpp diff --git a/DWeChatRobot/SendArticle.h b/DWeChatRobot_3.5.0.46/SendArticle.h similarity index 100% rename from DWeChatRobot/SendArticle.h rename to DWeChatRobot_3.5.0.46/SendArticle.h diff --git a/DWeChatRobot/SendCard.cpp b/DWeChatRobot_3.5.0.46/SendCard.cpp similarity index 100% rename from DWeChatRobot/SendCard.cpp rename to DWeChatRobot_3.5.0.46/SendCard.cpp diff --git a/DWeChatRobot/SendCard.h b/DWeChatRobot_3.5.0.46/SendCard.h similarity index 100% rename from DWeChatRobot/SendCard.h rename to DWeChatRobot_3.5.0.46/SendCard.h diff --git a/DWeChatRobot/SendFile.cpp b/DWeChatRobot_3.5.0.46/SendFile.cpp similarity index 100% rename from DWeChatRobot/SendFile.cpp rename to DWeChatRobot_3.5.0.46/SendFile.cpp diff --git a/DWeChatRobot/SendFile.h b/DWeChatRobot_3.5.0.46/SendFile.h similarity index 100% rename from DWeChatRobot/SendFile.h rename to DWeChatRobot_3.5.0.46/SendFile.h diff --git a/DWeChatRobot/SendImage.cpp b/DWeChatRobot_3.5.0.46/SendImage.cpp similarity index 100% rename from DWeChatRobot/SendImage.cpp rename to DWeChatRobot_3.5.0.46/SendImage.cpp diff --git a/DWeChatRobot/SendImage.h b/DWeChatRobot_3.5.0.46/SendImage.h similarity index 100% rename from DWeChatRobot/SendImage.h rename to DWeChatRobot_3.5.0.46/SendImage.h diff --git a/DWeChatRobot/SendText.cpp b/DWeChatRobot_3.5.0.46/SendText.cpp similarity index 100% rename from DWeChatRobot/SendText.cpp rename to DWeChatRobot_3.5.0.46/SendText.cpp diff --git a/DWeChatRobot/SendText.h b/DWeChatRobot_3.5.0.46/SendText.h similarity index 100% rename from DWeChatRobot/SendText.h rename to DWeChatRobot_3.5.0.46/SendText.h diff --git a/DWeChatRobot/UserInfo.cpp b/DWeChatRobot_3.5.0.46/UserInfo.cpp similarity index 100% rename from DWeChatRobot/UserInfo.cpp rename to DWeChatRobot_3.5.0.46/UserInfo.cpp diff --git a/DWeChatRobot/UserInfo.h b/DWeChatRobot_3.5.0.46/UserInfo.h similarity index 100% rename from DWeChatRobot/UserInfo.h rename to DWeChatRobot_3.5.0.46/UserInfo.h diff --git a/DWeChatRobot/dllmain.cpp b/DWeChatRobot_3.5.0.46/dllmain.cpp similarity index 100% rename from DWeChatRobot/dllmain.cpp rename to DWeChatRobot_3.5.0.46/dllmain.cpp diff --git a/DWeChatRobot/framework.h b/DWeChatRobot_3.5.0.46/framework.h similarity index 100% rename from DWeChatRobot/framework.h rename to DWeChatRobot_3.5.0.46/framework.h diff --git a/DWeChatRobot/pch.cpp b/DWeChatRobot_3.5.0.46/pch.cpp similarity index 100% rename from DWeChatRobot/pch.cpp rename to DWeChatRobot_3.5.0.46/pch.cpp diff --git a/DWeChatRobot/pch.h b/DWeChatRobot_3.5.0.46/pch.h similarity index 100% rename from DWeChatRobot/pch.h rename to DWeChatRobot_3.5.0.46/pch.h diff --git a/DWeChatRobot_3.6.0.18/DWeChatRobot_3.6.0.18.vcxproj b/DWeChatRobot_3.6.0.18/DWeChatRobot_3.6.0.18.vcxproj new file mode 100644 index 0000000..82fc3b9 --- /dev/null +++ b/DWeChatRobot_3.6.0.18/DWeChatRobot_3.6.0.18.vcxproj @@ -0,0 +1,188 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {C0FC8DAB-0590-46AC-9270-6FEA45D52390} + MyWeChatRobot + 10.0 + DWeChatRobot_3.6.0.18 + + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + DWeChatRobot + + + false + DWeChatRobot + + + true + + + false + + + + Level3 + true + WIN32;_DEBUG;MYWECHATROBOT_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + false + + + + + Level3 + true + true + true + WIN32;NDEBUG;MYWECHATROBOT_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + true + true + false + + + + + Level3 + true + _DEBUG;MYWECHATROBOT_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + false + + + + + Level3 + true + true + true + NDEBUG;MYWECHATROBOT_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + true + true + false + + + + + + + + + + + + + + + + + + + Create + Create + Create + Create + + + + + + + + + + + + + \ No newline at end of file diff --git a/DWeChatRobot_3.6.0.18/DWeChatRobot_3.6.0.18.vcxproj.filters b/DWeChatRobot_3.6.0.18/DWeChatRobot_3.6.0.18.vcxproj.filters new file mode 100644 index 0000000..19aec15 --- /dev/null +++ b/DWeChatRobot_3.6.0.18/DWeChatRobot_3.6.0.18.vcxproj.filters @@ -0,0 +1,114 @@ + + + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {b1463ca2-6055-4c67-8c42-6319a6171dd2} + + + {b22823ee-f629-4e0a-8358-da017f0e5c3a} + + + {912e6334-b078-4ba6-813c-66d0de3ee123} + + + {069b8c09-e473-4bba-a49e-571f35f2efef} + + + {25f77de8-b12c-4f2b-a3ac-0260b6a16897} + + + {8ad1ff87-550b-4942-8ebd-afbe1cfaddc9} + + + {24dc11dd-cb6a-4c63-bf21-35823cd389ab} + + + {564cc9ef-a939-4bfd-a420-a08b3072d198} + + + {722c02ee-dda5-4a6a-9443-f1ed3c112709} + + + {edd6e39f-235b-4db5-aea1-ec2c8d0072c5} + + + {fc747a68-6314-4f23-92de-a1e55275a01e} + + + + + 通用标头 + + + 通用标头 + + + 发送消息\发送图片 + + + 发送消息\发送文本 + + + 发送消息\发送文件 + + + 好友相关\好友列表 + + + 好友相关\好友信息 + + + 个人信息 + + + 发送消息\发送文章 + + + 发送消息\发送名片 + + + + + 通用函数 + + + 通用函数 + + + 发送消息\发送图片 + + + 发送消息\发送文本 + + + 发送消息\发送文件 + + + 好友相关\好友列表 + + + 好友相关\好友信息 + + + 个人信息 + + + 发送消息\发送文章 + + + 发送消息\发送名片 + + + \ No newline at end of file diff --git a/DWeChatRobot_3.6.0.18/DWeChatRobot_3.6.0.18.vcxproj.user b/DWeChatRobot_3.6.0.18/DWeChatRobot_3.6.0.18.vcxproj.user new file mode 100644 index 0000000..0f14913 --- /dev/null +++ b/DWeChatRobot_3.6.0.18/DWeChatRobot_3.6.0.18.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/DWeChatRobot_3.6.0.18/FriendList.cpp b/DWeChatRobot_3.6.0.18/FriendList.cpp new file mode 100644 index 0000000..e365b42 --- /dev/null +++ b/DWeChatRobot_3.6.0.18/FriendList.cpp @@ -0,0 +1,97 @@ +#include "pch.h" +#include +using namespace std; +#define LeftTreeOffset 0x222F3BC + + +struct WxFriendStructW { + DWORD wxIdAddr; + DWORD wxNumberAddr; + DWORD wxNickNameAddr; + DWORD wxRemarkAddr; + WxFriendStructW(DWORD wxIdAddr, DWORD wxNumberAddr, DWORD wxNickNameAddr, DWORD wxRemarkAddr) { + this->wxIdAddr = wxIdAddr; + this->wxNumberAddr = wxNumberAddr; + this->wxNickNameAddr = wxNickNameAddr; + this->wxRemarkAddr = wxRemarkAddr; + } +}; + +vector WxFriendList; + +int GetFriendListInit() { + GetFriendList(); +#ifdef _DEBUG + cout << WxFriendList.size() << endl; +#endif + return WxFriendList.size(); +} + +DWORD GetFriendListRemote() { + if (WxFriendList.size() == 0) + return 0; +#ifdef _DEBUG + printf("0x%08X\n", (DWORD)&WxFriendList[0]); + printf("0x%08X\n", (DWORD)&(WxFriendList[0].wxIdAddr)); +#endif + return (DWORD)&WxFriendList[0].wxIdAddr; +} + +void GetFriendListFinish() { + WxFriendList.clear(); + cout << WxFriendList.size() << endl; +} + +void __stdcall GetFriendList() { + + DWORD WeChatWinBase = GetWeChatWinBase(); + DWORD LeftTreeAddr = 0; + DWORD RightTreeAddr = 0; + DWORD LeftTreeHead = 0; + DWORD baseAddr = WeChatWinBase + LeftTreeOffset; + printf("0x%08X\n", baseAddr); + __asm { + pushad; + mov eax, dword ptr[baseAddr]; + mov eax, dword ptr[eax]; + mov eax, dword ptr[eax + 0x4C]; + mov ecx, dword ptr[eax]; + mov LeftTreeAddr, ecx; + mov LeftTreeHead, eax; + mov ecx, dword ptr[eax + 0x4]; + mov RightTreeAddr, ecx; + popad; + } + + while (1) { + DWORD wxIdAddr = 0; + DWORD wxNumberAddr = 0; + DWORD wxNickNameAddr = 0; + DWORD wxRemarkAddr = 0; + + __asm { + pushad; + mov eax, dword ptr [LeftTreeAddr]; + mov ecx, eax; + add ecx, 0x30; + mov wxIdAddr, ecx; + mov ecx, eax; + add ecx, 0x44; + mov wxNumberAddr, ecx; + mov ecx, eax; + add ecx, 0x8C; + mov wxNickNameAddr, ecx; + mov ecx, eax; + add ecx, 0x78; + mov wxRemarkAddr, ecx; + mov ecx, dword ptr [eax]; + mov LeftTreeAddr, ecx; + popad; + } + WxFriendStructW p(wxIdAddr, wxNumberAddr, wxNickNameAddr, wxRemarkAddr); + WxFriendList.push_back(p); + if (LeftTreeAddr == LeftTreeHead) { + break; + } + } +} \ No newline at end of file diff --git a/DWeChatRobot_3.6.0.18/FriendList.h b/DWeChatRobot_3.6.0.18/FriendList.h new file mode 100644 index 0000000..5ab556d --- /dev/null +++ b/DWeChatRobot_3.6.0.18/FriendList.h @@ -0,0 +1,6 @@ +#pragma once +void __stdcall GetFriendList(); + +extern "C" __declspec(dllexport) DWORD GetFriendListRemote(); +extern "C" __declspec(dllexport) int GetFriendListInit(); +extern "C" __declspec(dllexport) void GetFriendListFinish(); \ No newline at end of file diff --git a/DWeChatRobot_3.6.0.18/SelfInfo.cpp b/DWeChatRobot_3.6.0.18/SelfInfo.cpp new file mode 100644 index 0000000..6613810 --- /dev/null +++ b/DWeChatRobot_3.6.0.18/SelfInfo.cpp @@ -0,0 +1,85 @@ +#include "pch.h" +#include + +wstring selfinfo = L""; + +struct SelfInfoStruct { + DWORD message; + DWORD length; +} ret; + +DWORD GetSelfInfoRemote() { + DWORD WeChatWinBase = GetWeChatWinBase(); + vector SelfInfoAddr = { + *(DWORD*)(WeChatWinBase + 0x222EB3C), + WeChatWinBase + 0x222ED30, + WeChatWinBase + 0x222EBB4, + *(DWORD*)(WeChatWinBase + 0x222ECEC), + *(DWORD*)(WeChatWinBase + 0x222EE94), + *(DWORD*)(WeChatWinBase + 0x222EEAC), + WeChatWinBase + 0x222EF30, + WeChatWinBase + 0x222ECBC, + WeChatWinBase + 0x222ECD4, + WeChatWinBase + 0x222EBE8 + }; + + vector SelfInfoKey = { + L"\"wxId\"", + L"\"wxNumber\"", + L"\"wxNickName\"", + L"\"wxSignature\"", + L"\"wxBigAvatar\"", + L"\"wxSmallAvatar\"", + L"\"wxNation\"", + L"\"wxProvince\"", + L"\"wxCity\"", + L"\"PhoneNumber\"" + }; +#ifdef _DEBUG + wcout.imbue(locale("chs")); +#endif + selfinfo = selfinfo + L"{"; + for (unsigned int i = 0; i < SelfInfoAddr.size(); i++) { + selfinfo = selfinfo + SelfInfoKey[i] + L":"; + selfinfo = selfinfo + L"\""; + char* temp = NULL; + if (!SelfInfoKey[i].compare(L"\"wxNickName\"")) { + if (*(DWORD*)(SelfInfoAddr[i] + 0x14) == 0xF) { + temp = (*((DWORD*)SelfInfoAddr[i]) != 0) ? (char*)SelfInfoAddr[i] : (char*)"null"; + } + else { + temp = (*((DWORD*)SelfInfoAddr[i]) != 0) ? (char*)(*(DWORD*)SelfInfoAddr[i]) : (char*)"null"; + } + } + else { + temp = (char*)SelfInfoAddr[i]; + if (strlen(temp) == 0) + temp = (char*)"null"; + } + wchar_t* wtemp = new wchar_t[strlen(temp) + 1]; + ZeroMemory(wtemp, (strlen(temp) + 1) * 2); + MultiByteToWideChar(CP_UTF8, 0, temp, -1, wtemp, strlen(temp) + 1); + selfinfo = selfinfo + wtemp; + selfinfo = selfinfo + L"\""; + if(i!= SelfInfoAddr.size() - 1) + selfinfo = selfinfo + L","; + delete[] wtemp; + wtemp = NULL; + } + selfinfo = selfinfo + L"}"; + ret.message = (DWORD)selfinfo.c_str(); + ret.length = selfinfo.length(); +#ifdef _DEBUG + wcout << selfinfo << endl; + DeleteSelfInfoCacheRemote(); +#endif + return (DWORD)&ret; +} + +VOID DeleteSelfInfoCacheRemote() { + if (ret.length) { + ZeroMemory((wchar_t*)ret.message, ret.length*2 + 2); + ret.length = 0; + selfinfo = L""; + } +} \ No newline at end of file diff --git a/DWeChatRobot_3.6.0.18/SelfInfo.h b/DWeChatRobot_3.6.0.18/SelfInfo.h new file mode 100644 index 0000000..910ba8e --- /dev/null +++ b/DWeChatRobot_3.6.0.18/SelfInfo.h @@ -0,0 +1,6 @@ +#pragma once +#include +#include +using namespace std; +extern "C" __declspec(dllexport) DWORD GetSelfInfoRemote(); +extern "C" __declspec(dllexport) VOID DeleteSelfInfoCacheRemote(); \ No newline at end of file diff --git a/DWeChatRobot_3.6.0.18/SendArticle.cpp b/DWeChatRobot_3.6.0.18/SendArticle.cpp new file mode 100644 index 0000000..b1507b8 --- /dev/null +++ b/DWeChatRobot_3.6.0.18/SendArticle.cpp @@ -0,0 +1,100 @@ +#include "pch.h" + +#define SendArticleCall1Offset 0x0F7454F0 - 0x0F6B0000 +#define SendArticleCall2Offset 0x0FA41F80 - 0x0F6B0000 +#define SendArticleCall3Offset 0x0F7794A0 - 0x0F6B0000 +#define SendArticleCall4Offset 0x0FA42150 - 0x0F6B0000 +#define SendArticleParamOffset 0x118EEC34 - 0x0F6B0000 + +#define SendArticleClearCacheCall1Offset 0x0FCEB4F0 - 0x0F6B0000 +#define SendArticleClearCacheCall2Offset 0x0F744200 - 0x0F6B0000 + +struct SendArticleStruct { + DWORD wxid; + DWORD title; + DWORD abstract; + DWORD url; +}; + +VOID SendArticleRemote(LPVOID lparameter) { + SendArticleStruct* sas = (SendArticleStruct*)lparameter; + wchar_t* wxid = (wchar_t*)sas->wxid; + wchar_t* title = (wchar_t*)sas->title; + wchar_t* abstract = (wchar_t*)sas->abstract; + wchar_t* url = (wchar_t*)sas->url; + SendArticle(wxid,title,abstract,url); +} + +BOOL __stdcall SendArticle(wchar_t* wxid,wchar_t* title, wchar_t* abstract, wchar_t* url) { + DWORD WeChatWinBase = GetWeChatWinBase(); + DWORD SendArticleCall1 = WeChatWinBase + SendArticleCall1Offset; + DWORD SendArticleCall2 = WeChatWinBase + SendArticleCall2Offset; + DWORD SendArticleCall3 = WeChatWinBase + SendArticleCall3Offset; + DWORD SendArticleCall4 = WeChatWinBase + SendArticleCall4Offset; + + DWORD SendArticleParam = WeChatWinBase + SendArticleParamOffset; + + DWORD SendArticleClearCacheCall1 = WeChatWinBase + SendArticleClearCacheCall1Offset; + DWORD SendArticleClearCacheCall2 = WeChatWinBase + SendArticleClearCacheCall2Offset; + // Լwxid + char* sselfwxid = (char*)(*(DWORD*)(WeChatWinBase + 0x222EB3C)); + wchar_t* wselfwxid = new wchar_t[strlen(sselfwxid) + 1]; + MultiByteToWideChar(CP_ACP, MB_COMPOSITE, sselfwxid, -1, wselfwxid, strlen(sselfwxid) + 1); + // xml + wchar_t* xmlbuffer = new wchar_t[0x2000]; + ZeroMemory(xmlbuffer, 0x2000 * 2); + swprintf_s(xmlbuffer,0x2000, (wchar_t*)L"\n %ws\n 0\n \n \n %ws\n %ws\n view\n 5\n 0\n \n %ws\n \n \n \n \n \n \n \n \n \n \n \n \n \n 0\n \n \n \n \n \n \n \n \n \n 0\n \n \n \n \n 1\n Window wechat\n \n", + wselfwxid,title,abstract,url); + + DWORD sendtype = 0x5; + WxBaseStruct pSender(wselfwxid); + char nullbuffer[0x1C] = { 0 }; + WxBaseStruct pXml(xmlbuffer); + WxBaseStruct pReceiver(wxid); + WxString imgbuffer = { 0 }; + WxString nullStruct = { 0 }; + char buffer[0xF90] = { 0 }; + DWORD isSuccess = 0x0; + __asm { + pushad; + pushfd; + lea ecx, buffer; + call SendArticleCall1; + mov eax, [sendtype]; + push eax; + lea eax, nullbuffer; + lea edx, pSender; + push eax; + lea eax, imgbuffer; + push eax; + lea eax, pXml; + push eax; + lea edi, pReceiver; + push edi; + lea ecx, buffer; + call SendArticleCall2; + add esp, 0x14; + lea eax, nullStruct; + push eax; + lea ecx, buffer; + call SendArticleCall3; + mov dl, 0x0; + lea ecx, buffer; + push SendArticleParam; + push SendArticleParam; + call SendArticleCall4; + mov isSuccess, eax; + add esp, 0x8; + lea ecx, buffer; + call SendArticleClearCacheCall1; + lea ecx, buffer; + call SendArticleClearCacheCall2; + popfd; + popad; + } + delete[] xmlbuffer; + xmlbuffer = NULL; + delete[] wselfwxid; + wselfwxid = NULL; + return (isSuccess == 0x1); +} \ No newline at end of file diff --git a/DWeChatRobot_3.6.0.18/SendArticle.h b/DWeChatRobot_3.6.0.18/SendArticle.h new file mode 100644 index 0000000..5ce0858 --- /dev/null +++ b/DWeChatRobot_3.6.0.18/SendArticle.h @@ -0,0 +1,4 @@ +#pragma once +#include +extern "C" __declspec(dllexport) VOID SendArticleRemote(LPVOID lparameter); +BOOL __stdcall SendArticle(wchar_t* wxid, wchar_t* title, wchar_t* abstract, wchar_t* url); \ No newline at end of file diff --git a/DWeChatRobot_3.6.0.18/SendCard.cpp b/DWeChatRobot_3.6.0.18/SendCard.cpp new file mode 100644 index 0000000..76d37db --- /dev/null +++ b/DWeChatRobot_3.6.0.18/SendCard.cpp @@ -0,0 +1,51 @@ +#include "pch.h" + +#define SendCardCallOffset 0x644FE7B0 - 0x64040000 +#define DeleteCardCacheCallOffset 0x640D4200 - 0x64040000 + +struct SendCardStruct { + DWORD receiver; + DWORD sharedwxid; + DWORD nickname; +}; + +VOID SendCardRemote(LPVOID lparameter) { + SendCardStruct* scs = (SendCardStruct*)lparameter; + wchar_t* receiver = (WCHAR*)scs->receiver; + wchar_t* sharedwxid = (WCHAR*)scs->sharedwxid; + wchar_t* nickname = (WCHAR*)scs->nickname; + SendCard(receiver,sharedwxid,nickname); +} + +BOOL __stdcall SendCard(wchar_t* receiver, wchar_t* sharedwxid, wchar_t* nickname) { + DWORD WeChatWinBase = GetWeChatWinBase(); + DWORD SendCardCall = WeChatWinBase + SendCardCallOffset; + DWORD DeleteCardCacheCall = WeChatWinBase + DeleteCardCacheCallOffset; + wchar_t* xml = new wchar_t[0x2000]; + ZeroMemory(xml, 0x2000 * 2); + swprintf_s(xml, 0x2000,L"", + sharedwxid, nickname, sharedwxid); + WxBaseStruct pReceiver(receiver); + WxBaseStruct pXml(xml); + char buffer[0x2D0] = { 0 }; + DWORD isSuccess = 0x1; + + __asm { + pushad; + push 0x2A; + lea eax, pXml; + lea edx, pReceiver; + push 0x0; + push eax; + lea ecx, buffer; + call SendCardCall; + add esp, 0xC; + lea ecx, buffer; + call DeleteCardCacheCall; + mov isSuccess, eax; + popad; + } + delete[] xml; + xml = NULL; + return isSuccess; +} \ No newline at end of file diff --git a/DWeChatRobot_3.6.0.18/SendCard.h b/DWeChatRobot_3.6.0.18/SendCard.h new file mode 100644 index 0000000..892ab26 --- /dev/null +++ b/DWeChatRobot_3.6.0.18/SendCard.h @@ -0,0 +1,4 @@ +#pragma once +#include +extern "C" __declspec(dllexport) VOID SendCardRemote(LPVOID lparameter); +BOOL __stdcall SendCard(wchar_t* receiver, wchar_t* sharedwxid, wchar_t* nickname); \ No newline at end of file diff --git a/DWeChatRobot_3.6.0.18/SendFile.cpp b/DWeChatRobot_3.6.0.18/SendFile.cpp new file mode 100644 index 0000000..3ce9478 --- /dev/null +++ b/DWeChatRobot_3.6.0.18/SendFile.cpp @@ -0,0 +1,126 @@ +#include "pch.h" + +#define SendFileCall1Offset (0x67A71DC0 - 0x67370000) +#define SendFileCall2Offset (0x68D81C83 - 0x67370000) +#define SendFileCall3Offset (0x68D8047A - 0x67370000) +#define SendFileCall4Offset (0x67702260 - 0x67370000) +#define SendFileParamsOffset (0x6959F170 - 0x67370000) + +#define DeleteSendFileCacheCallOffset (0x67404200 - 0x67370000) + +struct FileParamStruct { + DWORD wxid; + DWORD filepath; +}; + +struct WxFileStruct { + int type = 3; + wchar_t* buffer; + DWORD length; + DWORD maxLength; + char fill[0x34] = { 0 }; + + WxFileStruct(wchar_t* pStr) { + buffer = pStr; + length = wcslen(pStr); + maxLength = wcslen(pStr) * 2; + } +}; + +void SendFileRemote(LPVOID lpParamStruct) { + FileParamStruct* params = (FileParamStruct*)lpParamStruct; + SendFile((WCHAR*)params->wxid, (WCHAR*)params->filepath); +} + +void __stdcall SendFile(wchar_t* receiver, wchar_t* FilePath) { + WxBaseStruct pReceiver(receiver); + WxBaseStruct pFilePath(FilePath); + WxFileStruct esi_(FilePath); + + DWORD WeChatWinBase = GetWeChatWinBase(); + + DWORD WxSendFileCall1 = WeChatWinBase + SendFileCall1Offset; + DWORD WxSendFileCall2 = WeChatWinBase + SendFileCall2Offset; + DWORD WxSendFileCall3 = WeChatWinBase + SendFileCall3Offset; + DWORD WxSendFileCall4 = WeChatWinBase + SendFileCall4Offset; + DWORD WxSendFileParams = WeChatWinBase + SendFileParamsOffset; + DWORD DeleteSendFileCacheCall = WeChatWinBase + DeleteSendFileCacheCallOffset; + + char buffer[0x3B0] = { 0 }; + + DWORD edi_ = pReceiver.length; + DWORD ptrReceiver = (DWORD)pReceiver.buffer; + + DWORD tempecx = 0; + + __asm { + pushad; + pushfd; + lea esi, esi_; + push 0; + push 0; + push 0; + push 0; + push 0; + push 0x005A0000; + sub esp, 0x14; + mov edi, esp; + mov dword ptr ds : [edi] , 0x0; + mov dword ptr ds : [edi + 0x4] , 0x0; + mov dword ptr ds : [edi + 0x8] , 0x0; + mov dword ptr ds : [edi + 0xC] , 0x0; + mov dword ptr ds : [edi + 0x10] , 0x0; + + sub esp, 0x14; + lea eax, dword ptr ds : [esi + 0x4] ; + mov ecx, esp; + push eax; + call WxSendFileCall1; + + sub esp, 0x14; + mov ecx, esp; + mov dword ptr ds : [ecx] , 0x0; + mov dword ptr ds : [ecx + 0x4] , 0x0; + mov dword ptr ds : [ecx + 0x8] , 0x0; + mov dword ptr ds : [ecx + 0xC] , 0x0; + mov dword ptr ds : [ecx + 0x10] , 0x0; + + lea edx, pReceiver; + mov eax, [edx]; + + mov edi, edi_; + lea eax, dword ptr ds : [edi * 2 + 0x2] ; + mov tempecx, ecx; + push eax; + push dword ptr ds : [ecx] ; + call WxSendFileCall2; + mov ecx, [tempecx]; + mov edx, eax; + add esp, 0x8; + + mov eax, dword ptr ds : [ecx + 0x4] ; + mov dword ptr ds : [ecx] , edx; + mov dword ptr ds : [ecx + 0x8] , edi; + mov tempecx, ecx; + push edi; + push ptrReceiver; + push dword ptr ds : [ecx] ; + call WxSendFileCall3; + mov ecx, [tempecx]; + add esp, 0xC; + + mov edx, 0x0; + mov eax, dword ptr ds : [ecx] ; + mov word ptr ds : [eax + edi * 2] , 0x0; + mov dword ptr ds : [ecx + 0x4] , edi; + + mov ecx, WxSendFileParams; + lea eax, buffer; + push eax; + call WxSendFileCall4; + lea ecx, buffer; + call DeleteSendFileCacheCall; + popfd; + popad; + } +} \ No newline at end of file diff --git a/DWeChatRobot_3.6.0.18/SendFile.h b/DWeChatRobot_3.6.0.18/SendFile.h new file mode 100644 index 0000000..c0b0816 --- /dev/null +++ b/DWeChatRobot_3.6.0.18/SendFile.h @@ -0,0 +1,5 @@ +#pragma once +#include + +void __stdcall SendFile(wchar_t* receiver, wchar_t* FilePath); +extern "C" __declspec(dllexport) void SendFileRemote(LPVOID lpParamStruct); \ No newline at end of file diff --git a/DWeChatRobot_3.6.0.18/SendImage.cpp b/DWeChatRobot_3.6.0.18/SendImage.cpp new file mode 100644 index 0000000..e99bd05 --- /dev/null +++ b/DWeChatRobot_3.6.0.18/SendImage.cpp @@ -0,0 +1,51 @@ +#include "pch.h" + +#define SendImageCall1Offset (0x6740A1C0 - 0x67370000) +#define SendImageCall2Offset (0x67A71DC0 - 0x67370000) +#define SendImageCall3Offset (0x6782E160 - 0x67370000) +#define DeleteSendImageCacheCallOffset (0x67404200 - 0x67370000) + +struct ImageParamStruct { + DWORD wxid; + DWORD imagepath; +}; + +void SendImageRemote(LPVOID lpParamStruct) { + ImageParamStruct* params = (ImageParamStruct*)lpParamStruct; + SendImage((WCHAR*)params->wxid, (WCHAR*)params->imagepath); +} + +void __stdcall SendImage(wchar_t* receiver, wchar_t* ImagePath) { + DWORD WeChatWinBase = GetWeChatWinBase(); + DWORD SendImageCall1 = WeChatWinBase + SendImageCall1Offset; + DWORD SendImageCall2 = WeChatWinBase + SendImageCall2Offset; + DWORD SendImageCall3 = WeChatWinBase + SendImageCall3Offset; + DWORD DeleteSendImageCacheCall = WeChatWinBase + DeleteSendImageCacheCallOffset; + char nullbuffer[0x50] = { 0 }; + char buffer[0x3B0] = { 0 }; + WxBaseStruct pReceiver(receiver); + WxBaseStruct pImagePath(ImagePath); + WxString nullStruct = { 0 }; + + __asm { + pushad; + call SendImageCall1; + sub esp, 0x14; + mov ebx, eax; + lea eax, nullStruct; + mov ecx, esp; + lea edi, pImagePath; + push eax; + call SendImageCall2; + mov ecx, ebx; + lea eax, pReceiver; + push edi; + push eax; + lea eax, buffer; + push eax; + call SendImageCall3; + lea ecx, buffer; + call DeleteSendImageCacheCall; + popad; + } +} \ No newline at end of file diff --git a/DWeChatRobot_3.6.0.18/SendImage.h b/DWeChatRobot_3.6.0.18/SendImage.h new file mode 100644 index 0000000..57cdd2e --- /dev/null +++ b/DWeChatRobot_3.6.0.18/SendImage.h @@ -0,0 +1,5 @@ +#pragma once +#include + +void __stdcall SendImage(wchar_t* receiver, wchar_t* ImagePath); +extern "C" __declspec(dllexport) void SendImageRemote(LPVOID lpParamStruct); \ No newline at end of file diff --git a/DWeChatRobot_3.6.0.18/SendText.cpp b/DWeChatRobot_3.6.0.18/SendText.cpp new file mode 100644 index 0000000..c1842d9 --- /dev/null +++ b/DWeChatRobot_3.6.0.18/SendText.cpp @@ -0,0 +1,45 @@ +#include "pch.h" + +#define SendTextCallOffset 0x6782E7B0 - 0x67370000 +#define DeleteTextCacheCallOffset 0x67404200 - 0x67370000 + +struct SendTextStruct +{ + DWORD wxid; + DWORD wxmsg; +}; + +void SendTextRemote(LPVOID lpParameter) { + SendTextStruct* rp = (SendTextStruct*)lpParameter; + wchar_t* wsWxId = (WCHAR*)rp->wxid; + wchar_t* wsTextMsg = (WCHAR*)rp->wxmsg; + SendText(wsWxId, wsTextMsg); +} + +void __stdcall SendText(wchar_t* wsWxId, wchar_t* wsTextMsg) { + WxBaseStruct wxWxid(wsWxId); + WxBaseStruct wxTextMsg(wsTextMsg); + wchar_t** pWxmsg = &wxTextMsg.buffer; + char buffer[0x3B0] = { 0 }; + + WxString wxNull = { 0 }; + DWORD dllBaseAddress = GetWeChatWinBase(); + DWORD callAddress = dllBaseAddress + SendTextCallOffset; + DWORD DeleteTextCacheCall = dllBaseAddress + DeleteTextCacheCallOffset; + + __asm { + pushad; + lea eax, wxNull; + push 0x1; + push eax; + mov edi, pWxmsg; + push edi; + lea edx, wxWxid; + lea ecx, buffer; + call callAddress; + add esp, 0xC; + lea ecx, buffer; + call DeleteTextCacheCall; + popad; + } +} \ No newline at end of file diff --git a/DWeChatRobot_3.6.0.18/SendText.h b/DWeChatRobot_3.6.0.18/SendText.h new file mode 100644 index 0000000..7a347e4 --- /dev/null +++ b/DWeChatRobot_3.6.0.18/SendText.h @@ -0,0 +1,5 @@ +#pragma once +#include + +void __stdcall SendText(wchar_t* wsWxId, wchar_t* wsTextMsg); +extern "C" __declspec(dllexport) void SendTextRemote(LPVOID lpParameter); \ No newline at end of file diff --git a/DWeChatRobot_3.6.0.18/UserInfo.cpp b/DWeChatRobot_3.6.0.18/UserInfo.cpp new file mode 100644 index 0000000..160a3c4 --- /dev/null +++ b/DWeChatRobot_3.6.0.18/UserInfo.cpp @@ -0,0 +1,129 @@ +#include "pch.h" +#include +#include +#include + +#define GetUserInfoCall0Offset 0x6740A000 - 0x67370000 +#define GetUserInfoCall1Offset 0x679C9840 - 0x67370000 +#define GetUserInfoCall2Offset 0x67A71DC0 - 0x67370000 +#define GetUserInfoCall3Offset 0x677724A0 - 0x67370000 + +#define DeleteUserInfoCacheCall1Offset 0x67775990 - 0x67370000 +#define DeleteUserInfoCacheCall2Offset 0x679CA340 - 0x67370000 + +struct GetUserInfoStruct { + DWORD message; + DWORD length; +}; + +wstring wUserInfo = L""; +GetUserInfoStruct ret = { 0 }; + +VOID WxUserInfo(DWORD address) { + vector InfoType{ + address + 0x10, + address + 0x24, + address + 0x38, + address + 0x6C, + address + 0xFC, + address + 0x110, + address + 0x19C, + address + 0x1B0, + address + 0x1C4, + address + 0x1D8, + address + 0x27C + }; + vector InfoTypeName{ + (WCHAR*)L"\"wxId\"", + (WCHAR*)L"\"wxNumber\"", + (WCHAR*)L"\"wxV3\"", + (WCHAR*)L"\"wxNickName\"", + (WCHAR*)L"\"wxBigAvatar\"", + (WCHAR*)L"\"wxSmallAvatar\"", + (WCHAR*)L"\"wxSignature\"", + (WCHAR*)L"\"wxNation\"", + (WCHAR*)L"\"wxProvince\"", + (WCHAR*)L"\"wxCity\"", + (WCHAR*)L"\"wxBackground\"", + }; + wUserInfo += L"{"; + for (unsigned int i = 0; i < InfoType.size(); i++) { + wchar_t* wstemp = ((*((DWORD*)InfoType[i])) != 0) ? (WCHAR*)(*((LPVOID*)InfoType[i])) : (WCHAR*)L"null"; + wUserInfo = wUserInfo + InfoTypeName[i] + L":\"" + wstemp + L"\""; + if (i != InfoType.size() - 1) { + wUserInfo += L","; + } + } + wUserInfo += L"}"; +#ifdef _DEBUG + wcout.imbue(locale("chs")); + wcout << wUserInfo.c_str() << endl; +#endif +} + + +DWORD GetWxUserInfoRemote(LPVOID lparamter) { + wchar_t* userwxid = (wchar_t*)lparamter; + + if (!GetUserInfoByWxId(userwxid)) { + return 0; + } + ret.message = (DWORD)wUserInfo.c_str(); + ret.length = (DWORD)wUserInfo.length(); + return (DWORD)&ret; +} + +VOID DeleteUserInfoCacheRemote() { + if (ret.length) { + ZeroMemory((wchar_t*)ret.message, ret.length * 2 + 2); + ret.length = 0; + wUserInfo = L""; + } +} + +BOOL __stdcall GetUserInfoByWxId(wchar_t* wxid) { + DWORD WeChatWinBase = GetWeChatWinBase(); + DWORD WxGetUserInfoCall0 = WeChatWinBase + GetUserInfoCall0Offset; + DWORD WxGetUserInfoCall1 = WeChatWinBase + GetUserInfoCall1Offset; + DWORD WxGetUserInfoCall2 = WeChatWinBase + GetUserInfoCall2Offset; + DWORD WxGetUserInfoCall3 = WeChatWinBase + GetUserInfoCall3Offset; + DWORD DeleteUserInofCacheCall1 = WeChatWinBase + DeleteUserInfoCacheCall1Offset; + DWORD DeleteUserInofCacheCall2 = WeChatWinBase + DeleteUserInfoCacheCall2Offset; + char buffer[0x3FC] = { 0 }; + WxBaseStruct pWxid(wxid); + DWORD address = 0; + DWORD isSuccess = 0; + __asm + { + pushad; + call WxGetUserInfoCall0; + mov edi, eax; + lea ecx, buffer; + call WxGetUserInfoCall1; + lea eax, buffer; + mov address, eax; + push eax; + sub esp, 0x14; + mov ecx, esp; + lea esi, pWxid; + push esi; + call WxGetUserInfoCall2; + mov ecx, edi; + call WxGetUserInfoCall3; + mov isSuccess, eax; + popad; + } + if(isSuccess) + WxUserInfo(address); + __asm { + pushad; + lea eax, buffer; + push eax; + call DeleteUserInofCacheCall1; + lea ecx, buffer; + mov esi, eax; + call DeleteUserInofCacheCall2; + popad; + } + return isSuccess; +} \ No newline at end of file diff --git a/DWeChatRobot_3.6.0.18/UserInfo.h b/DWeChatRobot_3.6.0.18/UserInfo.h new file mode 100644 index 0000000..465776e --- /dev/null +++ b/DWeChatRobot_3.6.0.18/UserInfo.h @@ -0,0 +1,5 @@ +#pragma once +#include +BOOL __stdcall GetUserInfoByWxId(wchar_t* wxid); +extern "C" __declspec(dllexport) DWORD GetWxUserInfoRemote(LPVOID lparamter); +extern "C" __declspec(dllexport) VOID DeleteUserInfoCacheRemote(); \ No newline at end of file diff --git a/DWeChatRobot_3.6.0.18/dllmain.cpp b/DWeChatRobot_3.6.0.18/dllmain.cpp new file mode 100644 index 0000000..8657c4c --- /dev/null +++ b/DWeChatRobot_3.6.0.18/dllmain.cpp @@ -0,0 +1,46 @@ +// dllmain.cpp : 定义 DLL 应用程序的入口点。 +#include "pch.h" + +#ifdef _DEBUG + int detach_count = 0; +#endif + +BOOL APIENTRY DllMain( HMODULE hModule, + DWORD ul_reason_for_call, + LPVOID lpReserved + ) +{ + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + { +#ifdef _DEBUG + CreateConsole(); + DWORD base = (DWORD)GetModuleHandleA("DWeChatRobot.dll"); + + printf("SendImage 0x%08X\n", (DWORD)SendImage); + printf("SendText 0x%08X\n", (DWORD)SendText); + printf("SendFile 0x%08X\n", (DWORD)SendFile); + printf("GetFriendList 0x%08X\n", (DWORD)GetFriendList); + printf("GetUserInfoByWxId 0x%08X\n", (DWORD)GetUserInfoByWxId); + printf("SendArticle 0x%08X\n", (DWORD)SendArticle); + printf("SendCard 0x%08X\n", (DWORD)SendCard); +#endif + break; + } + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + case DLL_PROCESS_DETACH: { +#ifdef _DEBUG + detach_count++; + if (detach_count != 1) { + // FreeConsole(); + // UnHookAll(); + } +#endif + break; + } + } + return TRUE; +} + diff --git a/DWeChatRobot_3.6.0.18/framework.h b/DWeChatRobot_3.6.0.18/framework.h new file mode 100644 index 0000000..3f0fc4a --- /dev/null +++ b/DWeChatRobot_3.6.0.18/framework.h @@ -0,0 +1,5 @@ +#pragma once + +#define WIN32_LEAN_AND_MEAN // 从 Windows 头文件中排除极少使用的内容 +// Windows 头文件 +#include diff --git a/DWeChatRobot_3.6.0.18/pch.cpp b/DWeChatRobot_3.6.0.18/pch.cpp new file mode 100644 index 0000000..0facc60 --- /dev/null +++ b/DWeChatRobot_3.6.0.18/pch.cpp @@ -0,0 +1,67 @@ +// pch.cpp: 与预编译标头对应的源文件 + +#include "pch.h" + +// 当使用预编译的头时,需要使用此源文件,编译才能成功。 +BOOL CreateConsole(void) { + if (AllocConsole()) { + AttachConsole(GetCurrentProcessId()); + FILE* retStream; + freopen_s(&retStream, "CONOUT$", "w", stdout); + if (!retStream) throw std::runtime_error("Stdout redirection failed."); + freopen_s(&retStream, "CONOUT$", "w", stderr); + if (!retStream) throw std::runtime_error("Stderr redirection failed."); + return 0; + } + return 1; +} + +DWORD GetWeChatWinBase() { + return (DWORD)GetModuleHandleA("WeChatWin.dll"); +} + +void Wchar_tToString(std::string& szDst, wchar_t* wchar) +{ + wchar_t* wText = wchar; + DWORD dwNum = WideCharToMultiByte(CP_OEMCP, NULL, wText, -1, NULL, 0, NULL, FALSE);// WideCharToMultiByte的运用 + char* psText; // psText为char*的临时数组,作为赋值给std::string的中间变量 + psText = new char[dwNum]; + WideCharToMultiByte(CP_OEMCP, NULL, wText, -1, psText, dwNum, NULL, FALSE);// WideCharToMultiByte的再次运用 + szDst = psText;// std::string赋值 + delete[]psText;// psText的清除 +} + +void HookAnyAddress(DWORD dwHookAddr, LPVOID dwJmpAddress,char* originalRecieveCode) +{ + //组装跳转数据 + BYTE jmpCode[5] = { 0 }; + jmpCode[0] = 0xE9; + + //计算偏移 + *(DWORD*)&jmpCode[1] = (DWORD)dwJmpAddress - dwHookAddr - 5; + + // 保存以前的属性用于还原 + DWORD OldProtext = 0; + + // 因为要往代码段写入数据,又因为代码段是不可写的,所以需要修改属性 + VirtualProtect((LPVOID)dwHookAddr, 5, PAGE_EXECUTE_READWRITE, &OldProtext); + ReadProcessMemory(GetCurrentProcess(), (LPVOID)dwHookAddr, originalRecieveCode, 5, 0); + + //写入自己的代码 + memcpy((void*)dwHookAddr, jmpCode, 5); + + // 执行完了操作之后需要进行还原 + VirtualProtect((LPVOID)dwHookAddr, 5, OldProtext, &OldProtext); +} + +void UnHookAnyAddress(DWORD dwHookAddr, char* originalRecieveCode) +{ + DWORD OldProtext = 0; + VirtualProtect((LPVOID)dwHookAddr, 5, PAGE_EXECUTE_READWRITE, &OldProtext); + WriteProcessMemory(GetCurrentProcess(), (LPVOID)dwHookAddr, originalRecieveCode, 5, 0); + VirtualProtect((LPVOID)dwHookAddr, 5, OldProtext, &OldProtext); +} + +void UnHookAll() { + return; +} \ No newline at end of file diff --git a/DWeChatRobot_3.6.0.18/pch.h b/DWeChatRobot_3.6.0.18/pch.h new file mode 100644 index 0000000..048c94c --- /dev/null +++ b/DWeChatRobot_3.6.0.18/pch.h @@ -0,0 +1,59 @@ +// pch.h: 这是预编译标头文件。 +// 下方列出的文件仅编译一次,提高了将来生成的生成性能。 +// 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。 +// 但是,如果此处列出的文件中的任何一个在生成之间有更新,它们全部都将被重新编译。 +// 请勿在此处添加要频繁更新的文件,这将使得性能优势无效。 +#pragma once +#ifndef PCH_H +#define PCH_H + +// 添加要在此处预编译的标头 +#include "framework.h" +#include +#include +#include "SendImage.h" +#include "SendText.h" +#include "SendFile.h" +#include "SendArticle.h" +#include "FriendList.h" +#include "UserInfo.h" +#include "SelfInfo.h" +#include "SendCard.h" +#endif //PCH_H + +using namespace std; +#define DLLEXPORT extern "C" __declspec(dllexport) + +struct WxBaseStruct +{ + wchar_t* buffer; + DWORD length; + DWORD maxLength; + DWORD fill1; + DWORD fill2; + + WxBaseStruct(wchar_t* pStr) { + buffer = pStr; + length = wcslen(pStr); + maxLength = wcslen(pStr) * 2; + fill1 = 0x0; + fill2 = 0x0; + } +}; + +struct WxString +{ + wchar_t* buffer; + DWORD length; + DWORD maxLength; + DWORD fill1 = 0; + DWORD fill2 = 0; +}; + + +BOOL CreateConsole(void); +DWORD GetWeChatWinBase(); +void Wchar_tToString(std::string& szDst, wchar_t* wchar); +void HookAnyAddress(DWORD dwHookAddr, LPVOID dwJmpAddress, char* originalRecieveCode); +void UnHookAnyAddress(DWORD dwHookAddr, char* originalRecieveCode); +DLLEXPORT void UnHookAll(); diff --git a/Release/DWeChatRobot.dll b/Release/DWeChatRobot.dll index 879ae5149992b6f41308884ef5933ba0f328ea33..1dc777308972322161b13e49bbb1cf9fe19c3ac3 100644 GIT binary patch delta 10947 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 G>^}k3`KhiNBX$u1O;kX@ti&G#b`5DXi!LN? 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 <&9x}H(IA1uXA!+hMc-H$|B453 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 E7wYyN!2kdN diff --git a/wxRobot.py b/wxRobot.py index 8795222..47b0d0e 100644 --- a/wxRobot.py +++ b/wxRobot.py @@ -144,7 +144,7 @@ def test(): if os.path.exists(imgpath): session.SendImage(imgpath) if os.path.exists(filepath): session.SendFile(filepath) session.SendArticle("PC微信逆向--获取通讯录","确定不来看看么?","https://www.ljczero.top/article/2022/3/13/133.html") - shared = wx.GetFriendByWxNickName("小冰的宇宙") + shared = wx.GetFriendByWxNickName("码农翻身") if shared: session.SendCard(shared.get('wxid'),shared.get('wxNickName')) wx.StopService() -- GitLab