Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
钢镚是个小屁精
ComWeChatRobot
提交
75dd8408
C
ComWeChatRobot
项目概览
钢镚是个小屁精
/
ComWeChatRobot
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
ComWeChatRobot
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
75dd8408
编写于
3月 21, 2022
作者:
L
ljc545w
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
清理主分支
上级
6d519bed
变更
50
隐藏空白更改
内联
并排
Showing
50 changed file
with
944 addition
and
2425 deletion
+944
-2425
ComWeChatRobot.sln
ComWeChatRobot.sln
+1
-17
DWeChatRobot/DWeChatRobot.vcxproj
DWeChatRobot/DWeChatRobot.vcxproj
+187
-187
DWeChatRobot/DWeChatRobot.vcxproj.filters
DWeChatRobot/DWeChatRobot.vcxproj.filters
+113
-113
DWeChatRobot/DWeChatRobot.vcxproj.user
DWeChatRobot/DWeChatRobot.vcxproj.user
+3
-3
DWeChatRobot/FriendList.cpp
DWeChatRobot/FriendList.cpp
+96
-96
DWeChatRobot/FriendList.h
DWeChatRobot/FriendList.h
+5
-5
DWeChatRobot/SelfInfo.cpp
DWeChatRobot/SelfInfo.cpp
+0
-0
DWeChatRobot/SelfInfo.h
DWeChatRobot/SelfInfo.h
+0
-0
DWeChatRobot/SendArticle.cpp
DWeChatRobot/SendArticle.cpp
+0
-0
DWeChatRobot/SendArticle.h
DWeChatRobot/SendArticle.h
+0
-0
DWeChatRobot/SendCard.cpp
DWeChatRobot/SendCard.cpp
+0
-0
DWeChatRobot/SendCard.h
DWeChatRobot/SendCard.h
+0
-0
DWeChatRobot/SendFile.cpp
DWeChatRobot/SendFile.cpp
+125
-125
DWeChatRobot/SendFile.h
DWeChatRobot/SendFile.h
+4
-4
DWeChatRobot/SendImage.cpp
DWeChatRobot/SendImage.cpp
+50
-50
DWeChatRobot/SendImage.h
DWeChatRobot/SendImage.h
+4
-4
DWeChatRobot/SendText.cpp
DWeChatRobot/SendText.cpp
+44
-44
DWeChatRobot/SendText.h
DWeChatRobot/SendText.h
+4
-4
DWeChatRobot/UserInfo.cpp
DWeChatRobot/UserInfo.cpp
+128
-128
DWeChatRobot/UserInfo.h
DWeChatRobot/UserInfo.h
+4
-4
DWeChatRobot/dllmain.cpp
DWeChatRobot/dllmain.cpp
+46
-46
DWeChatRobot/framework.h
DWeChatRobot/framework.h
+5
-5
DWeChatRobot/pch.cpp
DWeChatRobot/pch.cpp
+66
-66
DWeChatRobot/pch.h
DWeChatRobot/pch.h
+59
-59
DWeChatRobot_3.5.0.46/DWeChatRobot_3.5.0.46.vcxproj
DWeChatRobot_3.5.0.46/DWeChatRobot_3.5.0.46.vcxproj
+0
-190
DWeChatRobot_3.5.0.46/DWeChatRobot_3.5.0.46.vcxproj.filters
DWeChatRobot_3.5.0.46/DWeChatRobot_3.5.0.46.vcxproj.filters
+0
-123
DWeChatRobot_3.5.0.46/DWeChatRobot_3.5.0.46.vcxproj.user
DWeChatRobot_3.5.0.46/DWeChatRobot_3.5.0.46.vcxproj.user
+0
-4
DWeChatRobot_3.5.0.46/FriendList.cpp
DWeChatRobot_3.5.0.46/FriendList.cpp
+0
-96
DWeChatRobot_3.5.0.46/SaveGif.cpp
DWeChatRobot_3.5.0.46/SaveGif.cpp
+0
-145
DWeChatRobot_3.5.0.46/SaveGif.h
DWeChatRobot_3.5.0.46/SaveGif.h
+0
-6
DWeChatRobot_3.5.0.46/SelfInfo.cpp
DWeChatRobot_3.5.0.46/SelfInfo.cpp
+0
-98
DWeChatRobot_3.5.0.46/SendArticle.cpp
DWeChatRobot_3.5.0.46/SendArticle.cpp
+0
-100
DWeChatRobot_3.5.0.46/SendCard.cpp
DWeChatRobot_3.5.0.46/SendCard.cpp
+0
-51
DWeChatRobot_3.5.0.46/SendFile.cpp
DWeChatRobot_3.5.0.46/SendFile.cpp
+0
-121
DWeChatRobot_3.5.0.46/SendFile.h
DWeChatRobot_3.5.0.46/SendFile.h
+0
-5
DWeChatRobot_3.5.0.46/SendImage.cpp
DWeChatRobot_3.5.0.46/SendImage.cpp
+0
-70
DWeChatRobot_3.5.0.46/SendImage.h
DWeChatRobot_3.5.0.46/SendImage.h
+0
-5
DWeChatRobot_3.5.0.46/SendText.cpp
DWeChatRobot_3.5.0.46/SendText.cpp
+0
-52
DWeChatRobot_3.5.0.46/UserInfo.cpp
DWeChatRobot_3.5.0.46/UserInfo.cpp
+0
-189
DWeChatRobot_3.5.0.46/UserInfo.h
DWeChatRobot_3.5.0.46/UserInfo.h
+0
-6
DWeChatRobot_3.5.0.46/dllmain.cpp
DWeChatRobot_3.5.0.46/dllmain.cpp
+0
-47
DWeChatRobot_3.5.0.46/framework.h
DWeChatRobot_3.5.0.46/framework.h
+0
-5
DWeChatRobot_3.5.0.46/pch.cpp
DWeChatRobot_3.5.0.46/pch.cpp
+0
-67
DWeChatRobot_3.5.0.46/pch.h
DWeChatRobot_3.5.0.46/pch.h
+0
-60
DWeChatRobot_3.6.0.18/FriendList.h
DWeChatRobot_3.6.0.18/FriendList.h
+0
-6
DWeChatRobot_3.6.0.18/SelfInfo.h
DWeChatRobot_3.6.0.18/SelfInfo.h
+0
-6
DWeChatRobot_3.6.0.18/SendArticle.h
DWeChatRobot_3.6.0.18/SendArticle.h
+0
-4
DWeChatRobot_3.6.0.18/SendCard.h
DWeChatRobot_3.6.0.18/SendCard.h
+0
-4
DWeChatRobot_3.6.0.18/SendText.h
DWeChatRobot_3.6.0.18/SendText.h
+0
-5
Release/DWeChatRobot.dll
Release/DWeChatRobot.dll
+0
-0
未找到文件。
ComWeChatRobot.sln
浏览文件 @
75dd8408
...
...
@@ -7,11 +7,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CWeChatRobot", "CWeChatRobo
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}"
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DWeChatRobot", "DWeChatRobot\DWeChatRobot.vcxproj", "{C0FC8DAB-0590-46AC-9270-6FEA45D52390}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
...
...
@@ -37,14 +33,6 @@ 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
...
...
@@ -57,10 +45,6 @@ Global
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
...
...
DWeChatRobot
_3.6.0.18/DWeChatRobot_3.6.0.18
.vcxproj
→
DWeChatRobot
/DWeChatRobot
.vcxproj
浏览文件 @
75dd8408
<?xml version="1.0" encoding="utf-8"?>
<Project
DefaultTargets=
"Build"
xmlns=
"http://schemas.microsoft.com/developer/msbuild/2003"
>
<ItemGroup
Label=
"ProjectConfigurations"
>
<ProjectConfiguration
Include=
"Debug|Win32"
>
<Configuration>
Debug
</Configuration>
<Platform>
Win32
</Platform>
</ProjectConfiguration>
<ProjectConfiguration
Include=
"Release|Win32"
>
<Configuration>
Release
</Configuration>
<Platform>
Win32
</Platform>
</ProjectConfiguration>
<ProjectConfiguration
Include=
"Debug|x64"
>
<Configuration>
Debug
</Configuration>
<Platform>
x64
</Platform>
</ProjectConfiguration>
<ProjectConfiguration
Include=
"Release|x64"
>
<Configuration>
Release
</Configuration>
<Platform>
x64
</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup
Label=
"Globals"
>
<VCProjectVersion>
16.0
</VCProjectVersion>
<Keyword>
Win32Proj
</Keyword>
<ProjectGuid>
{C0FC8DAB-0590-46AC-9270-6FEA45D52390}
</ProjectGuid>
<RootNamespace>
MyWeChatRobot
</RootNamespace>
<WindowsTargetPlatformVersion>
10.0
</WindowsTargetPlatformVersion>
<ProjectName>
DWeChatRobot
_3.6.0.18
</ProjectName>
</PropertyGroup>
<Import
Project=
"$(VCTargetsPath)\Microsoft.Cpp.Default.props"
/>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Debug|Win32'"
Label=
"Configuration"
>
<ConfigurationType>
DynamicLibrary
</ConfigurationType>
<UseDebugLibraries>
true
</UseDebugLibraries>
<PlatformToolset>
v142
</PlatformToolset>
<CharacterSet>
Unicode
</CharacterSet>
</PropertyGroup>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Release|Win32'"
Label=
"Configuration"
>
<ConfigurationType>
DynamicLibrary
</ConfigurationType>
<UseDebugLibraries>
false
</UseDebugLibraries>
<PlatformToolset>
v142
</PlatformToolset>
<WholeProgramOptimization>
true
</WholeProgramOptimization>
<CharacterSet>
Unicode
</CharacterSet>
</PropertyGroup>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Debug|x64'"
Label=
"Configuration"
>
<ConfigurationType>
DynamicLibrary
</ConfigurationType>
<UseDebugLibraries>
true
</UseDebugLibraries>
<PlatformToolset>
v142
</PlatformToolset>
<CharacterSet>
Unicode
</CharacterSet>
</PropertyGroup>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Release|x64'"
Label=
"Configuration"
>
<ConfigurationType>
DynamicLibrary
</ConfigurationType>
<UseDebugLibraries>
false
</UseDebugLibraries>
<PlatformToolset>
v142
</PlatformToolset>
<WholeProgramOptimization>
true
</WholeProgramOptimization>
<CharacterSet>
Unicode
</CharacterSet>
</PropertyGroup>
<Import
Project=
"$(VCTargetsPath)\Microsoft.Cpp.props"
/>
<ImportGroup
Label=
"ExtensionSettings"
>
</ImportGroup>
<ImportGroup
Label=
"Shared"
>
</ImportGroup>
<ImportGroup
Label=
"PropertySheets"
Condition=
"'$(Configuration)|$(Platform)'=='Debug|Win32'"
>
<Import
Project=
"$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"
Condition=
"exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')"
Label=
"LocalAppDataPlatform"
/>
</ImportGroup>
<ImportGroup
Label=
"PropertySheets"
Condition=
"'$(Configuration)|$(Platform)'=='Release|Win32'"
>
<Import
Project=
"$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"
Condition=
"exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')"
Label=
"LocalAppDataPlatform"
/>
</ImportGroup>
<ImportGroup
Label=
"PropertySheets"
Condition=
"'$(Configuration)|$(Platform)'=='Debug|x64'"
>
<Import
Project=
"$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"
Condition=
"exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')"
Label=
"LocalAppDataPlatform"
/>
</ImportGroup>
<ImportGroup
Label=
"PropertySheets"
Condition=
"'$(Configuration)|$(Platform)'=='Release|x64'"
>
<Import
Project=
"$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"
Condition=
"exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')"
Label=
"LocalAppDataPlatform"
/>
</ImportGroup>
<PropertyGroup
Label=
"UserMacros"
/>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Debug|Win32'"
>
<LinkIncremental>
true
</LinkIncremental>
<TargetName>
DWeChatRobot
</TargetName>
</PropertyGroup>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Release|Win32'"
>
<LinkIncremental>
false
</LinkIncremental>
<TargetName>
DWeChatRobot
</TargetName>
</PropertyGroup>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Debug|x64'"
>
<LinkIncremental>
true
</LinkIncremental>
</PropertyGroup>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Release|x64'"
>
<LinkIncremental>
false
</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup
Condition=
"'$(Configuration)|$(Platform)'=='Debug|Win32'"
>
<ClCompile>
<WarningLevel>
Level3
</WarningLevel>
<SDLCheck>
true
</SDLCheck>
<PreprocessorDefinitions>
WIN32;_DEBUG;MYWECHATROBOT_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<ConformanceMode>
true
</ConformanceMode>
<PrecompiledHeader>
Use
</PrecompiledHeader>
<PrecompiledHeaderFile>
pch.h
</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>
Windows
</SubSystem>
<GenerateDebugInformation>
true
</GenerateDebugInformation>
<EnableUAC>
false
</EnableUAC>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup
Condition=
"'$(Configuration)|$(Platform)'=='Release|Win32'"
>
<ClCompile>
<WarningLevel>
Level3
</WarningLevel>
<FunctionLevelLinking>
true
</FunctionLevelLinking>
<IntrinsicFunctions>
true
</IntrinsicFunctions>
<SDLCheck>
true
</SDLCheck>
<PreprocessorDefinitions>
WIN32;NDEBUG;MYWECHATROBOT_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<ConformanceMode>
true
</ConformanceMode>
<PrecompiledHeader>
Use
</PrecompiledHeader>
<PrecompiledHeaderFile>
pch.h
</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>
Windows
</SubSystem>
<EnableCOMDATFolding>
true
</EnableCOMDATFolding>
<OptimizeReferences>
true
</OptimizeReferences>
<GenerateDebugInformation>
true
</GenerateDebugInformation>
<EnableUAC>
false
</EnableUAC>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup
Condition=
"'$(Configuration)|$(Platform)'=='Debug|x64'"
>
<ClCompile>
<WarningLevel>
Level3
</WarningLevel>
<SDLCheck>
true
</SDLCheck>
<PreprocessorDefinitions>
_DEBUG;MYWECHATROBOT_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<ConformanceMode>
true
</ConformanceMode>
<PrecompiledHeader>
Use
</PrecompiledHeader>
<PrecompiledHeaderFile>
pch.h
</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>
Windows
</SubSystem>
<GenerateDebugInformation>
true
</GenerateDebugInformation>
<EnableUAC>
false
</EnableUAC>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup
Condition=
"'$(Configuration)|$(Platform)'=='Release|x64'"
>
<ClCompile>
<WarningLevel>
Level3
</WarningLevel>
<FunctionLevelLinking>
true
</FunctionLevelLinking>
<IntrinsicFunctions>
true
</IntrinsicFunctions>
<SDLCheck>
true
</SDLCheck>
<PreprocessorDefinitions>
NDEBUG;MYWECHATROBOT_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<ConformanceMode>
true
</ConformanceMode>
<PrecompiledHeader>
Use
</PrecompiledHeader>
<PrecompiledHeaderFile>
pch.h
</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>
Windows
</SubSystem>
<EnableCOMDATFolding>
true
</EnableCOMDATFolding>
<OptimizeReferences>
true
</OptimizeReferences>
<GenerateDebugInformation>
true
</GenerateDebugInformation>
<EnableUAC>
false
</EnableUAC>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude
Include=
"framework.h"
/>
<ClInclude
Include=
"FriendList.h"
/>
<ClInclude
Include=
"pch.h"
/>
<ClInclude
Include=
"SelfInfo.h"
/>
<ClInclude
Include=
"SendArticle.h"
/>
<ClInclude
Include=
"SendCard.h"
/>
<ClInclude
Include=
"SendFile.h"
/>
<ClInclude
Include=
"SendImage.h"
/>
<ClInclude
Include=
"SendText.h"
/>
<ClInclude
Include=
"UserInfo.h"
/>
</ItemGroup>
<ItemGroup>
<ClCompile
Include=
"dllmain.cpp"
/>
<ClCompile
Include=
"FriendList.cpp"
/>
<ClCompile
Include=
"pch.cpp"
>
<PrecompiledHeader
Condition=
"'$(Configuration)|$(Platform)'=='Debug|Win32'"
>
Create
</PrecompiledHeader>
<PrecompiledHeader
Condition=
"'$(Configuration)|$(Platform)'=='Debug|x64'"
>
Create
</PrecompiledHeader>
<PrecompiledHeader
Condition=
"'$(Configuration)|$(Platform)'=='Release|Win32'"
>
Create
</PrecompiledHeader>
<PrecompiledHeader
Condition=
"'$(Configuration)|$(Platform)'=='Release|x64'"
>
Create
</PrecompiledHeader>
</ClCompile>
<ClCompile
Include=
"SelfInfo.cpp"
/>
<ClCompile
Include=
"SendArticle.cpp"
/>
<ClCompile
Include=
"SendCard.cpp"
/>
<ClCompile
Include=
"SendFile.cpp"
/>
<ClCompile
Include=
"SendImage.cpp"
/>
<ClCompile
Include=
"SendText.cpp"
/>
<ClCompile
Include=
"UserInfo.cpp"
/>
</ItemGroup>
<Import
Project=
"$(VCTargetsPath)\Microsoft.Cpp.targets"
/>
<ImportGroup
Label=
"ExtensionTargets"
>
</ImportGroup>
<?xml version="1.0" encoding="utf-8"?>
<Project
DefaultTargets=
"Build"
xmlns=
"http://schemas.microsoft.com/developer/msbuild/2003"
>
<ItemGroup
Label=
"ProjectConfigurations"
>
<ProjectConfiguration
Include=
"Debug|Win32"
>
<Configuration>
Debug
</Configuration>
<Platform>
Win32
</Platform>
</ProjectConfiguration>
<ProjectConfiguration
Include=
"Release|Win32"
>
<Configuration>
Release
</Configuration>
<Platform>
Win32
</Platform>
</ProjectConfiguration>
<ProjectConfiguration
Include=
"Debug|x64"
>
<Configuration>
Debug
</Configuration>
<Platform>
x64
</Platform>
</ProjectConfiguration>
<ProjectConfiguration
Include=
"Release|x64"
>
<Configuration>
Release
</Configuration>
<Platform>
x64
</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup
Label=
"Globals"
>
<VCProjectVersion>
16.0
</VCProjectVersion>
<Keyword>
Win32Proj
</Keyword>
<ProjectGuid>
{C0FC8DAB-0590-46AC-9270-6FEA45D52390}
</ProjectGuid>
<RootNamespace>
MyWeChatRobot
</RootNamespace>
<WindowsTargetPlatformVersion>
10.0
</WindowsTargetPlatformVersion>
<ProjectName>
DWeChatRobot
</ProjectName>
</PropertyGroup>
<Import
Project=
"$(VCTargetsPath)\Microsoft.Cpp.Default.props"
/>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Debug|Win32'"
Label=
"Configuration"
>
<ConfigurationType>
DynamicLibrary
</ConfigurationType>
<UseDebugLibraries>
true
</UseDebugLibraries>
<PlatformToolset>
v142
</PlatformToolset>
<CharacterSet>
Unicode
</CharacterSet>
</PropertyGroup>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Release|Win32'"
Label=
"Configuration"
>
<ConfigurationType>
DynamicLibrary
</ConfigurationType>
<UseDebugLibraries>
false
</UseDebugLibraries>
<PlatformToolset>
v142
</PlatformToolset>
<WholeProgramOptimization>
true
</WholeProgramOptimization>
<CharacterSet>
Unicode
</CharacterSet>
</PropertyGroup>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Debug|x64'"
Label=
"Configuration"
>
<ConfigurationType>
DynamicLibrary
</ConfigurationType>
<UseDebugLibraries>
true
</UseDebugLibraries>
<PlatformToolset>
v142
</PlatformToolset>
<CharacterSet>
Unicode
</CharacterSet>
</PropertyGroup>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Release|x64'"
Label=
"Configuration"
>
<ConfigurationType>
DynamicLibrary
</ConfigurationType>
<UseDebugLibraries>
false
</UseDebugLibraries>
<PlatformToolset>
v142
</PlatformToolset>
<WholeProgramOptimization>
true
</WholeProgramOptimization>
<CharacterSet>
Unicode
</CharacterSet>
</PropertyGroup>
<Import
Project=
"$(VCTargetsPath)\Microsoft.Cpp.props"
/>
<ImportGroup
Label=
"ExtensionSettings"
>
</ImportGroup>
<ImportGroup
Label=
"Shared"
>
</ImportGroup>
<ImportGroup
Label=
"PropertySheets"
Condition=
"'$(Configuration)|$(Platform)'=='Debug|Win32'"
>
<Import
Project=
"$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"
Condition=
"exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')"
Label=
"LocalAppDataPlatform"
/>
</ImportGroup>
<ImportGroup
Label=
"PropertySheets"
Condition=
"'$(Configuration)|$(Platform)'=='Release|Win32'"
>
<Import
Project=
"$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"
Condition=
"exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')"
Label=
"LocalAppDataPlatform"
/>
</ImportGroup>
<ImportGroup
Label=
"PropertySheets"
Condition=
"'$(Configuration)|$(Platform)'=='Debug|x64'"
>
<Import
Project=
"$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"
Condition=
"exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')"
Label=
"LocalAppDataPlatform"
/>
</ImportGroup>
<ImportGroup
Label=
"PropertySheets"
Condition=
"'$(Configuration)|$(Platform)'=='Release|x64'"
>
<Import
Project=
"$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"
Condition=
"exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')"
Label=
"LocalAppDataPlatform"
/>
</ImportGroup>
<PropertyGroup
Label=
"UserMacros"
/>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Debug|Win32'"
>
<LinkIncremental>
true
</LinkIncremental>
<TargetName>
$(ProjectName)
</TargetName>
</PropertyGroup>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Release|Win32'"
>
<LinkIncremental>
false
</LinkIncremental>
<TargetName>
$(ProjectName)
</TargetName>
</PropertyGroup>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Debug|x64'"
>
<LinkIncremental>
true
</LinkIncremental>
</PropertyGroup>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Release|x64'"
>
<LinkIncremental>
false
</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup
Condition=
"'$(Configuration)|$(Platform)'=='Debug|Win32'"
>
<ClCompile>
<WarningLevel>
Level3
</WarningLevel>
<SDLCheck>
true
</SDLCheck>
<PreprocessorDefinitions>
WIN32;_DEBUG;MYWECHATROBOT_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<ConformanceMode>
true
</ConformanceMode>
<PrecompiledHeader>
Use
</PrecompiledHeader>
<PrecompiledHeaderFile>
pch.h
</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>
Windows
</SubSystem>
<GenerateDebugInformation>
true
</GenerateDebugInformation>
<EnableUAC>
false
</EnableUAC>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup
Condition=
"'$(Configuration)|$(Platform)'=='Release|Win32'"
>
<ClCompile>
<WarningLevel>
Level3
</WarningLevel>
<FunctionLevelLinking>
true
</FunctionLevelLinking>
<IntrinsicFunctions>
true
</IntrinsicFunctions>
<SDLCheck>
true
</SDLCheck>
<PreprocessorDefinitions>
WIN32;NDEBUG;MYWECHATROBOT_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<ConformanceMode>
true
</ConformanceMode>
<PrecompiledHeader>
Use
</PrecompiledHeader>
<PrecompiledHeaderFile>
pch.h
</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>
Windows
</SubSystem>
<EnableCOMDATFolding>
true
</EnableCOMDATFolding>
<OptimizeReferences>
true
</OptimizeReferences>
<GenerateDebugInformation>
true
</GenerateDebugInformation>
<EnableUAC>
false
</EnableUAC>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup
Condition=
"'$(Configuration)|$(Platform)'=='Debug|x64'"
>
<ClCompile>
<WarningLevel>
Level3
</WarningLevel>
<SDLCheck>
true
</SDLCheck>
<PreprocessorDefinitions>
_DEBUG;MYWECHATROBOT_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<ConformanceMode>
true
</ConformanceMode>
<PrecompiledHeader>
Use
</PrecompiledHeader>
<PrecompiledHeaderFile>
pch.h
</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>
Windows
</SubSystem>
<GenerateDebugInformation>
true
</GenerateDebugInformation>
<EnableUAC>
false
</EnableUAC>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup
Condition=
"'$(Configuration)|$(Platform)'=='Release|x64'"
>
<ClCompile>
<WarningLevel>
Level3
</WarningLevel>
<FunctionLevelLinking>
true
</FunctionLevelLinking>
<IntrinsicFunctions>
true
</IntrinsicFunctions>
<SDLCheck>
true
</SDLCheck>
<PreprocessorDefinitions>
NDEBUG;MYWECHATROBOT_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<ConformanceMode>
true
</ConformanceMode>
<PrecompiledHeader>
Use
</PrecompiledHeader>
<PrecompiledHeaderFile>
pch.h
</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>
Windows
</SubSystem>
<EnableCOMDATFolding>
true
</EnableCOMDATFolding>
<OptimizeReferences>
true
</OptimizeReferences>
<GenerateDebugInformation>
true
</GenerateDebugInformation>
<EnableUAC>
false
</EnableUAC>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude
Include=
"framework.h"
/>
<ClInclude
Include=
"FriendList.h"
/>
<ClInclude
Include=
"pch.h"
/>
<ClInclude
Include=
"SelfInfo.h"
/>
<ClInclude
Include=
"SendArticle.h"
/>
<ClInclude
Include=
"SendCard.h"
/>
<ClInclude
Include=
"SendFile.h"
/>
<ClInclude
Include=
"SendImage.h"
/>
<ClInclude
Include=
"SendText.h"
/>
<ClInclude
Include=
"UserInfo.h"
/>
</ItemGroup>
<ItemGroup>
<ClCompile
Include=
"dllmain.cpp"
/>
<ClCompile
Include=
"FriendList.cpp"
/>
<ClCompile
Include=
"pch.cpp"
>
<PrecompiledHeader
Condition=
"'$(Configuration)|$(Platform)'=='Debug|Win32'"
>
Create
</PrecompiledHeader>
<PrecompiledHeader
Condition=
"'$(Configuration)|$(Platform)'=='Debug|x64'"
>
Create
</PrecompiledHeader>
<PrecompiledHeader
Condition=
"'$(Configuration)|$(Platform)'=='Release|Win32'"
>
Create
</PrecompiledHeader>
<PrecompiledHeader
Condition=
"'$(Configuration)|$(Platform)'=='Release|x64'"
>
Create
</PrecompiledHeader>
</ClCompile>
<ClCompile
Include=
"SelfInfo.cpp"
/>
<ClCompile
Include=
"SendArticle.cpp"
/>
<ClCompile
Include=
"SendCard.cpp"
/>
<ClCompile
Include=
"SendFile.cpp"
/>
<ClCompile
Include=
"SendImage.cpp"
/>
<ClCompile
Include=
"SendText.cpp"
/>
<ClCompile
Include=
"UserInfo.cpp"
/>
</ItemGroup>
<Import
Project=
"$(VCTargetsPath)\Microsoft.Cpp.targets"
/>
<ImportGroup
Label=
"ExtensionTargets"
>
</ImportGroup>
</Project>
\ No newline at end of file
DWeChatRobot
_3.6.0.18/DWeChatRobot_3.6.0.18
.vcxproj.filters
→
DWeChatRobot
/DWeChatRobot
.vcxproj.filters
浏览文件 @
75dd8408
<?xml version="1.0" encoding="utf-8"?>
<Project
ToolsVersion=
"4.0"
xmlns=
"http://schemas.microsoft.com/developer/msbuild/2003"
>
<ItemGroup>
<Filter
Include=
"资源文件"
>
<UniqueIdentifier>
{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
</UniqueIdentifier>
<Extensions>
rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
</Extensions>
</Filter>
<Filter
Include=
"通用标头"
>
<UniqueIdentifier>
{93995380-89BD-4b04-88EB-625FBE52EBFB}
</UniqueIdentifier>
<Extensions>
h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd
</Extensions>
</Filter>
<Filter
Include=
"通用函数"
>
<UniqueIdentifier>
{4FC737F1-C7A5-4376-A066-2A32D752A2FF}
</UniqueIdentifier>
<Extensions>
cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx
</Extensions>
</Filter>
<Filter
Include=
"发送消息"
>
<UniqueIdentifier>
{b1463ca2-6055-4c67-8c42-6319a6171dd2}
</UniqueIdentifier>
</Filter>
<Filter
Include=
"发送消息\发送图片"
>
<UniqueIdentifier>
{b22823ee-f629-4e0a-8358-da017f0e5c3a}
</UniqueIdentifier>
</Filter>
<Filter
Include=
"发送消息\发送文本"
>
<UniqueIdentifier>
{912e6334-b078-4ba6-813c-66d0de3ee123}
</UniqueIdentifier>
</Filter>
<Filter
Include=
"发送消息\发送文件"
>
<UniqueIdentifier>
{069b8c09-e473-4bba-a49e-571f35f2efef}
</UniqueIdentifier>
</Filter>
<Filter
Include=
"自动功能"
>
<UniqueIdentifier>
{25f77de8-b12c-4f2b-a3ac-0260b6a16897}
</UniqueIdentifier>
</Filter>
<Filter
Include=
"好友相关"
>
<UniqueIdentifier>
{8ad1ff87-550b-4942-8ebd-afbe1cfaddc9}
</UniqueIdentifier>
</Filter>
<Filter
Include=
"好友相关\好友列表"
>
<UniqueIdentifier>
{24dc11dd-cb6a-4c63-bf21-35823cd389ab}
</UniqueIdentifier>
</Filter>
<Filter
Include=
"好友相关\好友信息"
>
<UniqueIdentifier>
{564cc9ef-a939-4bfd-a420-a08b3072d198}
</UniqueIdentifier>
</Filter>
<Filter
Include=
"个人信息"
>
<UniqueIdentifier>
{722c02ee-dda5-4a6a-9443-f1ed3c112709}
</UniqueIdentifier>
</Filter>
<Filter
Include=
"发送消息\发送文章"
>
<UniqueIdentifier>
{edd6e39f-235b-4db5-aea1-ec2c8d0072c5}
</UniqueIdentifier>
</Filter>
<Filter
Include=
"发送消息\发送名片"
>
<UniqueIdentifier>
{fc747a68-6314-4f23-92de-a1e55275a01e}
</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude
Include=
"framework.h"
>
<Filter>
通用标头
</Filter>
</ClInclude>
<ClInclude
Include=
"pch.h"
>
<Filter>
通用标头
</Filter>
</ClInclude>
<ClInclude
Include=
"SendImage.h"
>
<Filter>
发送消息\发送图片
</Filter>
</ClInclude>
<ClInclude
Include=
"SendText.h"
>
<Filter>
发送消息\发送文本
</Filter>
</ClInclude>
<ClInclude
Include=
"SendFile.h"
>
<Filter>
发送消息\发送文件
</Filter>
</ClInclude>
<ClInclude
Include=
"FriendList.h"
>
<Filter>
好友相关\好友列表
</Filter>
</ClInclude>
<ClInclude
Include=
"UserInfo.h"
>
<Filter>
好友相关\好友信息
</Filter>
</ClInclude>
<ClInclude
Include=
"SelfInfo.h"
>
<Filter>
个人信息
</Filter>
</ClInclude>
<ClInclude
Include=
"SendArticle.h"
>
<Filter>
发送消息\发送文章
</Filter>
</ClInclude>
<ClInclude
Include=
"SendCard.h"
>
<Filter>
发送消息\发送名片
</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile
Include=
"dllmain.cpp"
>
<Filter>
通用函数
</Filter>
</ClCompile>
<ClCompile
Include=
"pch.cpp"
>
<Filter>
通用函数
</Filter>
</ClCompile>
<ClCompile
Include=
"SendImage.cpp"
>
<Filter>
发送消息\发送图片
</Filter>
</ClCompile>
<ClCompile
Include=
"SendText.cpp"
>
<Filter>
发送消息\发送文本
</Filter>
</ClCompile>
<ClCompile
Include=
"SendFile.cpp"
>
<Filter>
发送消息\发送文件
</Filter>
</ClCompile>
<ClCompile
Include=
"FriendList.cpp"
>
<Filter>
好友相关\好友列表
</Filter>
</ClCompile>
<ClCompile
Include=
"UserInfo.cpp"
>
<Filter>
好友相关\好友信息
</Filter>
</ClCompile>
<ClCompile
Include=
"SelfInfo.cpp"
>
<Filter>
个人信息
</Filter>
</ClCompile>
<ClCompile
Include=
"SendArticle.cpp"
>
<Filter>
发送消息\发送文章
</Filter>
</ClCompile>
<ClCompile
Include=
"SendCard.cpp"
>
<Filter>
发送消息\发送名片
</Filter>
</ClCompile>
</ItemGroup>
<?xml version="1.0" encoding="utf-8"?>
<Project
ToolsVersion=
"4.0"
xmlns=
"http://schemas.microsoft.com/developer/msbuild/2003"
>
<ItemGroup>
<Filter
Include=
"资源文件"
>
<UniqueIdentifier>
{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
</UniqueIdentifier>
<Extensions>
rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
</Extensions>
</Filter>
<Filter
Include=
"通用标头"
>
<UniqueIdentifier>
{93995380-89BD-4b04-88EB-625FBE52EBFB}
</UniqueIdentifier>
<Extensions>
h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd
</Extensions>
</Filter>
<Filter
Include=
"通用函数"
>
<UniqueIdentifier>
{4FC737F1-C7A5-4376-A066-2A32D752A2FF}
</UniqueIdentifier>
<Extensions>
cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx
</Extensions>
</Filter>
<Filter
Include=
"发送消息"
>
<UniqueIdentifier>
{b1463ca2-6055-4c67-8c42-6319a6171dd2}
</UniqueIdentifier>
</Filter>
<Filter
Include=
"发送消息\发送图片"
>
<UniqueIdentifier>
{b22823ee-f629-4e0a-8358-da017f0e5c3a}
</UniqueIdentifier>
</Filter>
<Filter
Include=
"发送消息\发送文本"
>
<UniqueIdentifier>
{912e6334-b078-4ba6-813c-66d0de3ee123}
</UniqueIdentifier>
</Filter>
<Filter
Include=
"发送消息\发送文件"
>
<UniqueIdentifier>
{069b8c09-e473-4bba-a49e-571f35f2efef}
</UniqueIdentifier>
</Filter>
<Filter
Include=
"自动功能"
>
<UniqueIdentifier>
{25f77de8-b12c-4f2b-a3ac-0260b6a16897}
</UniqueIdentifier>
</Filter>
<Filter
Include=
"好友相关"
>
<UniqueIdentifier>
{8ad1ff87-550b-4942-8ebd-afbe1cfaddc9}
</UniqueIdentifier>
</Filter>
<Filter
Include=
"好友相关\好友列表"
>
<UniqueIdentifier>
{24dc11dd-cb6a-4c63-bf21-35823cd389ab}
</UniqueIdentifier>
</Filter>
<Filter
Include=
"好友相关\好友信息"
>
<UniqueIdentifier>
{564cc9ef-a939-4bfd-a420-a08b3072d198}
</UniqueIdentifier>
</Filter>
<Filter
Include=
"个人信息"
>
<UniqueIdentifier>
{722c02ee-dda5-4a6a-9443-f1ed3c112709}
</UniqueIdentifier>
</Filter>
<Filter
Include=
"发送消息\发送文章"
>
<UniqueIdentifier>
{edd6e39f-235b-4db5-aea1-ec2c8d0072c5}
</UniqueIdentifier>
</Filter>
<Filter
Include=
"发送消息\发送名片"
>
<UniqueIdentifier>
{fc747a68-6314-4f23-92de-a1e55275a01e}
</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude
Include=
"framework.h"
>
<Filter>
通用标头
</Filter>
</ClInclude>
<ClInclude
Include=
"pch.h"
>
<Filter>
通用标头
</Filter>
</ClInclude>
<ClInclude
Include=
"SendImage.h"
>
<Filter>
发送消息\发送图片
</Filter>
</ClInclude>
<ClInclude
Include=
"SendText.h"
>
<Filter>
发送消息\发送文本
</Filter>
</ClInclude>
<ClInclude
Include=
"SendFile.h"
>
<Filter>
发送消息\发送文件
</Filter>
</ClInclude>
<ClInclude
Include=
"FriendList.h"
>
<Filter>
好友相关\好友列表
</Filter>
</ClInclude>
<ClInclude
Include=
"UserInfo.h"
>
<Filter>
好友相关\好友信息
</Filter>
</ClInclude>
<ClInclude
Include=
"SelfInfo.h"
>
<Filter>
个人信息
</Filter>
</ClInclude>
<ClInclude
Include=
"SendArticle.h"
>
<Filter>
发送消息\发送文章
</Filter>
</ClInclude>
<ClInclude
Include=
"SendCard.h"
>
<Filter>
发送消息\发送名片
</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile
Include=
"dllmain.cpp"
>
<Filter>
通用函数
</Filter>
</ClCompile>
<ClCompile
Include=
"pch.cpp"
>
<Filter>
通用函数
</Filter>
</ClCompile>
<ClCompile
Include=
"SendImage.cpp"
>
<Filter>
发送消息\发送图片
</Filter>
</ClCompile>
<ClCompile
Include=
"SendText.cpp"
>
<Filter>
发送消息\发送文本
</Filter>
</ClCompile>
<ClCompile
Include=
"SendFile.cpp"
>
<Filter>
发送消息\发送文件
</Filter>
</ClCompile>
<ClCompile
Include=
"FriendList.cpp"
>
<Filter>
好友相关\好友列表
</Filter>
</ClCompile>
<ClCompile
Include=
"UserInfo.cpp"
>
<Filter>
好友相关\好友信息
</Filter>
</ClCompile>
<ClCompile
Include=
"SelfInfo.cpp"
>
<Filter>
个人信息
</Filter>
</ClCompile>
<ClCompile
Include=
"SendArticle.cpp"
>
<Filter>
发送消息\发送文章
</Filter>
</ClCompile>
<ClCompile
Include=
"SendCard.cpp"
>
<Filter>
发送消息\发送名片
</Filter>
</ClCompile>
</ItemGroup>
</Project>
\ No newline at end of file
DWeChatRobot
_3.6.0.18/DWeChatRobot_3.6.0.18
.vcxproj.user
→
DWeChatRobot
/DWeChatRobot
.vcxproj.user
浏览文件 @
75dd8408
<?xml version="1.0" encoding="utf-8"?>
<Project
ToolsVersion=
"Current"
xmlns=
"http://schemas.microsoft.com/developer/msbuild/2003"
>
<PropertyGroup
/>
<?xml version="1.0" encoding="utf-8"?>
<Project
ToolsVersion=
"Current"
xmlns=
"http://schemas.microsoft.com/developer/msbuild/2003"
>
<PropertyGroup
/>
</Project>
\ No newline at end of file
DWeChatRobot
_3.6.0.18
/FriendList.cpp
→
DWeChatRobot/FriendList.cpp
浏览文件 @
75dd8408
#include "pch.h"
#include <vector>
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
<
WxFriendStructW
>
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
;
}
}
#include "pch.h"
#include <vector>
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
<
WxFriendStructW
>
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
DWeChatRobot
_3.5.0.46
/FriendList.h
→
DWeChatRobot/FriendList.h
浏览文件 @
75dd8408
#pragma once
void
__stdcall
GetFriendList
();
extern
"C"
__declspec
(
dllexport
)
DWORD
GetFriendListRemote
();
extern
"C"
__declspec
(
dllexport
)
int
GetFriendListInit
();
#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
DWeChatRobot
_3.6.0.18
/SelfInfo.cpp
→
DWeChatRobot/SelfInfo.cpp
浏览文件 @
75dd8408
文件已移动
DWeChatRobot
_3.5.0.46
/SelfInfo.h
→
DWeChatRobot/SelfInfo.h
浏览文件 @
75dd8408
文件已移动
DWeChatRobot
_3.6.0.18
/SendArticle.cpp
→
DWeChatRobot/SendArticle.cpp
浏览文件 @
75dd8408
文件已移动
DWeChatRobot
_3.5.0.46
/SendArticle.h
→
DWeChatRobot/SendArticle.h
浏览文件 @
75dd8408
文件已移动
DWeChatRobot
_3.6.0.18
/SendCard.cpp
→
DWeChatRobot/SendCard.cpp
浏览文件 @
75dd8408
文件已移动
DWeChatRobot
_3.5.0.46
/SendCard.h
→
DWeChatRobot/SendCard.h
浏览文件 @
75dd8408
文件已移动
DWeChatRobot
_3.6.0.18
/SendFile.cpp
→
DWeChatRobot/SendFile.cpp
浏览文件 @
75dd8408
#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
;
}
#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
DWeChatRobot
_3.6.0.18
/SendFile.h
→
DWeChatRobot/SendFile.h
浏览文件 @
75dd8408
#pragma once
#include<windows.h>
void
__stdcall
SendFile
(
wchar_t
*
receiver
,
wchar_t
*
FilePath
);
#pragma once
#include<windows.h>
void
__stdcall
SendFile
(
wchar_t
*
receiver
,
wchar_t
*
FilePath
);
extern
"C"
__declspec
(
dllexport
)
void
SendFileRemote
(
LPVOID
lpParamStruct
);
\ No newline at end of file
DWeChatRobot
_3.6.0.18
/SendImage.cpp
→
DWeChatRobot/SendImage.cpp
浏览文件 @
75dd8408
#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
;
}
#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
DWeChatRobot
_3.6.0.18
/SendImage.h
→
DWeChatRobot/SendImage.h
浏览文件 @
75dd8408
#pragma once
#include<windows.h>
void
__stdcall
SendImage
(
wchar_t
*
receiver
,
wchar_t
*
ImagePath
);
#pragma once
#include<windows.h>
void
__stdcall
SendImage
(
wchar_t
*
receiver
,
wchar_t
*
ImagePath
);
extern
"C"
__declspec
(
dllexport
)
void
SendImageRemote
(
LPVOID
lpParamStruct
);
\ No newline at end of file
DWeChatRobot
_3.6.0.18
/SendText.cpp
→
DWeChatRobot/SendText.cpp
浏览文件 @
75dd8408
#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
;
}
#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
DWeChatRobot
_3.5.0.46
/SendText.h
→
DWeChatRobot/SendText.h
浏览文件 @
75dd8408
#pragma once
#include<windows.h>
void
__stdcall
SendText
(
wchar_t
*
wsWxId
,
wchar_t
*
wsTextMsg
);
#pragma once
#include<windows.h>
void
__stdcall
SendText
(
wchar_t
*
wsWxId
,
wchar_t
*
wsTextMsg
);
extern
"C"
__declspec
(
dllexport
)
void
SendTextRemote
(
LPVOID
lpParameter
);
\ No newline at end of file
DWeChatRobot
_3.6.0.18
/UserInfo.cpp
→
DWeChatRobot/UserInfo.cpp
浏览文件 @
75dd8408
#include "pch.h"
#include <typeinfo>
#include <string>
#include <vector>
#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
<
DWORD
>
InfoType
{
address
+
0x10
,
address
+
0x24
,
address
+
0x38
,
address
+
0x6C
,
address
+
0xFC
,
address
+
0x110
,
address
+
0x19C
,
address
+
0x1B0
,
address
+
0x1C4
,
address
+
0x1D8
,
address
+
0x27C
};
vector
<
wchar_t
*>
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
;
#include "pch.h"
#include <typeinfo>
#include <string>
#include <vector>
#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
<
DWORD
>
InfoType
{
address
+
0x10
,
address
+
0x24
,
address
+
0x38
,
address
+
0x6C
,
address
+
0xFC
,
address
+
0x110
,
address
+
0x19C
,
address
+
0x1B0
,
address
+
0x1C4
,
address
+
0x1D8
,
address
+
0x27C
};
vector
<
wchar_t
*>
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
DWeChatRobot
_3.6.0.18
/UserInfo.h
→
DWeChatRobot/UserInfo.h
浏览文件 @
75dd8408
#pragma once
#include<windows.h>
BOOL
__stdcall
GetUserInfoByWxId
(
wchar_t
*
wxid
);
extern
"C"
__declspec
(
dllexport
)
DWORD
GetWxUserInfoRemote
(
LPVOID
lparamter
);
#pragma once
#include<windows.h>
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
DWeChatRobot
_3.6.0.18
/dllmain.cpp
→
DWeChatRobot/dllmain.cpp
浏览文件 @
75dd8408
// 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
;
}
// 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
;
}
DWeChatRobot
_3.6.0.18
/framework.h
→
DWeChatRobot/framework.h
浏览文件 @
75dd8408
#
pragma
once
#define WIN32_LEAN_AND_MEAN // 从 Windows 头文件中排除极少使用的内容
// Windows 头文件
#include <windows.h>
#
pragma
once
#define WIN32_LEAN_AND_MEAN // 从 Windows 头文件中排除极少使用的内容
// Windows 头文件
#include <windows.h>
DWeChatRobot
_3.6.0.18
/pch.cpp
→
DWeChatRobot/pch.cpp
浏览文件 @
75dd8408
// 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
;
// 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
DWeChatRobot
_3.6.0.18
/pch.h
→
DWeChatRobot/pch.h
浏览文件 @
75dd8408
// pch.h: 这是预编译标头文件。
// 下方列出的文件仅编译一次,提高了将来生成的生成性能。
// 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。
// 但是,如果此处列出的文件中的任何一个在生成之间有更新,它们全部都将被重新编译。
// 请勿在此处添加要频繁更新的文件,这将使得性能优势无效。
#pragma once
#ifndef PCH_H
#define PCH_H
// 添加要在此处预编译的标头
#include "framework.h"
#include<windows.h>
#include<iostream>
#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
();
// pch.h: 这是预编译标头文件。
// 下方列出的文件仅编译一次,提高了将来生成的生成性能。
// 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。
// 但是,如果此处列出的文件中的任何一个在生成之间有更新,它们全部都将被重新编译。
// 请勿在此处添加要频繁更新的文件,这将使得性能优势无效。
#pragma once
#ifndef PCH_H
#define PCH_H
// 添加要在此处预编译的标头
#include "framework.h"
#include<windows.h>
#include<iostream>
#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
();
DWeChatRobot_3.5.0.46/DWeChatRobot_3.5.0.46.vcxproj
已删除
100644 → 0
浏览文件 @
6d519bed
<?xml version="1.0" encoding="utf-8"?>
<Project
DefaultTargets=
"Build"
xmlns=
"http://schemas.microsoft.com/developer/msbuild/2003"
>
<ItemGroup
Label=
"ProjectConfigurations"
>
<ProjectConfiguration
Include=
"Debug|Win32"
>
<Configuration>
Debug
</Configuration>
<Platform>
Win32
</Platform>
</ProjectConfiguration>
<ProjectConfiguration
Include=
"Release|Win32"
>
<Configuration>
Release
</Configuration>
<Platform>
Win32
</Platform>
</ProjectConfiguration>
<ProjectConfiguration
Include=
"Debug|x64"
>
<Configuration>
Debug
</Configuration>
<Platform>
x64
</Platform>
</ProjectConfiguration>
<ProjectConfiguration
Include=
"Release|x64"
>
<Configuration>
Release
</Configuration>
<Platform>
x64
</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup
Label=
"Globals"
>
<VCProjectVersion>
16.0
</VCProjectVersion>
<Keyword>
Win32Proj
</Keyword>
<ProjectGuid>
{7ede81c4-63bc-4c4f-8424-210d91034fde}
</ProjectGuid>
<RootNamespace>
MyWeChatRobot
</RootNamespace>
<WindowsTargetPlatformVersion>
10.0
</WindowsTargetPlatformVersion>
<ProjectName>
DWeChatRobot_3.5.0.46
</ProjectName>
</PropertyGroup>
<Import
Project=
"$(VCTargetsPath)\Microsoft.Cpp.Default.props"
/>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Debug|Win32'"
Label=
"Configuration"
>
<ConfigurationType>
DynamicLibrary
</ConfigurationType>
<UseDebugLibraries>
true
</UseDebugLibraries>
<PlatformToolset>
v142
</PlatformToolset>
<CharacterSet>
Unicode
</CharacterSet>
</PropertyGroup>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Release|Win32'"
Label=
"Configuration"
>
<ConfigurationType>
DynamicLibrary
</ConfigurationType>
<UseDebugLibraries>
false
</UseDebugLibraries>
<PlatformToolset>
v142
</PlatformToolset>
<WholeProgramOptimization>
true
</WholeProgramOptimization>
<CharacterSet>
Unicode
</CharacterSet>
</PropertyGroup>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Debug|x64'"
Label=
"Configuration"
>
<ConfigurationType>
DynamicLibrary
</ConfigurationType>
<UseDebugLibraries>
true
</UseDebugLibraries>
<PlatformToolset>
v142
</PlatformToolset>
<CharacterSet>
Unicode
</CharacterSet>
</PropertyGroup>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Release|x64'"
Label=
"Configuration"
>
<ConfigurationType>
DynamicLibrary
</ConfigurationType>
<UseDebugLibraries>
false
</UseDebugLibraries>
<PlatformToolset>
v142
</PlatformToolset>
<WholeProgramOptimization>
true
</WholeProgramOptimization>
<CharacterSet>
Unicode
</CharacterSet>
</PropertyGroup>
<Import
Project=
"$(VCTargetsPath)\Microsoft.Cpp.props"
/>
<ImportGroup
Label=
"ExtensionSettings"
>
</ImportGroup>
<ImportGroup
Label=
"Shared"
>
</ImportGroup>
<ImportGroup
Label=
"PropertySheets"
Condition=
"'$(Configuration)|$(Platform)'=='Debug|Win32'"
>
<Import
Project=
"$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"
Condition=
"exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')"
Label=
"LocalAppDataPlatform"
/>
</ImportGroup>
<ImportGroup
Label=
"PropertySheets"
Condition=
"'$(Configuration)|$(Platform)'=='Release|Win32'"
>
<Import
Project=
"$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"
Condition=
"exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')"
Label=
"LocalAppDataPlatform"
/>
</ImportGroup>
<ImportGroup
Label=
"PropertySheets"
Condition=
"'$(Configuration)|$(Platform)'=='Debug|x64'"
>
<Import
Project=
"$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"
Condition=
"exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')"
Label=
"LocalAppDataPlatform"
/>
</ImportGroup>
<ImportGroup
Label=
"PropertySheets"
Condition=
"'$(Configuration)|$(Platform)'=='Release|x64'"
>
<Import
Project=
"$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"
Condition=
"exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')"
Label=
"LocalAppDataPlatform"
/>
</ImportGroup>
<PropertyGroup
Label=
"UserMacros"
/>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Debug|Win32'"
>
<LinkIncremental>
true
</LinkIncremental>
<TargetName>
DWeChatRobot
</TargetName>
</PropertyGroup>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Release|Win32'"
>
<LinkIncremental>
false
</LinkIncremental>
<TargetName>
DWeChatRobot
</TargetName>
</PropertyGroup>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Debug|x64'"
>
<LinkIncremental>
true
</LinkIncremental>
</PropertyGroup>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Release|x64'"
>
<LinkIncremental>
false
</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup
Condition=
"'$(Configuration)|$(Platform)'=='Debug|Win32'"
>
<ClCompile>
<WarningLevel>
Level3
</WarningLevel>
<SDLCheck>
true
</SDLCheck>
<PreprocessorDefinitions>
WIN32;_DEBUG;MYWECHATROBOT_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<ConformanceMode>
true
</ConformanceMode>
<PrecompiledHeader>
Use
</PrecompiledHeader>
<PrecompiledHeaderFile>
pch.h
</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>
Windows
</SubSystem>
<GenerateDebugInformation>
true
</GenerateDebugInformation>
<EnableUAC>
false
</EnableUAC>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup
Condition=
"'$(Configuration)|$(Platform)'=='Release|Win32'"
>
<ClCompile>
<WarningLevel>
Level3
</WarningLevel>
<FunctionLevelLinking>
true
</FunctionLevelLinking>
<IntrinsicFunctions>
true
</IntrinsicFunctions>
<SDLCheck>
true
</SDLCheck>
<PreprocessorDefinitions>
WIN32;NDEBUG;MYWECHATROBOT_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<ConformanceMode>
true
</ConformanceMode>
<PrecompiledHeader>
Use
</PrecompiledHeader>
<PrecompiledHeaderFile>
pch.h
</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>
Windows
</SubSystem>
<EnableCOMDATFolding>
true
</EnableCOMDATFolding>
<OptimizeReferences>
true
</OptimizeReferences>
<GenerateDebugInformation>
true
</GenerateDebugInformation>
<EnableUAC>
false
</EnableUAC>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup
Condition=
"'$(Configuration)|$(Platform)'=='Debug|x64'"
>
<ClCompile>
<WarningLevel>
Level3
</WarningLevel>
<SDLCheck>
true
</SDLCheck>
<PreprocessorDefinitions>
_DEBUG;MYWECHATROBOT_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<ConformanceMode>
true
</ConformanceMode>
<PrecompiledHeader>
Use
</PrecompiledHeader>
<PrecompiledHeaderFile>
pch.h
</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>
Windows
</SubSystem>
<GenerateDebugInformation>
true
</GenerateDebugInformation>
<EnableUAC>
false
</EnableUAC>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup
Condition=
"'$(Configuration)|$(Platform)'=='Release|x64'"
>
<ClCompile>
<WarningLevel>
Level3
</WarningLevel>
<FunctionLevelLinking>
true
</FunctionLevelLinking>
<IntrinsicFunctions>
true
</IntrinsicFunctions>
<SDLCheck>
true
</SDLCheck>
<PreprocessorDefinitions>
NDEBUG;MYWECHATROBOT_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<ConformanceMode>
true
</ConformanceMode>
<PrecompiledHeader>
Use
</PrecompiledHeader>
<PrecompiledHeaderFile>
pch.h
</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>
Windows
</SubSystem>
<EnableCOMDATFolding>
true
</EnableCOMDATFolding>
<OptimizeReferences>
true
</OptimizeReferences>
<GenerateDebugInformation>
true
</GenerateDebugInformation>
<EnableUAC>
false
</EnableUAC>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude
Include=
"framework.h"
/>
<ClInclude
Include=
"FriendList.h"
/>
<ClInclude
Include=
"pch.h"
/>
<ClInclude
Include=
"SaveGif.h"
/>
<ClInclude
Include=
"SelfInfo.h"
/>
<ClInclude
Include=
"SendArticle.h"
/>
<ClInclude
Include=
"SendCard.h"
/>
<ClInclude
Include=
"SendFile.h"
/>
<ClInclude
Include=
"SendImage.h"
/>
<ClInclude
Include=
"SendText.h"
/>
<ClInclude
Include=
"UserInfo.h"
/>
</ItemGroup>
<ItemGroup>
<ClCompile
Include=
"dllmain.cpp"
/>
<ClCompile
Include=
"FriendList.cpp"
/>
<ClCompile
Include=
"pch.cpp"
>
<PrecompiledHeader
Condition=
"'$(Configuration)|$(Platform)'=='Debug|Win32'"
>
Create
</PrecompiledHeader>
<PrecompiledHeader
Condition=
"'$(Configuration)|$(Platform)'=='Debug|x64'"
>
Create
</PrecompiledHeader>
<PrecompiledHeader
Condition=
"'$(Configuration)|$(Platform)'=='Release|Win32'"
>
Create
</PrecompiledHeader>
<PrecompiledHeader
Condition=
"'$(Configuration)|$(Platform)'=='Release|x64'"
>
Create
</PrecompiledHeader>
</ClCompile>
<ClCompile
Include=
"SaveGif.cpp"
/>
<ClCompile
Include=
"SelfInfo.cpp"
/>
<ClCompile
Include=
"SendArticle.cpp"
/>
<ClCompile
Include=
"SendCard.cpp"
/>
<ClCompile
Include=
"SendFile.cpp"
/>
<ClCompile
Include=
"SendImage.cpp"
/>
<ClCompile
Include=
"SendText.cpp"
/>
<ClCompile
Include=
"UserInfo.cpp"
/>
</ItemGroup>
<Import
Project=
"$(VCTargetsPath)\Microsoft.Cpp.targets"
/>
<ImportGroup
Label=
"ExtensionTargets"
>
</ImportGroup>
</Project>
\ No newline at end of file
DWeChatRobot_3.5.0.46/DWeChatRobot_3.5.0.46.vcxproj.filters
已删除
100644 → 0
浏览文件 @
6d519bed
<?xml version="1.0" encoding="utf-8"?>
<Project
ToolsVersion=
"4.0"
xmlns=
"http://schemas.microsoft.com/developer/msbuild/2003"
>
<ItemGroup>
<Filter
Include=
"资源文件"
>
<UniqueIdentifier>
{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
</UniqueIdentifier>
<Extensions>
rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
</Extensions>
</Filter>
<Filter
Include=
"通用标头"
>
<UniqueIdentifier>
{93995380-89BD-4b04-88EB-625FBE52EBFB}
</UniqueIdentifier>
<Extensions>
h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd
</Extensions>
</Filter>
<Filter
Include=
"通用函数"
>
<UniqueIdentifier>
{4FC737F1-C7A5-4376-A066-2A32D752A2FF}
</UniqueIdentifier>
<Extensions>
cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx
</Extensions>
</Filter>
<Filter
Include=
"发送消息"
>
<UniqueIdentifier>
{b1463ca2-6055-4c67-8c42-6319a6171dd2}
</UniqueIdentifier>
</Filter>
<Filter
Include=
"发送消息\发送图片"
>
<UniqueIdentifier>
{b22823ee-f629-4e0a-8358-da017f0e5c3a}
</UniqueIdentifier>
</Filter>
<Filter
Include=
"发送消息\发送文本"
>
<UniqueIdentifier>
{912e6334-b078-4ba6-813c-66d0de3ee123}
</UniqueIdentifier>
</Filter>
<Filter
Include=
"发送消息\发送文件"
>
<UniqueIdentifier>
{069b8c09-e473-4bba-a49e-571f35f2efef}
</UniqueIdentifier>
</Filter>
<Filter
Include=
"自动功能"
>
<UniqueIdentifier>
{25f77de8-b12c-4f2b-a3ac-0260b6a16897}
</UniqueIdentifier>
</Filter>
<Filter
Include=
"自动功能\聊天表情"
>
<UniqueIdentifier>
{166b9e01-bc1c-4366-abcf-c14ec3fbbfb1}
</UniqueIdentifier>
</Filter>
<Filter
Include=
"好友相关"
>
<UniqueIdentifier>
{8ad1ff87-550b-4942-8ebd-afbe1cfaddc9}
</UniqueIdentifier>
</Filter>
<Filter
Include=
"好友相关\好友列表"
>
<UniqueIdentifier>
{24dc11dd-cb6a-4c63-bf21-35823cd389ab}
</UniqueIdentifier>
</Filter>
<Filter
Include=
"好友相关\好友信息"
>
<UniqueIdentifier>
{564cc9ef-a939-4bfd-a420-a08b3072d198}
</UniqueIdentifier>
</Filter>
<Filter
Include=
"个人信息"
>
<UniqueIdentifier>
{722c02ee-dda5-4a6a-9443-f1ed3c112709}
</UniqueIdentifier>
</Filter>
<Filter
Include=
"发送消息\发送文章"
>
<UniqueIdentifier>
{edd6e39f-235b-4db5-aea1-ec2c8d0072c5}
</UniqueIdentifier>
</Filter>
<Filter
Include=
"发送消息\发送名片"
>
<UniqueIdentifier>
{fc747a68-6314-4f23-92de-a1e55275a01e}
</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude
Include=
"framework.h"
>
<Filter>
通用标头
</Filter>
</ClInclude>
<ClInclude
Include=
"pch.h"
>
<Filter>
通用标头
</Filter>
</ClInclude>
<ClInclude
Include=
"SendImage.h"
>
<Filter>
发送消息\发送图片
</Filter>
</ClInclude>
<ClInclude
Include=
"SendText.h"
>
<Filter>
发送消息\发送文本
</Filter>
</ClInclude>
<ClInclude
Include=
"SendFile.h"
>
<Filter>
发送消息\发送文件
</Filter>
</ClInclude>
<ClInclude
Include=
"FriendList.h"
>
<Filter>
好友相关\好友列表
</Filter>
</ClInclude>
<ClInclude
Include=
"SaveGif.h"
>
<Filter>
自动功能\聊天表情
</Filter>
</ClInclude>
<ClInclude
Include=
"UserInfo.h"
>
<Filter>
好友相关\好友信息
</Filter>
</ClInclude>
<ClInclude
Include=
"SelfInfo.h"
>
<Filter>
个人信息
</Filter>
</ClInclude>
<ClInclude
Include=
"SendArticle.h"
>
<Filter>
发送消息\发送文章
</Filter>
</ClInclude>
<ClInclude
Include=
"SendCard.h"
>
<Filter>
发送消息\发送名片
</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile
Include=
"dllmain.cpp"
>
<Filter>
通用函数
</Filter>
</ClCompile>
<ClCompile
Include=
"pch.cpp"
>
<Filter>
通用函数
</Filter>
</ClCompile>
<ClCompile
Include=
"SendImage.cpp"
>
<Filter>
发送消息\发送图片
</Filter>
</ClCompile>
<ClCompile
Include=
"SendText.cpp"
>
<Filter>
发送消息\发送文本
</Filter>
</ClCompile>
<ClCompile
Include=
"SendFile.cpp"
>
<Filter>
发送消息\发送文件
</Filter>
</ClCompile>
<ClCompile
Include=
"FriendList.cpp"
>
<Filter>
好友相关\好友列表
</Filter>
</ClCompile>
<ClCompile
Include=
"SaveGif.cpp"
>
<Filter>
自动功能\聊天表情
</Filter>
</ClCompile>
<ClCompile
Include=
"UserInfo.cpp"
>
<Filter>
好友相关\好友信息
</Filter>
</ClCompile>
<ClCompile
Include=
"SelfInfo.cpp"
>
<Filter>
个人信息
</Filter>
</ClCompile>
<ClCompile
Include=
"SendArticle.cpp"
>
<Filter>
发送消息\发送文章
</Filter>
</ClCompile>
<ClCompile
Include=
"SendCard.cpp"
>
<Filter>
发送消息\发送名片
</Filter>
</ClCompile>
</ItemGroup>
</Project>
\ No newline at end of file
DWeChatRobot_3.5.0.46/DWeChatRobot_3.5.0.46.vcxproj.user
已删除
100644 → 0
浏览文件 @
6d519bed
<?xml version="1.0" encoding="utf-8"?>
<Project
ToolsVersion=
"Current"
xmlns=
"http://schemas.microsoft.com/developer/msbuild/2003"
>
<PropertyGroup
/>
</Project>
\ No newline at end of file
DWeChatRobot_3.5.0.46/FriendList.cpp
已删除
100644 → 0
浏览文件 @
6d519bed
#include "pch.h"
#include <vector>
using
namespace
std
;
#define LeftTreeOffset 0x21DD240
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
<
WxFriendStructW
>
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
;
__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
DWeChatRobot_3.5.0.46/SaveGif.cpp
已删除
100644 → 0
浏览文件 @
6d519bed
#include "pch.h"
#include <direct.h>
#include <io.h>
/*
Executable modules, 条目 126
基址=78BD0000
大小=02624000 (39993344.)
入口=7A0FC59D WeChatWi.<模块入口点>
名称=WeChatWi
文件版本=3.5.0.46
路径=D:\Tencent\WeChat\[3.5.0.46]\WeChatWin.dll
78FC8980 E8 FB730000 call 78FCFD80 ; 表情位置:eax-3C,大小:eax-48
*/
#define SaveGifHookOffset (0x5D9A2E83 - 0x5D5B0000)
#define NextCallOffset (0x5D9A8910 - 0x5D5B0000)
CHAR
originalRecieveCode
[
5
]
=
{
0
};
BYTE
bjmpcode
[
5
]
=
{
0
};
DWORD
SaveGifHookAddress
=
GetWeChatWinBase
()
+
SaveGifHookOffset
;
DWORD
dwReternAddress
=
GetWeChatWinBase
()
+
SaveGifHookOffset
+
5
;
DWORD
NextCallAddr
=
GetWeChatWinBase
()
+
NextCallOffset
;
bool
SaveGifHooked
=
false
;
void
__declspec
(
naked
)
ExtractExpression
()
{
__asm
{
pushad
;
push
eax
;
call
OutputExpression
;
popad
;
call
NextCallAddr
;
//跳回返回地址
jmp
dwReternAddress
;
}
}
void
HookExtractExpression
()
{
HookAnyAddress
(
SaveGifHookAddress
,
ExtractExpression
,
originalRecieveCode
);
SaveGifHooked
=
true
;
}
void
CreateDir
(
const
char
*
dir
)
{
int
m
=
0
,
n
;
string
str1
,
str2
;
str1
=
dir
;
str2
=
str1
.
substr
(
0
,
2
);
str1
=
str1
.
substr
(
3
,
str1
.
size
());
while
(
m
>=
0
)
{
m
=
str1
.
find
(
'\\'
);
str2
+=
'\\'
+
str1
.
substr
(
0
,
m
);
n
=
_access
(
str2
.
c_str
(),
0
);
//判断该目录是否存在
if
(
n
==
-
1
)
{
int
status
=
_mkdir
(
str2
.
c_str
());
//创建目录
}
str1
=
str1
.
substr
(
m
+
1
,
str1
.
size
());
}
}
void
CreateFileWithCurrentTime
(
char
*
filedir
,
char
*
filepostfix
,
DWORD
filedata
,
DWORD
filedatalen
)
{
//获取当前时间作为文件名
time_t
rawtime
;
struct
tm
*
ptminfo
=
new
struct
tm
;
time
(
&
rawtime
);
localtime_s
(
ptminfo
,
&
rawtime
);
char
currenttime
[
30
]
=
{
0
};
sprintf_s
(
currenttime
,
"%02d%02d%02d%02d%02d%02d"
,
ptminfo
->
tm_year
+
1900
,
ptminfo
->
tm_mon
+
1
,
ptminfo
->
tm_mday
,
ptminfo
->
tm_hour
,
ptminfo
->
tm_min
,
ptminfo
->
tm_sec
);
//拼接完整的路径
char
filepath
[
MAX_PATH
]
=
{
0
};
sprintf_s
(
filepath
,
"%s%s%s"
,
filedir
,
currenttime
,
filepostfix
);
//创建文件
HANDLE
hFile
=
CreateFileA
(
filepath
,
GENERIC_ALL
,
0
,
NULL
,
CREATE_ALWAYS
,
FILE_ATTRIBUTE_NORMAL
,
NULL
);
if
(
hFile
==
INVALID_HANDLE_VALUE
)
{
MessageBoxA
(
NULL
,
"创建文件失败"
,
"错误"
,
0
);
return
;
}
//写入文件
DWORD
dwWrite
=
0
;
WriteFile
(
hFile
,
(
LPCVOID
)
filedata
,
filedatalen
,
&
dwWrite
,
0
);
//关闭句柄
CloseHandle
(
hFile
);
}
void
__stdcall
OutputExpression
(
DWORD
dwExpressionAddr
)
{
//取出图片长度
DWORD
dwImageLen
=
*
((
DWORD
*
)(
dwExpressionAddr
+
0x4
));
//取出图片内容
DWORD
dwImage
=
*
((
DWORD
*
)(
dwExpressionAddr
));
if
(
dwImageLen
==
0
)
{
return
;
}
unsigned
char
magic_head
[
4
]
=
{
0
};
char
postfix
[
5
]
=
{
0
};
memcpy
(
magic_head
,
(
void
*
)
dwImage
,
3
);
//根据MAGIC头判断后缀
if
(
magic_head
[
0
]
==
137
&&
magic_head
[
1
]
==
80
&&
magic_head
[
2
]
==
78
)
{
strcpy_s
(
postfix
,
5
,
".png"
);
}
else
if
(
magic_head
[
0
]
==
71
&&
magic_head
[
1
]
==
73
&&
magic_head
[
2
]
==
70
)
{
strcpy_s
(
postfix
,
5
,
".gif"
);
}
else
if
(
magic_head
[
0
]
==
255
&&
magic_head
[
1
]
==
216
&&
magic_head
[
2
]
==
255
)
{
strcpy_s
(
postfix
,
5
,
".jpg"
);
}
//获取临时文件夹目录
char
temppath
[
MAX_PATH
]
=
{
0
};
GetTempPathA
(
MAX_PATH
,
temppath
);
char
imagedir
[
25
]
=
{
"WeChatRecordExpressions"
};
//拼接存放微信表情的目录
char
WeChatExpressionsPath
[
MAX_PATH
]
=
{
0
};
sprintf_s
(
WeChatExpressionsPath
,
"%s%s
\\
"
,
temppath
,
imagedir
);
//创建目录存放图片
CreateDir
(
WeChatExpressionsPath
);
//保存表情图片
CreateFileWithCurrentTime
(
WeChatExpressionsPath
,
postfix
,
dwImage
,
dwImageLen
);
}
void
UnHookExtractExpression
()
{
// 回复被覆盖的指令
if
(
!
SaveGifHooked
)
return
;
UnHookAnyAddress
(
SaveGifHookAddress
,
originalRecieveCode
);
PostMessage
(
HWND_BROADCAST
,
NULL
,
0
,
0
);
SaveGifHooked
=
false
;
}
\ No newline at end of file
DWeChatRobot_3.5.0.46/SaveGif.h
已删除
100644 → 0
浏览文件 @
6d519bed
#pragma once
#include <windows.h>
extern
"C"
__declspec
(
dllexport
)
void
HookExtractExpression
();
void
__stdcall
OutputExpression
(
DWORD
dwExpressionAddr
);
void
UnHookExtractExpression
();
\ No newline at end of file
DWeChatRobot_3.5.0.46/SelfInfo.cpp
已删除
100644 → 0
浏览文件 @
6d519bed
#include "pch.h"
#include <vector>
wstring
selfinfo
=
L""
;
struct
SelfInfoStruct
{
DWORD
message
;
DWORD
length
;
}
ret
;
// дBUG
DWORD
GetSelfInfoRemote
()
{
DWORD
WeChatWinBase
=
GetWeChatWinBase
();
/*vector<DWORD> SelfInfoAddr = {
*(DWORD*)(WeChatWinBase + 0x21DC9C4),
WeChatWinBase + 0x21DCBB8,
*(DWORD*)(WeChatWinBase + 0x21DCA3C),
*(DWORD*)(WeChatWinBase + 0x21DCB74),
*(DWORD*)(WeChatWinBase + 0x21DCD34),
*(DWORD*)(WeChatWinBase + 0x21DCD1C),
WeChatWinBase + 0x21DCC30,
WeChatWinBase + 0x21DCB44,
WeChatWinBase + 0x21DCB5C,
WeChatWinBase + 0x21DCA70
};*/
vector
<
DWORD
>
SelfInfoAddr
=
{
*
(
DWORD
*
)(
WeChatWinBase
+
0x21DC9C4
),
WeChatWinBase
+
0x21DCBB8
,
WeChatWinBase
+
0x21DCA3C
,
*
(
DWORD
*
)(
WeChatWinBase
+
0x21DCB74
),
*
(
DWORD
*
)(
WeChatWinBase
+
0x21DCD34
),
*
(
DWORD
*
)(
WeChatWinBase
+
0x21DCD1C
),
WeChatWinBase
+
0x21DCC30
,
WeChatWinBase
+
0x21DCB44
,
WeChatWinBase
+
0x21DCB5C
,
WeChatWinBase
+
0x21DCA70
};
vector
<
wstring
>
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
DWeChatRobot_3.5.0.46/SendArticle.cpp
已删除
100644 → 0
浏览文件 @
6d519bed
#include "pch.h"
#define SendArticleCall1Offset 0x5BC68E80 - 0x5BBE0000
#define SendArticleCall2Offset 0x03297840 - 0x02F20000
#define SendArticleCall3Offset 0x5BC9C570 - 0x5BBE0000
#define SendArticleCall4Offset 0x5BF57A10 - 0x5BBE0000
#define SendArticleParamOffset 0x5DDCCD1C - 0x5BBE0000
#define SendArticleClearCacheCall1Offset 0x5C1F40D0 - 0x5BBE0000
#define SendArticleClearCacheCall2Offset 0x59637BA0 - 0x595B0000
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
+
0x21DC9C4
));
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"<msg>
\n
<fromusername>%ws</fromusername>
\n
<scene>0</scene>
\n
<commenturl></commenturl>
\n
<appmsg appid=
\"\"
sdkver=
\"
0
\"
>
\n
<title>%ws</title>
\n
<des>%ws</des>
\n
<action>view</action>
\n
<type>5</type>
\n
<showtype>0</showtype>
\n
<content></content>
\n
<url>%ws</url>
\n
<dataurl></dataurl>
\n
<lowurl></lowurl>
\n
<lowdataurl></lowdataurl>
\n
<recorditem>
\n
<![CDATA[]]>
\n
</recorditem>
\n
<thumburl></thumburl>
\n
<messageaction></messageaction>
\n
<extinfo></extinfo>
\n
<sourceusername></sourceusername>
\n
<sourcedisplayname></sourcedisplayname>
\n
<commenturl></commenturl>
\n
<appattach>
\n
<totallen>0</totallen>
\n
<attachid></attachid>
\n
<emoticonmd5></emoticonmd5>
\n
<fileext></fileext>
\n
<aeskey></aeskey>
\n
</appattach>
\n
<weappinfo>
\n
<pagepath></pagepath>
\n
<username></username>
\n
<appid></appid>
\n
<appservicetype>0</appservicetype>
\n
</weappinfo>
\n
<websearch />
\n
</appmsg>
\n
<appinfo>
\n
<version>1</version>
\n
<appname>Window wechat</appname>
\n
</appinfo>
\n
</msg>"
,
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
[
0xF70
]
=
{
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
DWeChatRobot_3.5.0.46/SendCard.cpp
已删除
100644 → 0
浏览文件 @
6d519bed
#include "pch.h"
#define SendCardCallOffset 0x5BDCBC80 - 0x05B930000
#define DeleteCardCacheCallOffset 0x5B9B7BA0 - 0x05B930000
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"<?xml version=
\"
1.0
\"
?><msg bigheadimgurl=
\"\"
smallheadimgurl=
\"\"
username=
\"
%ws
\"
nickname=
\"
%ws
\"
fullpy=
\"
?
\"
shortpy=
\"\"
alias=
\"
%ws
\"
imagestatus=
\"
3
\"
scene=
\"
17
\"
province=
\"\"
city=
\"
й
\"
sign=
\"\"
sex=
\"
2
\"
certflag=
\"
0
\"
certinfo=
\"\"
brandIconUrl=
\"\"
brandHomeUrl=
\"\"
brandSubscriptConfigUrl=
\"\"
brandFlags=
\"
0
\"
regionCode=
\"
CN_BeiJing_BeiJing
\"
/>"
,
sharedwxid
,
nickname
,
sharedwxid
);
WxBaseStruct
pReceiver
(
receiver
);
WxBaseStruct
pXml
(
xml
);
char
buffer
[
0x2C0
]
=
{
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
DWeChatRobot_3.5.0.46/SendFile.cpp
已删除
100644 → 0
浏览文件 @
6d519bed
#include "pch.h"
#define WxSendFileCall1Offset (0x0FD68420 - 0x0F690000)
#define WxSendFileCall2Offset (0x11064BE3 - 0x0F690000)
#define WxSendFileCall3Offset (0x110633DA - 0x0F690000)
#define WxSendFileCall4Offset (0x0FA07B20 - 0x0F690000)
#define WxSendFileParamsOffset (0x5294CFF0 - 0x50770000)
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
+
WxSendFileCall1Offset
;
DWORD
WxSendFileCall2
=
WeChatWinBase
+
WxSendFileCall2Offset
;
DWORD
WxSendFileCall3
=
WeChatWinBase
+
WxSendFileCall3Offset
;
DWORD
WxSendFileCall4
=
WeChatWinBase
+
WxSendFileCall4Offset
;
DWORD
WxSendFileParams
=
WeChatWinBase
+
WxSendFileParamsOffset
;
char
buffer
[
0x3A8
]
=
{
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
0x00700000
;
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
;
popfd
;
popad
;
}
}
\ No newline at end of file
DWeChatRobot_3.5.0.46/SendFile.h
已删除
100644 → 0
浏览文件 @
6d519bed
#pragma once
#include<windows.h>
void
__stdcall
SendFile
(
wchar_t
*
receiver
,
wchar_t
*
FilePath
);
extern
"C"
__declspec
(
dllexport
)
void
SendFileRemote
(
LPVOID
lpParamStruct
);
\ No newline at end of file
DWeChatRobot_3.5.0.46/SendImage.cpp
已删除
100644 → 0
浏览文件 @
6d519bed
#include "pch.h"
/*
Executable modules, 条目 128
基址=02E50000
大小=02624000 (39993344.)
入口=0437C59D WeChatWi.<模块入口点>
名称=WeChatWi
文件版本=3.5.0.46
路径=D:\Tencent\WeChat\[3.5.0.46]\WeChatWin.dll
02FB4485 E8 D696F2FF call 02EDDB60
02FB448A 83EC 14 sub esp, 14
02FB448D 8945 B0 mov dword ptr [ebp-50], eax
02FB4490 8D46 18 lea eax, dword ptr [esi+18]
02FB4493 8BCC mov ecx, esp
02FB4495 8D7E 04 lea edi, dword ptr [esi+4] ; 图片路径
02FB4498 50 push eax
02FB4499 E8 823F5700 call 03528420
02FB449E 8B4D B0 mov ecx, dword ptr [ebp-50]
02FB44A1 8D85 7CFFFFFF lea eax, dword ptr [ebp-84]
02FB44A7 57 push edi ; 图片路径
02FB44A8 50 push eax ; 接收人wxid
02FB44A9 8D85 58FCFFFF lea eax, dword ptr [ebp-3A8]
02FB44AF 50 push eax ; 缓冲区,存放xml数据
02FB44B0 E8 DB713300 call 032EB690 ; 发送图片的CALL
*/
#define WxSendImageCall1offset (0x02EDDB60 - 0x02E50000)
#define WxSendImageCall2offset (0x03528420 - 0x02E50000)
#define WxSendImageCall3offset (0x032EB690 - 0x02E50000)
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
WxSendImageCall1
=
GetWeChatWinBase
()
+
WxSendImageCall1offset
;
DWORD
WxSendImageCall2
=
GetWeChatWinBase
()
+
WxSendImageCall2offset
;
DWORD
WxSendImageCall3
=
GetWeChatWinBase
()
+
WxSendImageCall3offset
;
char
nullbuffer
[
0x50
]
=
{
0
};
char
buffer
[
0x3A8
]
=
{
0
};
WxBaseStruct
pReceiver
(
receiver
);
WxBaseStruct
pImagePath
(
ImagePath
);
__asm
{
pushad
;
call
WxSendImageCall1
;
sub
esp
,
0x14
;
mov
dword
ptr
[
ebp
-
0x50
],
eax
;
mov
ecx
,
esp
;
lea
edi
,
pImagePath
;
push
eax
;
call
WxSendImageCall2
;
mov
ecx
,
dword
ptr
[
ebp
-
0x50
];
lea
eax
,
pReceiver
;
push
edi
;
push
eax
;
lea
eax
,
buffer
;
push
eax
;
call
WxSendImageCall3
;
popad
;
}
}
\ No newline at end of file
DWeChatRobot_3.5.0.46/SendImage.h
已删除
100644 → 0
浏览文件 @
6d519bed
#pragma once
#include<windows.h>
void
__stdcall
SendImage
(
wchar_t
*
receiver
,
wchar_t
*
ImagePath
);
extern
"C"
__declspec
(
dllexport
)
void
SendImageRemote
(
LPVOID
lpParamStruct
);
\ No newline at end of file
DWeChatRobot_3.5.0.46/SendText.cpp
已删除
100644 → 0
浏览文件 @
6d519bed
#include "pch.h"
/*
WeChatWin.dll: 0x78670000
787D42EE 8D46 38 lea eax, dword ptr [esi+38] ; 取at结构体
787D42F1 6A 01 push 1 ; 0x1
787D42F3 50 push eax ; 群消息at好友,非at消息为0
787D42F4 57 push edi ; 消息内容,[edi]
787D42F5 8D95 7CFFFFFF lea edx, dword ptr [ebp-84] ; 接收人,[edx]
787D42FB 8D8D 58FCFFFF lea ecx, dword ptr [ebp-3A8] ; 缓冲区,据说是类本身
787D4301 E8 7A793300 call 78B0BC80 ; 发送消息CALL
787D4306 83C4 0C add esp, 0C ; 平衡堆栈
*/
#define SendTextCallOffset 0x49BC80;
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
[
0x3A8
]
=
{
0
};
WxString
wxNull
=
{
0
};
DWORD
dllBaseAddress
=
GetWeChatWinBase
();
DWORD
callAddress
=
dllBaseAddress
+
SendTextCallOffset
;
__asm
{
lea
eax
,
wxNull
;
push
0x1
;
push
eax
;
mov
edi
,
pWxmsg
;
push
edi
;
lea
edx
,
wxWxid
;
lea
ecx
,
buffer
;
call
callAddress
;
add
esp
,
0xC
;
}
}
\ No newline at end of file
DWeChatRobot_3.5.0.46/UserInfo.cpp
已删除
100644 → 0
浏览文件 @
6d519bed
#include "pch.h"
#include <typeinfo>
#include <string>
#include <vector>
#define GetUserInfoCall1Offset 0x5F917490 - 0x5F230000
#define GetUserInfoCall2Offset 0x5F2BD9A0 - 0x5F230000
#define GetUserInfoCall3Offset 0x5F619F70 - 0x5F230000
#define DeleteCacheCall1Offset 0x56C349A0 - 0x56B80000
#define DeleteCacheCall2Offset 0x56D983B0 - 0x56B80000
struct
GetUserInfoStruct
{
DWORD
message
;
DWORD
length
;
};
wstring
wUserInfo
=
L""
;
GetUserInfoStruct
ret
=
{
0
};
struct
GetDetailUserInfoParamStruct
{
WxString
*
pWxString
;
DWORD
ptr1
=
0
;
DWORD
ptr2
=
0
;
char
fill
[
0x18
]
=
{
0
};
GetDetailUserInfoParamStruct
(
WxString
*
pWxString
)
{
this
->
pWxString
=
pWxString
;
ptr1
=
DWORD
(
pWxString
)
+
sizeof
(
WxString
);
ptr2
=
DWORD
(
pWxString
)
+
sizeof
(
WxString
);
}
};
struct
UserInfoBaseParamStruct
{
DWORD
data
;
DWORD
endbuffer1
;
DWORD
endbuffer2
;
char
fill
[
0x18
]
=
{
0
};
};
VOID
WxUserInfo
(
DWORD
address
)
{
vector
<
DWORD
>
InfoType
{
address
+
0x10
,
address
+
0x24
,
address
+
0x38
,
address
+
0x6C
,
address
+
0xFC
,
address
+
0x110
,
address
+
0x19C
,
address
+
0x1B0
,
address
+
0x1C4
,
address
+
0x1D8
,
address
+
0x27C
};
vector
<
wchar_t
*>
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
;
DWORD
address
=
0
;
if
(
!
GetUserInfoByWxId
(
userwxid
,
address
))
{
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
&
address
)
{
DWORD
WeChatWinBase
=
GetWeChatWinBase
();
DWORD
GetUserDetailInfoCall1
=
WeChatWinBase
+
GetUserInfoCall1Offset
;
DWORD
GetUserDetailInfoCall2
=
WeChatWinBase
+
GetUserInfoCall2Offset
;
DWORD
GetUserDetailInfoCall3
=
WeChatWinBase
+
GetUserInfoCall3Offset
;
DWORD
DeleteCacheCall1
=
WeChatWinBase
+
DeleteCacheCall1Offset
;
DWORD
DeleteCacheCall2
=
WeChatWinBase
+
DeleteCacheCall2Offset
;
WxString
*
pWxid
=
new
WxString
;
pWxid
->
buffer
=
wxid
;
pWxid
->
length
=
wcslen
(
wxid
);
pWxid
->
maxLength
=
wcslen
(
wxid
)
*
2
;
UserInfoBaseParamStruct
temp
=
{
0
};
UserInfoBaseParamStruct
userinfo
=
{
0
};
GetDetailUserInfoParamStruct
pUser
(
pWxid
);
DWORD
isSuccess
=
0
;
__asm
{
pushad
;
pushfd
;
// mov eax, 0x7;
lea
ecx
,
pUser
;
lea
edx
,
temp
;
call
GetUserDetailInfoCall1
;
call
GetUserDetailInfoCall2
;
lea
ecx
,
userinfo
;
push
ecx
;
lea
ecx
,
temp
;
push
ecx
;
mov
ecx
,
eax
;
call
GetUserDetailInfoCall3
;
mov
isSuccess
,
eax
;
popfd
;
popad
;
}
address
=
userinfo
.
data
;
if
(
isSuccess
!=
0
)
WxUserInfo
(
address
);
// 释放内存
__asm
{
pushad
;
pushfd
;
lea
ecx
,
temp
;
call
DeleteCacheCall1
;
lea
ecx
,
userinfo
;
call
DeleteCacheCall2
;
popfd
;
popad
;
}
delete
pWxid
;
pWxid
=
NULL
;
return
(
isSuccess
!=
0
);
}
// 另外一个查询好友信息的地方
BOOL
__stdcall
GetWxUserInfoByWxid2
(
wchar_t
*
wxid
,
DWORD
&
address
)
{
DWORD
WeChatWinBase
=
GetWeChatWinBase
();
DWORD
WxUserDataCall1
=
WeChatWinBase
+
0x645BD9A0
-
0x64530000
;
DWORD
WxUserDataCall2
=
WeChatWinBase
+
0x64C08420
-
0x64530000
;
DWORD
WxUserDataCall3
=
WeChatWinBase
+
0x64914260
-
0x64530000
;
char
buffer
[
0xF90
]
=
{
0
};
WxBaseStruct
pWxid
(
wxid
);
DWORD
r_ebx
=
0
;
DWORD
isSuccess
=
0
;
__asm
{
pushad
;
call
WxUserDataCall1
;
lea
ebx
,
buffer
;
mov
esi
,
eax
;
push
ebx
;
sub
esp
,
0x14
;
lea
eax
,
pWxid
;
mov
ecx
,
esp
;
push
eax
;
call
WxUserDataCall2
;
mov
ecx
,
esi
;
call
WxUserDataCall3
;
mov
r_ebx
,
ebx
;
mov
isSuccess
,
eax
;
popad
;
}
address
=
r_ebx
;
return
isSuccess
;
}
\ No newline at end of file
DWeChatRobot_3.5.0.46/UserInfo.h
已删除
100644 → 0
浏览文件 @
6d519bed
#pragma once
#include<windows.h>
BOOL
__stdcall
GetWxUserInfoByWxid2
(
wchar_t
*
wxid
,
DWORD
&
address
);
BOOL
__stdcall
GetUserInfoByWxId
(
wchar_t
*
wxid
,
DWORD
&
address
);
extern
"C"
__declspec
(
dllexport
)
DWORD
GetWxUserInfoRemote
(
LPVOID
lparamter
);
extern
"C"
__declspec
(
dllexport
)
VOID
DeleteUserInfoCacheRemote
();
\ No newline at end of file
DWeChatRobot_3.5.0.46/dllmain.cpp
已删除
100644 → 0
浏览文件 @
6d519bed
// 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
(
"HookExtractExpression 0x%08X
\n
"
,
(
DWORD
)
HookExtractExpression
);
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
;
}
DWeChatRobot_3.5.0.46/framework.h
已删除
100644 → 0
浏览文件 @
6d519bed
#
pragma
once
#define WIN32_LEAN_AND_MEAN // 从 Windows 头文件中排除极少使用的内容
// Windows 头文件
#include <windows.h>
DWeChatRobot_3.5.0.46/pch.cpp
已删除
100644 → 0
浏览文件 @
6d519bed
// 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
()
{
UnHookExtractExpression
();
}
\ No newline at end of file
DWeChatRobot_3.5.0.46/pch.h
已删除
100644 → 0
浏览文件 @
6d519bed
// pch.h: 这是预编译标头文件。
// 下方列出的文件仅编译一次,提高了将来生成的生成性能。
// 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。
// 但是,如果此处列出的文件中的任何一个在生成之间有更新,它们全部都将被重新编译。
// 请勿在此处添加要频繁更新的文件,这将使得性能优势无效。
#pragma once
#ifndef PCH_H
#define PCH_H
// 添加要在此处预编译的标头
#include "framework.h"
#include<windows.h>
#include<iostream>
#include "SendImage.h"
#include "SendText.h"
#include "SendFile.h"
#include "SendArticle.h"
#include "FriendList.h"
#include "SaveGif.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
();
DWeChatRobot_3.6.0.18/FriendList.h
已删除
100644 → 0
浏览文件 @
6d519bed
#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
DWeChatRobot_3.6.0.18/SelfInfo.h
已删除
100644 → 0
浏览文件 @
6d519bed
#pragma once
#include<windows.h>
#include<iostream>
using
namespace
std
;
extern
"C"
__declspec
(
dllexport
)
DWORD
GetSelfInfoRemote
();
extern
"C"
__declspec
(
dllexport
)
VOID
DeleteSelfInfoCacheRemote
();
\ No newline at end of file
DWeChatRobot_3.6.0.18/SendArticle.h
已删除
100644 → 0
浏览文件 @
6d519bed
#pragma once
#include<windows.h>
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
DWeChatRobot_3.6.0.18/SendCard.h
已删除
100644 → 0
浏览文件 @
6d519bed
#pragma once
#include<windows.h>
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
DWeChatRobot_3.6.0.18/SendText.h
已删除
100644 → 0
浏览文件 @
6d519bed
#pragma once
#include<windows.h>
void
__stdcall
SendText
(
wchar_t
*
wsWxId
,
wchar_t
*
wsTextMsg
);
extern
"C"
__declspec
(
dllexport
)
void
SendTextRemote
(
LPVOID
lpParameter
);
\ No newline at end of file
Release/DWeChatRobot.dll
浏览文件 @
75dd8408
无法预览此类型文件
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录