Refactoring
@ -1,7 +1,7 @@
|
|||||||
[*]
|
[*]
|
||||||
end_of_line = lf
|
end_of_line = lf
|
||||||
charset = utf-8-bom
|
charset = utf-8-bom
|
||||||
trim_trailing_whitespace = true
|
trim_trailing_whitespace = true
|
||||||
insert_final_newline = true
|
insert_final_newline = true
|
||||||
indent_style = space
|
indent_style = space
|
||||||
indent_size = 4
|
indent_size = 4
|
@ -1,49 +1,49 @@
|
|||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
# Visual Studio Version 16
|
# Visual Studio Version 16
|
||||||
VisualStudioVersion = 16.0.32802.440
|
VisualStudioVersion = 16.0.32802.440
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spy", "spy\spy.vcxproj", "{4DE80B82-5F6A-4C4C-9D16-1574308110FA}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spy", "spy\spy.vcxproj", "{4DE80B82-5F6A-4C4C-9D16-1574308110FA}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sdk", "sdk\sdk.vcxproj", "{ABFCB647-137F-478B-A73E-F0B1E3ADC215}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sdk", "sdk\sdk.vcxproj", "{ABFCB647-137F-478B-A73E-F0B1E3ADC215}"
|
||||||
ProjectSection(ProjectDependencies) = postProject
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
{4DE80B82-5F6A-4C4C-9D16-1574308110FA} = {4DE80B82-5F6A-4C4C-9D16-1574308110FA}
|
{4DE80B82-5F6A-4C4C-9D16-1574308110FA} = {4DE80B82-5F6A-4C4C-9D16-1574308110FA}
|
||||||
EndProjectSection
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "launcher", "launcher\launcher.vcxproj", "{B11ADC6F-20DA-4DEF-A8A0-60374427D4C6}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "launcher", "launcher\launcher.vcxproj", "{B11ADC6F-20DA-4DEF-A8A0-60374427D4C6}"
|
||||||
ProjectSection(ProjectDependencies) = postProject
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
{ABFCB647-137F-478B-A73E-F0B1E3ADC215} = {ABFCB647-137F-478B-A73E-F0B1E3ADC215}
|
{ABFCB647-137F-478B-A73E-F0B1E3ADC215} = {ABFCB647-137F-478B-A73E-F0B1E3ADC215}
|
||||||
EndProjectSection
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wcf", "wcf\wcf.vcxproj", "{02747CE0-AD9F-4812-B019-FCF9867F7514}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wcf", "wcf\wcf.vcxproj", "{02747CE0-AD9F-4812-B019-FCF9867F7514}"
|
||||||
ProjectSection(ProjectDependencies) = postProject
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
{4DE80B82-5F6A-4C4C-9D16-1574308110FA} = {4DE80B82-5F6A-4C4C-9D16-1574308110FA}
|
{4DE80B82-5F6A-4C4C-9D16-1574308110FA} = {4DE80B82-5F6A-4C4C-9D16-1574308110FA}
|
||||||
EndProjectSection
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|x86 = Debug|x86
|
Debug|x86 = Debug|x86
|
||||||
Release|x86 = Release|x86
|
Release|x86 = Release|x86
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{4DE80B82-5F6A-4C4C-9D16-1574308110FA}.Debug|x86.ActiveCfg = Debug|Win32
|
{4DE80B82-5F6A-4C4C-9D16-1574308110FA}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
{4DE80B82-5F6A-4C4C-9D16-1574308110FA}.Debug|x86.Build.0 = Debug|Win32
|
{4DE80B82-5F6A-4C4C-9D16-1574308110FA}.Debug|x86.Build.0 = Debug|Win32
|
||||||
{4DE80B82-5F6A-4C4C-9D16-1574308110FA}.Release|x86.ActiveCfg = Release|Win32
|
{4DE80B82-5F6A-4C4C-9D16-1574308110FA}.Release|x86.ActiveCfg = Release|Win32
|
||||||
{4DE80B82-5F6A-4C4C-9D16-1574308110FA}.Release|x86.Build.0 = Release|Win32
|
{4DE80B82-5F6A-4C4C-9D16-1574308110FA}.Release|x86.Build.0 = Release|Win32
|
||||||
{ABFCB647-137F-478B-A73E-F0B1E3ADC215}.Debug|x86.ActiveCfg = Release|Win32
|
{ABFCB647-137F-478B-A73E-F0B1E3ADC215}.Debug|x86.ActiveCfg = Release|Win32
|
||||||
{ABFCB647-137F-478B-A73E-F0B1E3ADC215}.Release|x86.ActiveCfg = Release|Win32
|
{ABFCB647-137F-478B-A73E-F0B1E3ADC215}.Release|x86.ActiveCfg = Release|Win32
|
||||||
{ABFCB647-137F-478B-A73E-F0B1E3ADC215}.Release|x86.Build.0 = Release|Win32
|
{ABFCB647-137F-478B-A73E-F0B1E3ADC215}.Release|x86.Build.0 = Release|Win32
|
||||||
{B11ADC6F-20DA-4DEF-A8A0-60374427D4C6}.Debug|x86.ActiveCfg = Release|Win32
|
{B11ADC6F-20DA-4DEF-A8A0-60374427D4C6}.Debug|x86.ActiveCfg = Release|Win32
|
||||||
{B11ADC6F-20DA-4DEF-A8A0-60374427D4C6}.Release|x86.ActiveCfg = Release|Win32
|
{B11ADC6F-20DA-4DEF-A8A0-60374427D4C6}.Release|x86.ActiveCfg = Release|Win32
|
||||||
{B11ADC6F-20DA-4DEF-A8A0-60374427D4C6}.Release|x86.Build.0 = Release|Win32
|
{B11ADC6F-20DA-4DEF-A8A0-60374427D4C6}.Release|x86.Build.0 = Release|Win32
|
||||||
{02747CE0-AD9F-4812-B019-FCF9867F7514}.Debug|x86.ActiveCfg = Release|Win32
|
{02747CE0-AD9F-4812-B019-FCF9867F7514}.Debug|x86.ActiveCfg = Release|Win32
|
||||||
{02747CE0-AD9F-4812-B019-FCF9867F7514}.Release|x86.ActiveCfg = Release|Win32
|
{02747CE0-AD9F-4812-B019-FCF9867F7514}.Release|x86.ActiveCfg = Release|Win32
|
||||||
{02747CE0-AD9F-4812-B019-FCF9867F7514}.Release|x86.Build.0 = Release|Win32
|
{02747CE0-AD9F-4812-B019-FCF9867F7514}.Release|x86.Build.0 = Release|Win32
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
SolutionGuid = {76A678AA-570C-4CB7-B58F-3B2C170ACAC0}
|
SolutionGuid = {76A678AA-570C-4CB7-B58F-3B2C170ACAC0}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
EndGlobal
|
EndGlobal
|
Before Width: | Height: | Size: 170 KiB After Width: | Height: | Size: 170 KiB |
BIN
WeChatFerry/launcher/launcher.rc
Normal file
@ -1,191 +1,191 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<ItemGroup Label="ProjectConfigurations">
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
<ProjectConfiguration Include="Debug|Win32">
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
<Configuration>Debug</Configuration>
|
<Configuration>Debug</Configuration>
|
||||||
<Platform>Win32</Platform>
|
<Platform>Win32</Platform>
|
||||||
</ProjectConfiguration>
|
</ProjectConfiguration>
|
||||||
<ProjectConfiguration Include="Release|Win32">
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
<Configuration>Release</Configuration>
|
<Configuration>Release</Configuration>
|
||||||
<Platform>Win32</Platform>
|
<Platform>Win32</Platform>
|
||||||
</ProjectConfiguration>
|
</ProjectConfiguration>
|
||||||
<ProjectConfiguration Include="Debug|x64">
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
<Configuration>Debug</Configuration>
|
<Configuration>Debug</Configuration>
|
||||||
<Platform>x64</Platform>
|
<Platform>x64</Platform>
|
||||||
</ProjectConfiguration>
|
</ProjectConfiguration>
|
||||||
<ProjectConfiguration Include="Release|x64">
|
<ProjectConfiguration Include="Release|x64">
|
||||||
<Configuration>Release</Configuration>
|
<Configuration>Release</Configuration>
|
||||||
<Platform>x64</Platform>
|
<Platform>x64</Platform>
|
||||||
</ProjectConfiguration>
|
</ProjectConfiguration>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<VCProjectVersion>16.0</VCProjectVersion>
|
<VCProjectVersion>16.0</VCProjectVersion>
|
||||||
<Keyword>Win32Proj</Keyword>
|
<Keyword>Win32Proj</Keyword>
|
||||||
<ProjectGuid>{abfcb647-137f-478b-a73e-f0b1e3adc215}</ProjectGuid>
|
<ProjectGuid>{abfcb647-137f-478b-a73e-f0b1e3adc215}</ProjectGuid>
|
||||||
<RootNamespace>sdk</RootNamespace>
|
<RootNamespace>sdk</RootNamespace>
|
||||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>true</UseDebugLibraries>
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
<PlatformToolset>v142</PlatformToolset>
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>false</UseDebugLibraries>
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
<PlatformToolset>v142</PlatformToolset>
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>true</UseDebugLibraries>
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
<PlatformToolset>v142</PlatformToolset>
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>false</UseDebugLibraries>
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
<PlatformToolset>v142</PlatformToolset>
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
<ImportGroup Label="ExtensionSettings">
|
<ImportGroup Label="ExtensionSettings">
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<ImportGroup Label="Shared">
|
<ImportGroup Label="Shared">
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<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" />
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<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" />
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
<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" />
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
<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" />
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup Label="UserMacros" />
|
<PropertyGroup Label="UserMacros" />
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<LinkIncremental>true</LinkIncremental>
|
<LinkIncremental>true</LinkIncremental>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<LinkIncremental>false</LinkIncremental>
|
<LinkIncremental>false</LinkIncremental>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
<LinkIncremental>true</LinkIncremental>
|
<LinkIncremental>true</LinkIncremental>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
<LinkIncremental>false</LinkIncremental>
|
<LinkIncremental>false</LinkIncremental>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<VcpkgUseStatic>true</VcpkgUseStatic>
|
<VcpkgUseStatic>true</VcpkgUseStatic>
|
||||||
<VcpkgTriplet>x86-windows-static</VcpkgTriplet>
|
<VcpkgTriplet>x86-windows-static</VcpkgTriplet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;SDK_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;SDK_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<EnableUAC>false</EnableUAC>
|
<EnableUAC>false</EnableUAC>
|
||||||
<ModuleDefinitionFile>sdk.def</ModuleDefinitionFile>
|
<ModuleDefinitionFile>sdk.def</ModuleDefinitionFile>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;SDK_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;SDK_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
<PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>
|
||||||
</PrecompiledHeaderFile>
|
</PrecompiledHeaderFile>
|
||||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
<AdditionalIncludeDirectories>$(SolutionDir)spy;C:\Tools\vcpkg\installed\x86-windows-static\include</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(SolutionDir)spy;C:\Tools\vcpkg\installed\x86-windows-static\include</AdditionalIncludeDirectories>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<EnableUAC>false</EnableUAC>
|
<EnableUAC>false</EnableUAC>
|
||||||
<ModuleDefinitionFile>sdk.def</ModuleDefinitionFile>
|
<ModuleDefinitionFile>sdk.def</ModuleDefinitionFile>
|
||||||
</Link>
|
</Link>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
<Command>xcopy /y $(OutDir)$(TargetFileName) $(SolutionDir)Out</Command>
|
<Command>xcopy /y $(OutDir)$(TargetFileName) $(SolutionDir)Out</Command>
|
||||||
</PostBuildEvent>
|
</PostBuildEvent>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
<Message>Copy files</Message>
|
<Message>Copy files</Message>
|
||||||
</PostBuildEvent>
|
</PostBuildEvent>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
<PreprocessorDefinitions>_DEBUG;SDK_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_DEBUG;SDK_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<EnableUAC>false</EnableUAC>
|
<EnableUAC>false</EnableUAC>
|
||||||
<ModuleDefinitionFile>sdk.def</ModuleDefinitionFile>
|
<ModuleDefinitionFile>sdk.def</ModuleDefinitionFile>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
<PreprocessorDefinitions>NDEBUG;SDK_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>NDEBUG;SDK_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<EnableUAC>false</EnableUAC>
|
<EnableUAC>false</EnableUAC>
|
||||||
<ModuleDefinitionFile>sdk.def</ModuleDefinitionFile>
|
<ModuleDefinitionFile>sdk.def</ModuleDefinitionFile>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\spy\log.h" />
|
<ClInclude Include="..\spy\log.h" />
|
||||||
<ClInclude Include="..\spy\util.h" />
|
<ClInclude Include="..\spy\util.h" />
|
||||||
<ClInclude Include="framework.h" />
|
<ClInclude Include="framework.h" />
|
||||||
<ClInclude Include="injector.h" />
|
<ClInclude Include="injector.h" />
|
||||||
<ClInclude Include="sdk.h" />
|
<ClInclude Include="sdk.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\spy\log.cpp" />
|
<ClCompile Include="..\spy\log.cpp" />
|
||||||
<ClCompile Include="..\spy\util.cpp" />
|
<ClCompile Include="..\spy\util.cpp" />
|
||||||
<ClCompile Include="dllmain.cpp" />
|
<ClCompile Include="dllmain.cpp" />
|
||||||
<ClCompile Include="injector.cpp" />
|
<ClCompile Include="injector.cpp" />
|
||||||
<ClCompile Include="sdk.cpp" />
|
<ClCompile Include="sdk.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="sdk.def" />
|
<None Include="sdk.def" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
</Project>
|
</Project>
|
@ -1,56 +1,56 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Filter Include="源文件">
|
<Filter Include="源文件">
|
||||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter Include="头文件">
|
<Filter Include="头文件">
|
||||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
|
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter Include="资源文件">
|
<Filter Include="资源文件">
|
||||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
<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>
|
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||||
</Filter>
|
</Filter>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="framework.h">
|
<ClInclude Include="framework.h">
|
||||||
<Filter>头文件</Filter>
|
<Filter>头文件</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="sdk.h">
|
<ClInclude Include="sdk.h">
|
||||||
<Filter>头文件</Filter>
|
<Filter>头文件</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\spy\util.h">
|
<ClInclude Include="..\spy\util.h">
|
||||||
<Filter>头文件</Filter>
|
<Filter>头文件</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\spy\log.h">
|
<ClInclude Include="..\spy\log.h">
|
||||||
<Filter>头文件</Filter>
|
<Filter>头文件</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="injector.h">
|
<ClInclude Include="injector.h">
|
||||||
<Filter>头文件</Filter>
|
<Filter>头文件</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="dllmain.cpp">
|
<ClCompile Include="dllmain.cpp">
|
||||||
<Filter>源文件</Filter>
|
<Filter>源文件</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\spy\log.cpp">
|
<ClCompile Include="..\spy\log.cpp">
|
||||||
<Filter>源文件</Filter>
|
<Filter>源文件</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\spy\util.cpp">
|
<ClCompile Include="..\spy\util.cpp">
|
||||||
<Filter>源文件</Filter>
|
<Filter>源文件</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="sdk.cpp">
|
<ClCompile Include="sdk.cpp">
|
||||||
<Filter>源文件</Filter>
|
<Filter>源文件</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="injector.cpp">
|
<ClCompile Include="injector.cpp">
|
||||||
<Filter>源文件</Filter>
|
<Filter>源文件</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="sdk.def">
|
<None Include="sdk.def">
|
||||||
<Filter>源文件</Filter>
|
<Filter>源文件</Filter>
|
||||||
</None>
|
</None>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
@ -1,14 +1,14 @@
|
|||||||
// dllmain.cpp : 定义 DLL 应用程序的入口点。
|
// dllmain.cpp : 定义 DLL 应用程序的入口点。
|
||||||
#include "framework.h"
|
#include "framework.h"
|
||||||
|
|
||||||
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
|
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
|
||||||
{
|
{
|
||||||
switch (ul_reason_for_call) {
|
switch (ul_reason_for_call) {
|
||||||
case DLL_PROCESS_ATTACH:
|
case DLL_PROCESS_ATTACH:
|
||||||
case DLL_THREAD_ATTACH:
|
case DLL_THREAD_ATTACH:
|
||||||
case DLL_THREAD_DETACH:
|
case DLL_THREAD_DETACH:
|
||||||
case DLL_PROCESS_DETACH:
|
case DLL_PROCESS_DETACH:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
@ -1,5 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define WIN32_LEAN_AND_MEAN // 从 Windows 头文件中排除极少使用的内容
|
#define WIN32_LEAN_AND_MEAN // 从 Windows 头文件中排除极少使用的内容
|
||||||
// Windows 头文件
|
// Windows 头文件
|
||||||
#include <windows.h>
|
#include <windows.h>
|
@ -1,122 +1,122 @@
|
|||||||
#include "injector.h"
|
#include "injector.h"
|
||||||
|
|
||||||
HANDLE InjectDll(DWORD pid, LPCWSTR dllPath, HMODULE *injectedBase)
|
HANDLE InjectDll(DWORD pid, LPCWSTR dllPath, HMODULE *injectedBase)
|
||||||
{
|
{
|
||||||
HANDLE hThread;
|
HANDLE hThread;
|
||||||
SIZE_T cszDLL = (wcslen(dllPath) + 1) * sizeof(WCHAR);
|
SIZE_T cszDLL = (wcslen(dllPath) + 1) * sizeof(WCHAR);
|
||||||
// 1. 打开目标进程
|
// 1. 打开目标进程
|
||||||
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
|
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
|
||||||
if (hProcess == NULL) {
|
if (hProcess == NULL) {
|
||||||
MessageBox(NULL, L"打开进程失败", L"InjectDll", 0);
|
MessageBox(NULL, L"打开进程失败", L"InjectDll", 0);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. 在目标进程的内存里开辟空间
|
// 2. 在目标进程的内存里开辟空间
|
||||||
LPVOID pRemoteAddress = VirtualAllocEx(hProcess, NULL, cszDLL, MEM_COMMIT, PAGE_READWRITE);
|
LPVOID pRemoteAddress = VirtualAllocEx(hProcess, NULL, cszDLL, MEM_COMMIT, PAGE_READWRITE);
|
||||||
if (pRemoteAddress == NULL) {
|
if (pRemoteAddress == NULL) {
|
||||||
MessageBox(NULL, L"DLL 路径写入失败", L"InjectDll", 0);
|
MessageBox(NULL, L"DLL 路径写入失败", L"InjectDll", 0);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. 把 dll 的路径写入到目标进程的内存空间中
|
// 3. 把 dll 的路径写入到目标进程的内存空间中
|
||||||
WriteProcessMemory(hProcess, pRemoteAddress, dllPath, cszDLL, NULL);
|
WriteProcessMemory(hProcess, pRemoteAddress, dllPath, cszDLL, NULL);
|
||||||
|
|
||||||
// 3. 创建一个远程线程,让目标进程调用 LoadLibrary
|
// 3. 创建一个远程线程,让目标进程调用 LoadLibrary
|
||||||
hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibrary, pRemoteAddress, 0, NULL);
|
hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibrary, pRemoteAddress, 0, NULL);
|
||||||
if (hThread == NULL) {
|
if (hThread == NULL) {
|
||||||
MessageBox(NULL, L"LoadLibrary 调用失败", L"InjectDll", 0);
|
MessageBox(NULL, L"LoadLibrary 调用失败", L"InjectDll", 0);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
WaitForSingleObject(hThread, -1);
|
WaitForSingleObject(hThread, -1);
|
||||||
GetExitCodeThread(hThread, (LPDWORD)injectedBase);
|
GetExitCodeThread(hThread, (LPDWORD)injectedBase);
|
||||||
CloseHandle(hThread);
|
CloseHandle(hThread);
|
||||||
VirtualFreeEx(hProcess, pRemoteAddress, 0, MEM_RELEASE);
|
VirtualFreeEx(hProcess, pRemoteAddress, 0, MEM_RELEASE);
|
||||||
// CloseHandle(hProcess); // Close when exit
|
// CloseHandle(hProcess); // Close when exit
|
||||||
|
|
||||||
return hProcess;
|
return hProcess;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EjectDll(HANDLE process, HMODULE dllBase)
|
bool EjectDll(HANDLE process, HMODULE dllBase)
|
||||||
{
|
{
|
||||||
HANDLE hThread = NULL;
|
HANDLE hThread = NULL;
|
||||||
|
|
||||||
// 使目标进程调用 FreeLibrary,卸载 DLL
|
// 使目标进程调用 FreeLibrary,卸载 DLL
|
||||||
hThread = CreateRemoteThread(process, NULL, 0, (LPTHREAD_START_ROUTINE)FreeLibrary, (LPVOID)dllBase, 0, NULL);
|
hThread = CreateRemoteThread(process, NULL, 0, (LPTHREAD_START_ROUTINE)FreeLibrary, (LPVOID)dllBase, 0, NULL);
|
||||||
if (hThread == NULL) {
|
if (hThread == NULL) {
|
||||||
MessageBox(NULL, L"FreeLibrary 调用失败!", L"EjectDll", 0);
|
MessageBox(NULL, L"FreeLibrary 调用失败!", L"EjectDll", 0);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
WaitForSingleObject(hThread, INFINITE);
|
WaitForSingleObject(hThread, INFINITE);
|
||||||
CloseHandle(hThread);
|
CloseHandle(hThread);
|
||||||
CloseHandle(process);
|
CloseHandle(process);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void *GetFuncAddr(LPCWSTR dllPath, HMODULE dllBase, LPCSTR funcName)
|
static void *GetFuncAddr(LPCWSTR dllPath, HMODULE dllBase, LPCSTR funcName)
|
||||||
{
|
{
|
||||||
HMODULE hLoaded = LoadLibrary(dllPath);
|
HMODULE hLoaded = LoadLibrary(dllPath);
|
||||||
if (hLoaded == NULL) {
|
if (hLoaded == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *absAddr = GetProcAddress(hLoaded, funcName);
|
void *absAddr = GetProcAddress(hLoaded, funcName);
|
||||||
DWORD offset = (DWORD)absAddr - (DWORD)hLoaded;
|
DWORD offset = (DWORD)absAddr - (DWORD)hLoaded;
|
||||||
|
|
||||||
FreeLibrary(hLoaded);
|
FreeLibrary(hLoaded);
|
||||||
|
|
||||||
return (void *)((DWORD)dllBase + offset);
|
return (void *)((DWORD)dllBase + offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CallDllFunc(HANDLE process, LPCWSTR dllPath, HMODULE dllBase, LPCSTR funcName, LPVOID parameter, DWORD *ret)
|
bool CallDllFunc(HANDLE process, LPCWSTR dllPath, HMODULE dllBase, LPCSTR funcName, LPVOID parameter, DWORD *ret)
|
||||||
{
|
{
|
||||||
void *pFunc = GetFuncAddr(dllPath, dllBase, funcName);
|
void *pFunc = GetFuncAddr(dllPath, dllBase, funcName);
|
||||||
if (pFunc == NULL) {
|
if (pFunc == NULL) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
HANDLE hThread = CreateRemoteThread(process, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, parameter, 0, NULL);
|
HANDLE hThread = CreateRemoteThread(process, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, parameter, 0, NULL);
|
||||||
if (hThread == NULL) {
|
if (hThread == NULL) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
WaitForSingleObject(hThread, INFINITE);
|
WaitForSingleObject(hThread, INFINITE);
|
||||||
if (ret != NULL) {
|
if (ret != NULL) {
|
||||||
GetExitCodeThread(hThread, ret);
|
GetExitCodeThread(hThread, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
CloseHandle(hThread);
|
CloseHandle(hThread);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CallDllFuncEx(HANDLE process, LPCWSTR dllPath, HMODULE dllBase, LPCSTR funcName, LPVOID parameter, size_t sz,
|
bool CallDllFuncEx(HANDLE process, LPCWSTR dllPath, HMODULE dllBase, LPCSTR funcName, LPVOID parameter, size_t sz,
|
||||||
DWORD *ret)
|
DWORD *ret)
|
||||||
{
|
{
|
||||||
void *pFunc = GetFuncAddr(dllPath, dllBase, funcName);
|
void *pFunc = GetFuncAddr(dllPath, dllBase, funcName);
|
||||||
if (pFunc == NULL) {
|
if (pFunc == NULL) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
LPVOID pRemoteAddress = VirtualAllocEx(process, NULL, sz, MEM_COMMIT, PAGE_READWRITE);
|
LPVOID pRemoteAddress = VirtualAllocEx(process, NULL, sz, MEM_COMMIT, PAGE_READWRITE);
|
||||||
if (pRemoteAddress == NULL) {
|
if (pRemoteAddress == NULL) {
|
||||||
MessageBox(NULL, L"申请内存失败", L"CallDllFuncEx", 0);
|
MessageBox(NULL, L"申请内存失败", L"CallDllFuncEx", 0);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
WriteProcessMemory(process, pRemoteAddress, parameter, sz, NULL);
|
WriteProcessMemory(process, pRemoteAddress, parameter, sz, NULL);
|
||||||
|
|
||||||
HANDLE hThread = CreateRemoteThread(process, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, pRemoteAddress, 0, NULL);
|
HANDLE hThread = CreateRemoteThread(process, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, pRemoteAddress, 0, NULL);
|
||||||
if (hThread == NULL) {
|
if (hThread == NULL) {
|
||||||
VirtualFree(pRemoteAddress, 0, MEM_RELEASE);
|
VirtualFree(pRemoteAddress, 0, MEM_RELEASE);
|
||||||
MessageBox(NULL, L"远程调用失败", L"CallDllFuncEx", 0);
|
MessageBox(NULL, L"远程调用失败", L"CallDllFuncEx", 0);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
WaitForSingleObject(hThread, INFINITE);
|
WaitForSingleObject(hThread, INFINITE);
|
||||||
VirtualFree(pRemoteAddress, 0, MEM_RELEASE);
|
VirtualFree(pRemoteAddress, 0, MEM_RELEASE);
|
||||||
if (ret != NULL) {
|
if (ret != NULL) {
|
||||||
GetExitCodeThread(hThread, ret);
|
GetExitCodeThread(hThread, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
CloseHandle(hThread);
|
CloseHandle(hThread);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
@ -1,125 +1,125 @@
|
|||||||
#include "Shlwapi.h"
|
#include "Shlwapi.h"
|
||||||
#include "framework.h"
|
#include "framework.h"
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
#include <process.h>
|
#include <process.h>
|
||||||
#include <tlhelp32.h>
|
#include <tlhelp32.h>
|
||||||
|
|
||||||
#include "injector.h"
|
#include "injector.h"
|
||||||
#include "sdk.h"
|
#include "sdk.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|
||||||
#define WCF_LOCK ".wcf.lock"
|
#define WCF_LOCK ".wcf.lock"
|
||||||
|
|
||||||
static bool debugMode = false;
|
static bool debugMode = false;
|
||||||
static HANDLE wcProcess = NULL;
|
static HANDLE wcProcess = NULL;
|
||||||
static HMODULE spyBase = NULL;
|
static HMODULE spyBase = NULL;
|
||||||
static WCHAR spyDllPath[MAX_PATH] = { 0 };
|
static WCHAR spyDllPath[MAX_PATH] = { 0 };
|
||||||
|
|
||||||
static int GetDllPath(bool debug, wchar_t *dllPath)
|
static int GetDllPath(bool debug, wchar_t *dllPath)
|
||||||
{
|
{
|
||||||
GetModuleFileName(GetModuleHandle(WECHATSDKDLL), spyDllPath, MAX_PATH);
|
GetModuleFileName(GetModuleHandle(WECHATSDKDLL), spyDllPath, MAX_PATH);
|
||||||
PathRemoveFileSpec(spyDllPath);
|
PathRemoveFileSpec(spyDllPath);
|
||||||
if (debug) {
|
if (debug) {
|
||||||
PathAppend(spyDllPath, WECHATINJECTDLL_DEBUG);
|
PathAppend(spyDllPath, WECHATINJECTDLL_DEBUG);
|
||||||
} else {
|
} else {
|
||||||
PathAppend(spyDllPath, WECHATINJECTDLL);
|
PathAppend(spyDllPath, WECHATINJECTDLL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!PathFileExists(spyDllPath)) {
|
if (!PathFileExists(spyDllPath)) {
|
||||||
MessageBox(NULL, spyDllPath, L"文件不存在", 0);
|
MessageBox(NULL, spyDllPath, L"文件不存在", 0);
|
||||||
return ERROR_FILE_NOT_FOUND;
|
return ERROR_FILE_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int WxInitSDK(bool debug, int port)
|
int WxInitSDK(bool debug, int port)
|
||||||
{
|
{
|
||||||
int status = 0;
|
int status = 0;
|
||||||
DWORD wcPid = 0;
|
DWORD wcPid = 0;
|
||||||
|
|
||||||
status = GetDllPath(debug, spyDllPath);
|
status = GetDllPath(debug, spyDllPath);
|
||||||
if (status != 0) {
|
if (status != 0) {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
status = OpenWeChat(&wcPid);
|
status = OpenWeChat(&wcPid);
|
||||||
if (status != 0) {
|
if (status != 0) {
|
||||||
MessageBox(NULL, L"打开微信失败", L"WxInitSDK", 0);
|
MessageBox(NULL, L"打开微信失败", L"WxInitSDK", 0);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
Sleep(2000); // 等待微信打开
|
Sleep(2000); // 等待微信打开
|
||||||
wcProcess = InjectDll(wcPid, spyDllPath, &spyBase);
|
wcProcess = InjectDll(wcPid, spyDllPath, &spyBase);
|
||||||
if (wcProcess == NULL) {
|
if (wcProcess == NULL) {
|
||||||
MessageBox(NULL, L"注入失败", L"WxInitSDK", 0);
|
MessageBox(NULL, L"注入失败", L"WxInitSDK", 0);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
PortPath_t pp = { 0 };
|
PortPath_t pp = { 0 };
|
||||||
pp.port = port;
|
pp.port = port;
|
||||||
sprintf_s(pp.path, MAX_PATH, "%s", std::filesystem::current_path().string().c_str());
|
sprintf_s(pp.path, MAX_PATH, "%s", std::filesystem::current_path().string().c_str());
|
||||||
|
|
||||||
if (!CallDllFuncEx(wcProcess, spyDllPath, spyBase, "InitSpy", (LPVOID)&pp, sizeof(PortPath_t), NULL)) {
|
if (!CallDllFuncEx(wcProcess, spyDllPath, spyBase, "InitSpy", (LPVOID)&pp, sizeof(PortPath_t), NULL)) {
|
||||||
MessageBox(NULL, L"初始化失败", L"WxInitSDK", 0);
|
MessageBox(NULL, L"初始化失败", L"WxInitSDK", 0);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WCF
|
#ifdef WCF
|
||||||
FILE *fd = fopen(WCF_LOCK, "wb");
|
FILE *fd = fopen(WCF_LOCK, "wb");
|
||||||
if (fd == NULL) {
|
if (fd == NULL) {
|
||||||
MessageBox(NULL, L"无法打开lock文件", L"WxInitSDK", 0);
|
MessageBox(NULL, L"无法打开lock文件", L"WxInitSDK", 0);
|
||||||
return -2;
|
return -2;
|
||||||
}
|
}
|
||||||
fwrite((uint8_t *)&debug, sizeof(debug), 1, fd);
|
fwrite((uint8_t *)&debug, sizeof(debug), 1, fd);
|
||||||
fwrite((uint8_t *)&spyBase, sizeof(spyBase), 1, fd);
|
fwrite((uint8_t *)&spyBase, sizeof(spyBase), 1, fd);
|
||||||
fclose(fd);
|
fclose(fd);
|
||||||
#endif
|
#endif
|
||||||
debugMode = debug;
|
debugMode = debug;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int WxDestroySDK()
|
int WxDestroySDK()
|
||||||
{
|
{
|
||||||
int status = 0;
|
int status = 0;
|
||||||
#ifdef WCF
|
#ifdef WCF
|
||||||
bool debug;
|
bool debug;
|
||||||
DWORD pid = GetWeChatPid();
|
DWORD pid = GetWeChatPid();
|
||||||
if (pid == 0) {
|
if (pid == 0) {
|
||||||
MessageBox(NULL, L"微信未运行", L"WxDestroySDK", 0);
|
MessageBox(NULL, L"微信未运行", L"WxDestroySDK", 0);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
wcProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
|
wcProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
|
||||||
if (wcProcess == NULL) {
|
if (wcProcess == NULL) {
|
||||||
MessageBox(NULL, L"微信未运行", L"WxDestroySDK", 0);
|
MessageBox(NULL, L"微信未运行", L"WxDestroySDK", 0);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
FILE *fd = fopen(WCF_LOCK, "rb");
|
FILE *fd = fopen(WCF_LOCK, "rb");
|
||||||
if (fd == NULL) {
|
if (fd == NULL) {
|
||||||
MessageBox(NULL, L"无法打开lock文件", L"WxDestroySDK", 0);
|
MessageBox(NULL, L"无法打开lock文件", L"WxDestroySDK", 0);
|
||||||
return -2;
|
return -2;
|
||||||
}
|
}
|
||||||
fread((uint8_t *)&debug, sizeof(debug), 1, fd);
|
fread((uint8_t *)&debug, sizeof(debug), 1, fd);
|
||||||
fread((uint8_t *)&spyBase, sizeof(spyBase), 1, fd);
|
fread((uint8_t *)&spyBase, sizeof(spyBase), 1, fd);
|
||||||
fclose(fd);
|
fclose(fd);
|
||||||
status = GetDllPath(debug, spyDllPath);
|
status = GetDllPath(debug, spyDllPath);
|
||||||
#else
|
#else
|
||||||
status = GetDllPath(debugMode, spyDllPath);
|
status = GetDllPath(debugMode, spyDllPath);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (status != 0) {
|
if (status != 0) {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!CallDllFunc(wcProcess, spyDllPath, spyBase, "CleanupSpy", NULL, NULL)) {
|
if (!CallDllFunc(wcProcess, spyDllPath, spyBase, "CleanupSpy", NULL, NULL)) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!EjectDll(wcProcess, spyBase)) {
|
if (!EjectDll(wcProcess, spyBase)) {
|
||||||
return -1; // TODO: Unify error codes
|
return -1; // TODO: Unify error codes
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
@ -1,3 +1,3 @@
|
|||||||
EXPORTS
|
EXPORTS
|
||||||
WxInitSDK
|
WxInitSDK
|
||||||
WxDestroySDK
|
WxDestroySDK
|
@ -1,4 +1,4 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
int WxInitSDK(bool debug, int port);
|
int WxInitSDK(bool debug, int port);
|
||||||
int WxDestroySDK();
|
int WxDestroySDK();
|
@ -1,278 +1,278 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<ItemGroup Label="ProjectConfigurations">
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
<ProjectConfiguration Include="Debug|Win32">
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
<Configuration>Debug</Configuration>
|
<Configuration>Debug</Configuration>
|
||||||
<Platform>Win32</Platform>
|
<Platform>Win32</Platform>
|
||||||
</ProjectConfiguration>
|
</ProjectConfiguration>
|
||||||
<ProjectConfiguration Include="Release|Win32">
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
<Configuration>Release</Configuration>
|
<Configuration>Release</Configuration>
|
||||||
<Platform>Win32</Platform>
|
<Platform>Win32</Platform>
|
||||||
</ProjectConfiguration>
|
</ProjectConfiguration>
|
||||||
<ProjectConfiguration Include="Debug|x64">
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
<Configuration>Debug</Configuration>
|
<Configuration>Debug</Configuration>
|
||||||
<Platform>x64</Platform>
|
<Platform>x64</Platform>
|
||||||
</ProjectConfiguration>
|
</ProjectConfiguration>
|
||||||
<ProjectConfiguration Include="Release|x64">
|
<ProjectConfiguration Include="Release|x64">
|
||||||
<Configuration>Release</Configuration>
|
<Configuration>Release</Configuration>
|
||||||
<Platform>x64</Platform>
|
<Platform>x64</Platform>
|
||||||
</ProjectConfiguration>
|
</ProjectConfiguration>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<VCProjectVersion>16.0</VCProjectVersion>
|
<VCProjectVersion>16.0</VCProjectVersion>
|
||||||
<Keyword>Win32Proj</Keyword>
|
<Keyword>Win32Proj</Keyword>
|
||||||
<ProjectGuid>{4de80b82-5f6a-4c4c-9d16-1574308110fa}</ProjectGuid>
|
<ProjectGuid>{4de80b82-5f6a-4c4c-9d16-1574308110fa}</ProjectGuid>
|
||||||
<RootNamespace>spy</RootNamespace>
|
<RootNamespace>spy</RootNamespace>
|
||||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||||
<VcpkgTriplet Condition="'$(Platform)'=='Win32'">x86-windows-static</VcpkgTriplet>
|
<VcpkgTriplet Condition="'$(Platform)'=='Win32'">x86-windows-static</VcpkgTriplet>
|
||||||
<VcpkgTriplet Condition="'$(Platform)'=='x64'">x64-windows-static</VcpkgTriplet>
|
<VcpkgTriplet Condition="'$(Platform)'=='x64'">x64-windows-static</VcpkgTriplet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>true</UseDebugLibraries>
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
<PlatformToolset>v142</PlatformToolset>
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>false</UseDebugLibraries>
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
<PlatformToolset>v142</PlatformToolset>
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>true</UseDebugLibraries>
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
<PlatformToolset>v142</PlatformToolset>
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>false</UseDebugLibraries>
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
<PlatformToolset>v142</PlatformToolset>
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
<ImportGroup Label="ExtensionSettings">
|
<ImportGroup Label="ExtensionSettings">
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<ImportGroup Label="Shared">
|
<ImportGroup Label="Shared">
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<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" />
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<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" />
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
<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" />
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
<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" />
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup Label="UserMacros" />
|
<PropertyGroup Label="UserMacros" />
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<LinkIncremental>true</LinkIncremental>
|
<LinkIncremental>true</LinkIncremental>
|
||||||
<TargetName>$(ProjectName)_debug</TargetName>
|
<TargetName>$(ProjectName)_debug</TargetName>
|
||||||
<PreBuildEventUseInBuild>true</PreBuildEventUseInBuild>
|
<PreBuildEventUseInBuild>true</PreBuildEventUseInBuild>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<LinkIncremental>false</LinkIncremental>
|
<LinkIncremental>false</LinkIncremental>
|
||||||
<PreBuildEventUseInBuild>true</PreBuildEventUseInBuild>
|
<PreBuildEventUseInBuild>true</PreBuildEventUseInBuild>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
<LinkIncremental>true</LinkIncremental>
|
<LinkIncremental>true</LinkIncremental>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
<LinkIncremental>false</LinkIncremental>
|
<LinkIncremental>false</LinkIncremental>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<VcpkgUseStatic>true</VcpkgUseStatic>
|
<VcpkgUseStatic>true</VcpkgUseStatic>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<VcpkgUseStatic>true</VcpkgUseStatic>
|
<VcpkgUseStatic>true</VcpkgUseStatic>
|
||||||
<VcpkgConfiguration>Release</VcpkgConfiguration>
|
<VcpkgConfiguration>Release</VcpkgConfiguration>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;SPY_EXPORTS;_WINDOWS;_USRDLL;ENABLE_DEBUG_LOG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;SPY_EXPORTS;_WINDOWS;_USRDLL;ENABLE_DEBUG_LOG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
<PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>
|
||||||
</PrecompiledHeaderFile>
|
</PrecompiledHeaderFile>
|
||||||
<AdditionalIncludeDirectories>$(SolutionDir)rpc;$(SolutionDir)rpc\nanopb;$(SolutionDir)rpc\proto;$(SolutionDir)spy;C:\Tools\vcpkg\installed\x86-windows-static\include</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(SolutionDir)rpc;$(SolutionDir)rpc\nanopb;$(SolutionDir)rpc\proto;$(SolutionDir)spy;C:\Tools\vcpkg\installed\x86-windows-static\include</AdditionalIncludeDirectories>
|
||||||
<PrecompiledHeaderOutputFile />
|
<PrecompiledHeaderOutputFile />
|
||||||
<DisableSpecificWarnings>4251;4731;4819</DisableSpecificWarnings>
|
<DisableSpecificWarnings>4251;4731;4819</DisableSpecificWarnings>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
<AdditionalOptions>/EHa %(AdditionalOptions)</AdditionalOptions>
|
<AdditionalOptions>/EHa %(AdditionalOptions)</AdditionalOptions>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<EnableUAC>false</EnableUAC>
|
<EnableUAC>false</EnableUAC>
|
||||||
<AdditionalDependencies>iphlpapi.lib;wsock32.lib;ws2_32.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>iphlpapi.lib;wsock32.lib;ws2_32.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<ModuleDefinitionFile>spy.def</ModuleDefinitionFile>
|
<ModuleDefinitionFile>spy.def</ModuleDefinitionFile>
|
||||||
</Link>
|
</Link>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
<Command>if not exist $(SolutionDir)Out md $(SolutionDir)Out
|
<Command>if not exist $(SolutionDir)Out md $(SolutionDir)Out
|
||||||
xcopy /y $(OutDir)$(TargetFileName) $(SolutionDir)Out
|
xcopy /y $(OutDir)$(TargetFileName) $(SolutionDir)Out
|
||||||
xcopy /y $(OutDir)$(TargetName).exp $(SolutionDir)Out
|
xcopy /y $(OutDir)$(TargetName).exp $(SolutionDir)Out
|
||||||
xcopy /y $(OutDir)$(TargetName).lib $(SolutionDir)Out
|
xcopy /y $(OutDir)$(TargetName).lib $(SolutionDir)Out
|
||||||
xcopy /y $(OutDir)$(TargetName).pdb $(SolutionDir)Out
|
xcopy /y $(OutDir)$(TargetName).pdb $(SolutionDir)Out
|
||||||
xcopy /y $(OutDir)$(TargetFileName) $(SolutionDir)python\wcferry</Command>
|
xcopy /y $(OutDir)$(TargetFileName) $(SolutionDir)..\clients\python\wcferry</Command>
|
||||||
</PostBuildEvent>
|
</PostBuildEvent>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
<Message>Copy spy.dll</Message>
|
<Message>Copy spy.dll</Message>
|
||||||
</PostBuildEvent>
|
</PostBuildEvent>
|
||||||
<PreBuildEvent>
|
<PreBuildEvent>
|
||||||
<Command>cd $(SolutionDir)rpc\proto
|
<Command>cd $(SolutionDir)rpc\proto
|
||||||
$(SolutionDir)rpc\tool\protoc --nanopb_out=. wcf.proto</Command>
|
$(SolutionDir)rpc\tool\protoc --nanopb_out=. wcf.proto</Command>
|
||||||
</PreBuildEvent>
|
</PreBuildEvent>
|
||||||
<PreBuildEvent>
|
<PreBuildEvent>
|
||||||
<Message>Generating PB files</Message>
|
<Message>Generating PB files</Message>
|
||||||
</PreBuildEvent>
|
</PreBuildEvent>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;SPY_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;SPY_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
<PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>
|
||||||
</PrecompiledHeaderFile>
|
</PrecompiledHeaderFile>
|
||||||
<AdditionalIncludeDirectories>$(SolutionDir)rpc;$(SolutionDir)rpc\nanopb;$(SolutionDir)rpc\proto;$(SolutionDir)spy;C:\Tools\vcpkg\installed\x86-windows-static\include</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(SolutionDir)rpc;$(SolutionDir)rpc\nanopb;$(SolutionDir)rpc\proto;$(SolutionDir)spy;C:\Tools\vcpkg\installed\x86-windows-static\include</AdditionalIncludeDirectories>
|
||||||
<PrecompiledHeaderOutputFile />
|
<PrecompiledHeaderOutputFile />
|
||||||
<DisableSpecificWarnings>4251;4731;4819</DisableSpecificWarnings>
|
<DisableSpecificWarnings>4251;4731;4819</DisableSpecificWarnings>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<EnableUAC>false</EnableUAC>
|
<EnableUAC>false</EnableUAC>
|
||||||
<AdditionalDependencies>iphlpapi.lib;wsock32.lib;ws2_32.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>iphlpapi.lib;wsock32.lib;ws2_32.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<ModuleDefinitionFile>spy.def</ModuleDefinitionFile>
|
<ModuleDefinitionFile>spy.def</ModuleDefinitionFile>
|
||||||
</Link>
|
</Link>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
<Command>if not exist $(SolutionDir)Out md $(SolutionDir)Out
|
<Command>if not exist $(SolutionDir)Out md $(SolutionDir)Out
|
||||||
xcopy /y $(OutDir)$(TargetFileName) $(SolutionDir)Out
|
xcopy /y $(OutDir)$(TargetFileName) $(SolutionDir)Out
|
||||||
xcopy /y $(OutDir)$(TargetFileName) $(SolutionDir)python\wcferry</Command>
|
xcopy /y $(OutDir)$(TargetFileName) $(SolutionDir)..\clients\python\wcferry</Command>
|
||||||
</PostBuildEvent>
|
</PostBuildEvent>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
<Message>Copy spy.dll</Message>
|
<Message>Copy spy.dll</Message>
|
||||||
</PostBuildEvent>
|
</PostBuildEvent>
|
||||||
<PreBuildEvent>
|
<PreBuildEvent>
|
||||||
<Command>cd $(SolutionDir)rpc\proto
|
<Command>cd $(SolutionDir)rpc\proto
|
||||||
$(SolutionDir)rpc\tool\protoc --nanopb_out=. wcf.proto</Command>
|
$(SolutionDir)rpc\tool\protoc --nanopb_out=. wcf.proto</Command>
|
||||||
</PreBuildEvent>
|
</PreBuildEvent>
|
||||||
<PreBuildEvent>
|
<PreBuildEvent>
|
||||||
<Message>Generating PB files</Message>
|
<Message>Generating PB files</Message>
|
||||||
</PreBuildEvent>
|
</PreBuildEvent>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
<PreprocessorDefinitions>_DEBUG;SPY_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_DEBUG;SPY_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<EnableUAC>false</EnableUAC>
|
<EnableUAC>false</EnableUAC>
|
||||||
<ModuleDefinitionFile>spy.def</ModuleDefinitionFile>
|
<ModuleDefinitionFile>spy.def</ModuleDefinitionFile>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
<PreprocessorDefinitions>NDEBUG;SPY_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>NDEBUG;SPY_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<EnableUAC>false</EnableUAC>
|
<EnableUAC>false</EnableUAC>
|
||||||
<ModuleDefinitionFile>spy.def</ModuleDefinitionFile>
|
<ModuleDefinitionFile>spy.def</ModuleDefinitionFile>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\rpc\nanopb\pb.h" />
|
<ClInclude Include="..\rpc\nanopb\pb.h" />
|
||||||
<ClInclude Include="..\rpc\nanopb\pb_common.h" />
|
<ClInclude Include="..\rpc\nanopb\pb_common.h" />
|
||||||
<ClInclude Include="..\rpc\nanopb\pb_decode.h" />
|
<ClInclude Include="..\rpc\nanopb\pb_decode.h" />
|
||||||
<ClInclude Include="..\rpc\nanopb\pb_encode.h" />
|
<ClInclude Include="..\rpc\nanopb\pb_encode.h" />
|
||||||
<ClInclude Include="..\rpc\pb_types.h" />
|
<ClInclude Include="..\rpc\pb_types.h" />
|
||||||
<ClInclude Include="..\rpc\pb_util.h" />
|
<ClInclude Include="..\rpc\pb_util.h" />
|
||||||
<ClInclude Include="..\rpc\proto\wcf.pb.h" />
|
<ClInclude Include="..\rpc\proto\wcf.pb.h" />
|
||||||
<ClInclude Include="chatroom_mgmt.h" />
|
<ClInclude Include="chatroom_mgmt.h" />
|
||||||
<ClInclude Include="decrypt_image.h" />
|
<ClInclude Include="decrypt_image.h" />
|
||||||
<ClInclude Include="exec_sql.h" />
|
<ClInclude Include="exec_sql.h" />
|
||||||
<ClInclude Include="framework.h" />
|
<ClInclude Include="framework.h" />
|
||||||
<ClInclude Include="contact_mgmt.h" />
|
<ClInclude Include="contact_mgmt.h" />
|
||||||
<ClInclude Include="load_calls.h" />
|
<ClInclude Include="load_calls.h" />
|
||||||
<ClInclude Include="log.h" />
|
<ClInclude Include="log.h" />
|
||||||
<ClInclude Include="receive_msg.h" />
|
<ClInclude Include="receive_msg.h" />
|
||||||
<ClInclude Include="receive_transfer.h" />
|
<ClInclude Include="receive_transfer.h" />
|
||||||
<ClInclude Include="resource.h" />
|
<ClInclude Include="resource.h" />
|
||||||
<ClInclude Include="rpc_server.h" />
|
<ClInclude Include="rpc_server.h" />
|
||||||
<ClInclude Include="send_msg.h" />
|
<ClInclude Include="send_msg.h" />
|
||||||
<ClInclude Include="spy.h" />
|
<ClInclude Include="spy.h" />
|
||||||
<ClInclude Include="spy_types.h" />
|
<ClInclude Include="spy_types.h" />
|
||||||
<ClInclude Include="sqlite3.h" />
|
<ClInclude Include="sqlite3.h" />
|
||||||
<ClInclude Include="user_info.h" />
|
<ClInclude Include="user_info.h" />
|
||||||
<ClInclude Include="util.h" />
|
<ClInclude Include="util.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\rpc\nanopb\pb_common.c" />
|
<ClCompile Include="..\rpc\nanopb\pb_common.c" />
|
||||||
<ClCompile Include="..\rpc\nanopb\pb_decode.c" />
|
<ClCompile Include="..\rpc\nanopb\pb_decode.c" />
|
||||||
<ClCompile Include="..\rpc\nanopb\pb_encode.c" />
|
<ClCompile Include="..\rpc\nanopb\pb_encode.c" />
|
||||||
<ClCompile Include="..\rpc\pb_util.cpp" />
|
<ClCompile Include="..\rpc\pb_util.cpp" />
|
||||||
<ClCompile Include="..\rpc\proto\wcf.pb.c" />
|
<ClCompile Include="..\rpc\proto\wcf.pb.c" />
|
||||||
<ClCompile Include="chatroom_mgmt.cpp" />
|
<ClCompile Include="chatroom_mgmt.cpp" />
|
||||||
<ClCompile Include="decrypt_image.cpp" />
|
<ClCompile Include="decrypt_image.cpp" />
|
||||||
<ClCompile Include="dllmain.cpp" />
|
<ClCompile Include="dllmain.cpp" />
|
||||||
<ClCompile Include="exec_sql.cpp" />
|
<ClCompile Include="exec_sql.cpp" />
|
||||||
<ClCompile Include="contact_mgmt.cpp" />
|
<ClCompile Include="contact_mgmt.cpp" />
|
||||||
<ClCompile Include="load_calls.cpp" />
|
<ClCompile Include="load_calls.cpp" />
|
||||||
<ClCompile Include="log.cpp" />
|
<ClCompile Include="log.cpp" />
|
||||||
<ClCompile Include="receive_msg.cpp" />
|
<ClCompile Include="receive_msg.cpp" />
|
||||||
<ClCompile Include="receive_transfer.cpp" />
|
<ClCompile Include="receive_transfer.cpp" />
|
||||||
<ClCompile Include="rpc_server.cpp" />
|
<ClCompile Include="rpc_server.cpp" />
|
||||||
<ClCompile Include="send_msg.cpp" />
|
<ClCompile Include="send_msg.cpp" />
|
||||||
<ClCompile Include="spy.cpp" />
|
<ClCompile Include="spy.cpp" />
|
||||||
<ClCompile Include="user_info.cpp" />
|
<ClCompile Include="user_info.cpp" />
|
||||||
<ClCompile Include="util.cpp" />
|
<ClCompile Include="util.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="..\rpc\proto\wcf.proto" />
|
<None Include="..\rpc\proto\wcf.proto" />
|
||||||
<None Include="spy.def" />
|
<None Include="spy.def" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="spy.rc" />
|
<ResourceCompile Include="spy.rc" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
</Project>
|
</Project>
|
@ -1,166 +1,166 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Filter Include="源文件">
|
<Filter Include="源文件">
|
||||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter Include="头文件">
|
<Filter Include="头文件">
|
||||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
|
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter Include="资源文件">
|
<Filter Include="资源文件">
|
||||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
<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>
|
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter Include="nnrpc">
|
<Filter Include="nnrpc">
|
||||||
<UniqueIdentifier>{7e39c2cc-c605-4204-88dc-9ae15c7d8d6c}</UniqueIdentifier>
|
<UniqueIdentifier>{7e39c2cc-c605-4204-88dc-9ae15c7d8d6c}</UniqueIdentifier>
|
||||||
</Filter>
|
</Filter>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="framework.h">
|
<ClInclude Include="framework.h">
|
||||||
<Filter>头文件</Filter>
|
<Filter>头文件</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="rpc_server.h">
|
<ClInclude Include="rpc_server.h">
|
||||||
<Filter>头文件</Filter>
|
<Filter>头文件</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="log.h">
|
<ClInclude Include="log.h">
|
||||||
<Filter>头文件</Filter>
|
<Filter>头文件</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="exec_sql.h">
|
<ClInclude Include="exec_sql.h">
|
||||||
<Filter>头文件</Filter>
|
<Filter>头文件</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="contact_mgmt.h">
|
<ClInclude Include="contact_mgmt.h">
|
||||||
<Filter>头文件</Filter>
|
<Filter>头文件</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="load_calls.h">
|
<ClInclude Include="load_calls.h">
|
||||||
<Filter>头文件</Filter>
|
<Filter>头文件</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="receive_msg.h">
|
<ClInclude Include="receive_msg.h">
|
||||||
<Filter>头文件</Filter>
|
<Filter>头文件</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="send_msg.h">
|
<ClInclude Include="send_msg.h">
|
||||||
<Filter>头文件</Filter>
|
<Filter>头文件</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="spy.h">
|
<ClInclude Include="spy.h">
|
||||||
<Filter>头文件</Filter>
|
<Filter>头文件</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="spy_types.h">
|
<ClInclude Include="spy_types.h">
|
||||||
<Filter>头文件</Filter>
|
<Filter>头文件</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="util.h">
|
<ClInclude Include="util.h">
|
||||||
<Filter>头文件</Filter>
|
<Filter>头文件</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\rpc\nanopb\pb.h">
|
<ClInclude Include="..\rpc\nanopb\pb.h">
|
||||||
<Filter>nnrpc</Filter>
|
<Filter>nnrpc</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\rpc\nanopb\pb_common.h">
|
<ClInclude Include="..\rpc\nanopb\pb_common.h">
|
||||||
<Filter>nnrpc</Filter>
|
<Filter>nnrpc</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\rpc\nanopb\pb_decode.h">
|
<ClInclude Include="..\rpc\nanopb\pb_decode.h">
|
||||||
<Filter>nnrpc</Filter>
|
<Filter>nnrpc</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\rpc\nanopb\pb_encode.h">
|
<ClInclude Include="..\rpc\nanopb\pb_encode.h">
|
||||||
<Filter>nnrpc</Filter>
|
<Filter>nnrpc</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\rpc\proto\wcf.pb.h">
|
<ClInclude Include="..\rpc\proto\wcf.pb.h">
|
||||||
<Filter>nnrpc</Filter>
|
<Filter>nnrpc</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\rpc\pb_util.h">
|
<ClInclude Include="..\rpc\pb_util.h">
|
||||||
<Filter>nnrpc</Filter>
|
<Filter>nnrpc</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\rpc\pb_types.h">
|
<ClInclude Include="..\rpc\pb_types.h">
|
||||||
<Filter>nnrpc</Filter>
|
<Filter>nnrpc</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="chatroom_mgmt.h">
|
<ClInclude Include="chatroom_mgmt.h">
|
||||||
<Filter>头文件</Filter>
|
<Filter>头文件</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="user_info.h">
|
<ClInclude Include="user_info.h">
|
||||||
<Filter>头文件</Filter>
|
<Filter>头文件</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="resource.h">
|
<ClInclude Include="resource.h">
|
||||||
<Filter>头文件</Filter>
|
<Filter>头文件</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="decrypt_image.h">
|
<ClInclude Include="decrypt_image.h">
|
||||||
<Filter>头文件</Filter>
|
<Filter>头文件</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="receive_transfer.h">
|
<ClInclude Include="receive_transfer.h">
|
||||||
<Filter>头文件</Filter>
|
<Filter>头文件</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="sqlite3.h">
|
<ClInclude Include="sqlite3.h">
|
||||||
<Filter>头文件</Filter>
|
<Filter>头文件</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="dllmain.cpp">
|
<ClCompile Include="dllmain.cpp">
|
||||||
<Filter>源文件</Filter>
|
<Filter>源文件</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="rpc_server.cpp">
|
<ClCompile Include="rpc_server.cpp">
|
||||||
<Filter>源文件</Filter>
|
<Filter>源文件</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="log.cpp">
|
<ClCompile Include="log.cpp">
|
||||||
<Filter>源文件</Filter>
|
<Filter>源文件</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="exec_sql.cpp">
|
<ClCompile Include="exec_sql.cpp">
|
||||||
<Filter>源文件</Filter>
|
<Filter>源文件</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="contact_mgmt.cpp">
|
<ClCompile Include="contact_mgmt.cpp">
|
||||||
<Filter>源文件</Filter>
|
<Filter>源文件</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="load_calls.cpp">
|
<ClCompile Include="load_calls.cpp">
|
||||||
<Filter>源文件</Filter>
|
<Filter>源文件</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="receive_msg.cpp">
|
<ClCompile Include="receive_msg.cpp">
|
||||||
<Filter>源文件</Filter>
|
<Filter>源文件</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="send_msg.cpp">
|
<ClCompile Include="send_msg.cpp">
|
||||||
<Filter>源文件</Filter>
|
<Filter>源文件</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="spy.cpp">
|
<ClCompile Include="spy.cpp">
|
||||||
<Filter>源文件</Filter>
|
<Filter>源文件</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="util.cpp">
|
<ClCompile Include="util.cpp">
|
||||||
<Filter>源文件</Filter>
|
<Filter>源文件</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\rpc\nanopb\pb_common.c">
|
<ClCompile Include="..\rpc\nanopb\pb_common.c">
|
||||||
<Filter>nnrpc</Filter>
|
<Filter>nnrpc</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\rpc\nanopb\pb_decode.c">
|
<ClCompile Include="..\rpc\nanopb\pb_decode.c">
|
||||||
<Filter>nnrpc</Filter>
|
<Filter>nnrpc</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\rpc\nanopb\pb_encode.c">
|
<ClCompile Include="..\rpc\nanopb\pb_encode.c">
|
||||||
<Filter>nnrpc</Filter>
|
<Filter>nnrpc</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\rpc\proto\wcf.pb.c">
|
<ClCompile Include="..\rpc\proto\wcf.pb.c">
|
||||||
<Filter>nnrpc</Filter>
|
<Filter>nnrpc</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\rpc\pb_util.cpp">
|
<ClCompile Include="..\rpc\pb_util.cpp">
|
||||||
<Filter>nnrpc</Filter>
|
<Filter>nnrpc</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="chatroom_mgmt.cpp">
|
<ClCompile Include="chatroom_mgmt.cpp">
|
||||||
<Filter>源文件</Filter>
|
<Filter>源文件</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="user_info.cpp">
|
<ClCompile Include="user_info.cpp">
|
||||||
<Filter>源文件</Filter>
|
<Filter>源文件</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="decrypt_image.cpp">
|
<ClCompile Include="decrypt_image.cpp">
|
||||||
<Filter>源文件</Filter>
|
<Filter>源文件</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="receive_transfer.cpp">
|
<ClCompile Include="receive_transfer.cpp">
|
||||||
<Filter>源文件</Filter>
|
<Filter>源文件</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="spy.def">
|
<None Include="spy.def">
|
||||||
<Filter>源文件</Filter>
|
<Filter>源文件</Filter>
|
||||||
</None>
|
</None>
|
||||||
<None Include="..\rpc\proto\wcf.proto">
|
<None Include="..\rpc\proto\wcf.proto">
|
||||||
<Filter>nnrpc</Filter>
|
<Filter>nnrpc</Filter>
|
||||||
</None>
|
</None>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="spy.rc">
|
<ResourceCompile Include="spy.rc">
|
||||||
<Filter>资源文件</Filter>
|
<Filter>资源文件</Filter>
|
||||||
</ResourceCompile>
|
</ResourceCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<PropertyGroup />
|
<PropertyGroup />
|
||||||
</Project>
|
</Project>
|
@ -1,5 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define WIN32_LEAN_AND_MEAN // 从 Windows 头文件中排除极少使用的内容
|
#define WIN32_LEAN_AND_MEAN // 从 Windows 头文件中排除极少使用的内容
|
||||||
// Windows 头文件
|
// Windows 头文件
|
||||||
#include <windows.h>
|
#include <windows.h>
|
@ -1,39 +1,39 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
#include "load_calls.h"
|
#include "load_calls.h"
|
||||||
|
|
||||||
#define SUPPORT_VERSION L"3.9.2.23"
|
#define SUPPORT_VERSION L"3.9.2.23"
|
||||||
WxCalls_t wxCalls = {
|
WxCalls_t wxCalls = {
|
||||||
0x2FFD638, // Login Status
|
0x2FFD638, // Login Status
|
||||||
{ 0x2FFD484, 0x2FFD590, 0x2FFD500, 0x30238CC }, // User Info: wxid, nickname, mobile, home
|
{ 0x2FFD484, 0x2FFD590, 0x2FFD500, 0x30238CC }, // User Info: wxid, nickname, mobile, home
|
||||||
{ 0x768140, 0xCE6C80, 0x756960 }, // Send Message
|
{ 0x768140, 0xCE6C80, 0x756960 }, // Send Message
|
||||||
/* Receive Message:
|
/* Receive Message:
|
||||||
Hook, call, type, self, id, msgXml, roomId, wxId, content, thumb, extra */
|
Hook, call, type, self, id, msgXml, roomId, wxId, content, thumb, extra */
|
||||||
{ 0xD19A0B, 0x756960, 0x38, 0x3C, 0x194, 0x1FC, 0x48, 0x180, 0x70, 0x1A8, 0x1BC },
|
{ 0xD19A0B, 0x756960, 0x38, 0x3C, 0x194, 0x1FC, 0x48, 0x180, 0x70, 0x1A8, 0x1BC },
|
||||||
{ 0x768140, 0XF59E40, 0XCE6640, 0x756960 }, // Send Image Message
|
{ 0x768140, 0XF59E40, 0XCE6640, 0x756960 }, // Send Image Message
|
||||||
{ 0x76AE20, 0xF59E40, 0xB6D1F0, 0x756960 }, // Send File Message
|
{ 0x76AE20, 0xF59E40, 0xB6D1F0, 0x756960 }, // Send File Message
|
||||||
{ 0xB8A70, 0x3ED5E0, 0x107F00, 0x3ED7B0, 0x2386FE4 }, // Send xml Message
|
{ 0xB8A70, 0x3ED5E0, 0x107F00, 0x3ED7B0, 0x2386FE4 }, // Send xml Message
|
||||||
{ 0x771980, 0x4777E0, 0x239E888 }, // Send Emotion Message
|
{ 0x771980, 0x4777E0, 0x239E888 }, // Send Emotion Message
|
||||||
/* Get Contacts:
|
/* Get Contacts:
|
||||||
call1, call2, wxId, Code, Remark,Name, Gender, Country, Province, City*/
|
call1, call2, wxId, Code, Remark,Name, Gender, Country, Province, City*/
|
||||||
{ 0x75A4A0, 0xC089F0, 0x10, 0x24, 0x58, 0x6C, 0x0E, 0x00, 0x00, 0x00 },
|
{ 0x75A4A0, 0xC089F0, 0x10, 0x24, 0x58, 0x6C, 0x0E, 0x00, 0x00, 0x00 },
|
||||||
/* Exec Sql:
|
/* Exec Sql:
|
||||||
Exec, base, start, end, slot, name*/
|
Exec, base, start, end, slot, name*/
|
||||||
{ 0x141BDF0, 0x2366934, 0x1428, 0x142C, 0x3C, 0x50 },
|
{ 0x141BDF0, 0x2366934, 0x1428, 0x142C, 0x3C, 0x50 },
|
||||||
{ 0xA17D50, 0xF59E40, 0xA18BD0, 0xA17E70 }, // Accept New Friend application
|
{ 0xA17D50, 0xF59E40, 0xA18BD0, 0xA17E70 }, // Accept New Friend application
|
||||||
{ 0x78CF20, 0xF59E40, 0xBD1DC0 }, // Add chatroom members
|
{ 0x78CF20, 0xF59E40, 0xBD1DC0 }, // Add chatroom members
|
||||||
{ 0x78CF20, 0xF59E40, 0xBD22A0 }, // Delete chatroom members
|
{ 0x78CF20, 0xF59E40, 0xBD22A0 }, // Delete chatroom members
|
||||||
{ 0x7B2E60, 0x15E2C20, 0x79C250 } // Receive transfer
|
{ 0x7B2E60, 0x15E2C20, 0x79C250 } // Receive transfer
|
||||||
};
|
};
|
||||||
|
|
||||||
int LoadCalls(const wchar_t *version, WxCalls_t *calls)
|
int LoadCalls(const wchar_t *version, WxCalls_t *calls)
|
||||||
{
|
{
|
||||||
if (wcscmp(version, SUPPORT_VERSION) != 0) {
|
if (wcscmp(version, SUPPORT_VERSION) != 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy_s(calls, sizeof(WxCalls_t), &wxCalls, sizeof(WxCalls_t));
|
memcpy_s(calls, sizeof(WxCalls_t), &wxCalls, sizeof(WxCalls_t));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
@ -1,5 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "spy_types.h"
|
#include "spy_types.h"
|
||||||
|
|
||||||
int LoadCalls(const wchar_t *version, WxCalls_t *calls);
|
int LoadCalls(const wchar_t *version, WxCalls_t *calls);
|
@ -1,175 +1,175 @@
|
|||||||
#pragma execution_character_set("utf-8")
|
#pragma execution_character_set("utf-8")
|
||||||
|
|
||||||
#include "framework.h"
|
#include "framework.h"
|
||||||
#include <condition_variable>
|
#include <condition_variable>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include <queue>
|
#include <queue>
|
||||||
|
|
||||||
#include "load_calls.h"
|
#include "load_calls.h"
|
||||||
#include "receive_msg.h"
|
#include "receive_msg.h"
|
||||||
#include "user_info.h"
|
#include "user_info.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|
||||||
// Defined in rpc_server.cpp
|
// Defined in rpc_server.cpp
|
||||||
extern bool gIsListening;
|
extern bool gIsListening;
|
||||||
extern mutex gMutex;
|
extern mutex gMutex;
|
||||||
extern condition_variable gCV;
|
extern condition_variable gCV;
|
||||||
extern queue<WxMsg_t> gMsgQueue;
|
extern queue<WxMsg_t> gMsgQueue;
|
||||||
|
|
||||||
// Defined in spy.cpp
|
// Defined in spy.cpp
|
||||||
extern WxCalls_t g_WxCalls;
|
extern WxCalls_t g_WxCalls;
|
||||||
extern DWORD g_WeChatWinDllAddr;
|
extern DWORD g_WeChatWinDllAddr;
|
||||||
|
|
||||||
static DWORD reg_buffer = 0;
|
static DWORD reg_buffer = 0;
|
||||||
static DWORD recvMsgHookAddr = 0;
|
static DWORD recvMsgHookAddr = 0;
|
||||||
static DWORD recvMsgCallAddr = 0;
|
static DWORD recvMsgCallAddr = 0;
|
||||||
static DWORD recvMsgJumpBackAddr = 0;
|
static DWORD recvMsgJumpBackAddr = 0;
|
||||||
static CHAR recvMsgBackupCode[5] = { 0 };
|
static CHAR recvMsgBackupCode[5] = { 0 };
|
||||||
|
|
||||||
MsgTypes_t GetMsgTypes()
|
MsgTypes_t GetMsgTypes()
|
||||||
{
|
{
|
||||||
const MsgTypes_t m = {
|
const MsgTypes_t m = {
|
||||||
{ 0x01, "文字" },
|
{ 0x01, "文字" },
|
||||||
{ 0x03, "图片" },
|
{ 0x03, "图片" },
|
||||||
{ 0x22, "语音" },
|
{ 0x22, "语音" },
|
||||||
{ 0x25, "好友确认" },
|
{ 0x25, "好友确认" },
|
||||||
{ 0x28, "POSSIBLEFRIEND_MSG" },
|
{ 0x28, "POSSIBLEFRIEND_MSG" },
|
||||||
{ 0x2A, "名片" },
|
{ 0x2A, "名片" },
|
||||||
{ 0x2B, "视频" },
|
{ 0x2B, "视频" },
|
||||||
{ 0x2F, "石头剪刀布 | 表情图片" },
|
{ 0x2F, "石头剪刀布 | 表情图片" },
|
||||||
{ 0x30, "位置" },
|
{ 0x30, "位置" },
|
||||||
{ 0x31, "共享实时位置、文件、转账、链接" },
|
{ 0x31, "共享实时位置、文件、转账、链接" },
|
||||||
{ 0x32, "VOIPMSG" },
|
{ 0x32, "VOIPMSG" },
|
||||||
{ 0x33, "微信初始化" },
|
{ 0x33, "微信初始化" },
|
||||||
{ 0x34, "VOIPNOTIFY" },
|
{ 0x34, "VOIPNOTIFY" },
|
||||||
{ 0x35, "VOIPINVITE" },
|
{ 0x35, "VOIPINVITE" },
|
||||||
{ 0x3E, "小视频" },
|
{ 0x3E, "小视频" },
|
||||||
{ 0x42, "微信红包" },
|
{ 0x42, "微信红包" },
|
||||||
{ 0x270F, "SYSNOTICE" },
|
{ 0x270F, "SYSNOTICE" },
|
||||||
{ 0x2710, "红包、系统消息" },
|
{ 0x2710, "红包、系统消息" },
|
||||||
{ 0x2712, "撤回消息" },
|
{ 0x2712, "撤回消息" },
|
||||||
{ 0x100031, "搜狗表情" },
|
{ 0x100031, "搜狗表情" },
|
||||||
{ 0x1000031, "链接" },
|
{ 0x1000031, "链接" },
|
||||||
{ 0x1A000031, "微信红包" },
|
{ 0x1A000031, "微信红包" },
|
||||||
{ 0x20010031, "红包封面" },
|
{ 0x20010031, "红包封面" },
|
||||||
{ 0x2D000031, "视频号视频" },
|
{ 0x2D000031, "视频号视频" },
|
||||||
{ 0x2E000031, "视频号名片" },
|
{ 0x2E000031, "视频号名片" },
|
||||||
{ 0x31000031, "引用消息" },
|
{ 0x31000031, "引用消息" },
|
||||||
{ 0x37000031, "拍一拍" },
|
{ 0x37000031, "拍一拍" },
|
||||||
{ 0x3A000031, "视频号直播" },
|
{ 0x3A000031, "视频号直播" },
|
||||||
{ 0x3A100031, "商品链接" },
|
{ 0x3A100031, "商品链接" },
|
||||||
{ 0x3A200031, "视频号直播" },
|
{ 0x3A200031, "视频号直播" },
|
||||||
{ 0x3E000031, "音乐链接" },
|
{ 0x3E000031, "音乐链接" },
|
||||||
{ 0x41000031, "文件" },
|
{ 0x41000031, "文件" },
|
||||||
};
|
};
|
||||||
|
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HookAddress(DWORD hookAddr, LPVOID funcAddr, CHAR recvMsgBackupCode[5])
|
void HookAddress(DWORD hookAddr, LPVOID funcAddr, CHAR recvMsgBackupCode[5])
|
||||||
{
|
{
|
||||||
// 组装跳转数据
|
// 组装跳转数据
|
||||||
BYTE jmpCode[5] = { 0 };
|
BYTE jmpCode[5] = { 0 };
|
||||||
jmpCode[0] = 0xE9;
|
jmpCode[0] = 0xE9;
|
||||||
|
|
||||||
// 计算偏移
|
// 计算偏移
|
||||||
*(DWORD *)&jmpCode[1] = (DWORD)funcAddr - hookAddr - 5;
|
*(DWORD *)&jmpCode[1] = (DWORD)funcAddr - hookAddr - 5;
|
||||||
|
|
||||||
// 备份原来的代码
|
// 备份原来的代码
|
||||||
ReadProcessMemory(GetCurrentProcess(), (LPVOID)hookAddr, recvMsgBackupCode, 5, 0);
|
ReadProcessMemory(GetCurrentProcess(), (LPVOID)hookAddr, recvMsgBackupCode, 5, 0);
|
||||||
// 写入新的代码
|
// 写入新的代码
|
||||||
WriteProcessMemory(GetCurrentProcess(), (LPVOID)hookAddr, jmpCode, 5, 0);
|
WriteProcessMemory(GetCurrentProcess(), (LPVOID)hookAddr, jmpCode, 5, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UnHookAddress(DWORD hookAddr, CHAR restoreCode[5])
|
void UnHookAddress(DWORD hookAddr, CHAR restoreCode[5])
|
||||||
{
|
{
|
||||||
WriteProcessMemory(GetCurrentProcess(), (LPVOID)hookAddr, restoreCode, 5, 0);
|
WriteProcessMemory(GetCurrentProcess(), (LPVOID)hookAddr, restoreCode, 5, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DispatchMsg(DWORD reg)
|
void DispatchMsg(DWORD reg)
|
||||||
{
|
{
|
||||||
WxMsg_t wxMsg;
|
WxMsg_t wxMsg;
|
||||||
|
|
||||||
wxMsg.type = GET_DWORD(reg + g_WxCalls.recvMsg.type);
|
wxMsg.type = GET_DWORD(reg + g_WxCalls.recvMsg.type);
|
||||||
wxMsg.is_self = GET_DWORD(reg + g_WxCalls.recvMsg.isSelf);
|
wxMsg.is_self = GET_DWORD(reg + g_WxCalls.recvMsg.isSelf);
|
||||||
wxMsg.id = GetStringByStrAddr(reg + g_WxCalls.recvMsg.msgId);
|
wxMsg.id = GetStringByStrAddr(reg + g_WxCalls.recvMsg.msgId);
|
||||||
wxMsg.xml = GetStringByStrAddr(reg + g_WxCalls.recvMsg.msgXml);
|
wxMsg.xml = GetStringByStrAddr(reg + g_WxCalls.recvMsg.msgXml);
|
||||||
|
|
||||||
string roomid = GetStringByWstrAddr(reg + g_WxCalls.recvMsg.roomId);
|
string roomid = GetStringByWstrAddr(reg + g_WxCalls.recvMsg.roomId);
|
||||||
if (roomid.find("@chatroom") != string::npos) { // 群 ID 的格式为 xxxxxxxxxxx@chatroom
|
if (roomid.find("@chatroom") != string::npos) { // 群 ID 的格式为 xxxxxxxxxxx@chatroom
|
||||||
wxMsg.is_group = true;
|
wxMsg.is_group = true;
|
||||||
wxMsg.roomid = roomid;
|
wxMsg.roomid = roomid;
|
||||||
if (wxMsg.is_self) {
|
if (wxMsg.is_self) {
|
||||||
wxMsg.sender = GetSelfWxid();
|
wxMsg.sender = GetSelfWxid();
|
||||||
} else {
|
} else {
|
||||||
wxMsg.sender = GetStringByStrAddr(reg + g_WxCalls.recvMsg.wxId);
|
wxMsg.sender = GetStringByStrAddr(reg + g_WxCalls.recvMsg.wxId);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
wxMsg.is_group = false;
|
wxMsg.is_group = false;
|
||||||
if (wxMsg.is_self) {
|
if (wxMsg.is_self) {
|
||||||
wxMsg.sender = GetSelfWxid();
|
wxMsg.sender = GetSelfWxid();
|
||||||
} else {
|
} else {
|
||||||
wxMsg.sender = roomid;
|
wxMsg.sender = roomid;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
wxMsg.content = GetStringByWstrAddr(reg + g_WxCalls.recvMsg.content);
|
wxMsg.content = GetStringByWstrAddr(reg + g_WxCalls.recvMsg.content);
|
||||||
|
|
||||||
wxMsg.thumb = GetStringByStrAddr(reg + g_WxCalls.recvMsg.thumb);
|
wxMsg.thumb = GetStringByStrAddr(reg + g_WxCalls.recvMsg.thumb);
|
||||||
if (!wxMsg.thumb.empty()) {
|
if (!wxMsg.thumb.empty()) {
|
||||||
wxMsg.thumb = GetHomePath() + wxMsg.thumb;
|
wxMsg.thumb = GetHomePath() + wxMsg.thumb;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxMsg.extra = GetStringByStrAddr(reg + g_WxCalls.recvMsg.extra);
|
wxMsg.extra = GetStringByStrAddr(reg + g_WxCalls.recvMsg.extra);
|
||||||
if (!wxMsg.extra.empty()) {
|
if (!wxMsg.extra.empty()) {
|
||||||
wxMsg.extra = GetHomePath() + wxMsg.extra;
|
wxMsg.extra = GetHomePath() + wxMsg.extra;
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
unique_lock<mutex> lock(gMutex);
|
unique_lock<mutex> lock(gMutex);
|
||||||
gMsgQueue.push(wxMsg); // 推送到队列
|
gMsgQueue.push(wxMsg); // 推送到队列
|
||||||
}
|
}
|
||||||
|
|
||||||
gCV.notify_all(); // 通知各方消息就绪
|
gCV.notify_all(); // 通知各方消息就绪
|
||||||
}
|
}
|
||||||
|
|
||||||
__declspec(naked) void RecieveMsgFunc()
|
__declspec(naked) void RecieveMsgFunc()
|
||||||
{
|
{
|
||||||
__asm {
|
__asm {
|
||||||
pushad
|
pushad
|
||||||
pushfd
|
pushfd
|
||||||
push ecx
|
push ecx
|
||||||
call DispatchMsg
|
call DispatchMsg
|
||||||
add esp, 0x4
|
add esp, 0x4
|
||||||
popfd
|
popfd
|
||||||
popad
|
popad
|
||||||
call recvMsgCallAddr // 这个为被覆盖的call
|
call recvMsgCallAddr // 这个为被覆盖的call
|
||||||
jmp recvMsgJumpBackAddr // 跳回被HOOK指令的下一条指令
|
jmp recvMsgJumpBackAddr // 跳回被HOOK指令的下一条指令
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ListenMessage()
|
void ListenMessage()
|
||||||
{
|
{
|
||||||
// DbgMsg("ListenMessage");
|
// DbgMsg("ListenMessage");
|
||||||
// OutputDebugString(L"ListenMessage\n");
|
// OutputDebugString(L"ListenMessage\n");
|
||||||
// MessageBox(NULL, L"ListenMessage", L"ListenMessage", 0);
|
// MessageBox(NULL, L"ListenMessage", L"ListenMessage", 0);
|
||||||
if (gIsListening || (g_WeChatWinDllAddr == 0)) {
|
if (gIsListening || (g_WeChatWinDllAddr == 0)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
recvMsgHookAddr = g_WeChatWinDllAddr + g_WxCalls.recvMsg.hook;
|
recvMsgHookAddr = g_WeChatWinDllAddr + g_WxCalls.recvMsg.hook;
|
||||||
recvMsgCallAddr = g_WeChatWinDllAddr + g_WxCalls.recvMsg.call;
|
recvMsgCallAddr = g_WeChatWinDllAddr + g_WxCalls.recvMsg.call;
|
||||||
recvMsgJumpBackAddr = recvMsgHookAddr + 5;
|
recvMsgJumpBackAddr = recvMsgHookAddr + 5;
|
||||||
|
|
||||||
HookAddress(recvMsgHookAddr, RecieveMsgFunc, recvMsgBackupCode);
|
HookAddress(recvMsgHookAddr, RecieveMsgFunc, recvMsgBackupCode);
|
||||||
gIsListening = true;
|
gIsListening = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UnListenMessage()
|
void UnListenMessage()
|
||||||
{
|
{
|
||||||
if (!gIsListening) {
|
if (!gIsListening) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
UnHookAddress(recvMsgHookAddr, recvMsgBackupCode);
|
UnHookAddress(recvMsgHookAddr, recvMsgBackupCode);
|
||||||
gIsListening = false;
|
gIsListening = false;
|
||||||
}
|
}
|
@ -1,10 +1,10 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifdef SPY_EXPORTS
|
#ifdef SPY_EXPORTS
|
||||||
#define SPY_API __declspec(dllexport)
|
#define SPY_API __declspec(dllexport)
|
||||||
#else
|
#else
|
||||||
#define SPY_API __declspec(dllimport)
|
#define SPY_API __declspec(dllimport)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int RpcStartServer(int port);
|
int RpcStartServer(int port);
|
||||||
int RpcStopServer();
|
int RpcStopServer();
|
@ -1,342 +1,342 @@
|
|||||||
#include "framework.h"
|
#include "framework.h"
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "send_msg.h"
|
#include "send_msg.h"
|
||||||
#include "spy_types.h"
|
#include "spy_types.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|
||||||
extern HANDLE g_hEvent;
|
extern HANDLE g_hEvent;
|
||||||
extern WxCalls_t g_WxCalls;
|
extern WxCalls_t g_WxCalls;
|
||||||
extern DWORD g_WeChatWinDllAddr;
|
extern DWORD g_WeChatWinDllAddr;
|
||||||
extern string GetSelfWxid(); // Defined in spy.cpp
|
extern string GetSelfWxid(); // Defined in spy.cpp
|
||||||
|
|
||||||
void SendTextMessage(string wxid, string msg, string atWxids)
|
void SendTextMessage(string wxid, string msg, string atWxids)
|
||||||
{
|
{
|
||||||
int success = 0;
|
int success = 0;
|
||||||
char buffer[0x2D8] = { 0 };
|
char buffer[0x2D8] = { 0 };
|
||||||
WxString_t wxMsg = { 0 };
|
WxString_t wxMsg = { 0 };
|
||||||
WxString_t wxWxid = { 0 };
|
WxString_t wxWxid = { 0 };
|
||||||
|
|
||||||
// 发送消息Call地址 = 微信基址 + 偏移
|
// 发送消息Call地址 = 微信基址 + 偏移
|
||||||
DWORD sendCall1 = g_WeChatWinDllAddr + g_WxCalls.sendText.call1;
|
DWORD sendCall1 = g_WeChatWinDllAddr + g_WxCalls.sendText.call1;
|
||||||
DWORD sendCall2 = g_WeChatWinDllAddr + g_WxCalls.sendText.call2;
|
DWORD sendCall2 = g_WeChatWinDllAddr + g_WxCalls.sendText.call2;
|
||||||
DWORD sendCall3 = g_WeChatWinDllAddr + g_WxCalls.sendText.call3;
|
DWORD sendCall3 = g_WeChatWinDllAddr + g_WxCalls.sendText.call3;
|
||||||
|
|
||||||
wstring wsWxid = String2Wstring(wxid);
|
wstring wsWxid = String2Wstring(wxid);
|
||||||
wstring wsMsg = String2Wstring(msg);
|
wstring wsMsg = String2Wstring(msg);
|
||||||
|
|
||||||
wxMsg.text = (wchar_t *)wsMsg.c_str();
|
wxMsg.text = (wchar_t *)wsMsg.c_str();
|
||||||
wxMsg.size = wsMsg.size();
|
wxMsg.size = wsMsg.size();
|
||||||
wxMsg.capacity = wsMsg.capacity();
|
wxMsg.capacity = wsMsg.capacity();
|
||||||
|
|
||||||
wxWxid.text = (wchar_t *)wsWxid.c_str();
|
wxWxid.text = (wchar_t *)wsWxid.c_str();
|
||||||
wxWxid.size = wsWxid.size();
|
wxWxid.size = wsWxid.size();
|
||||||
wxWxid.capacity = wsWxid.capacity();
|
wxWxid.capacity = wsWxid.capacity();
|
||||||
|
|
||||||
vector<WxString_t> vTxtAtWxids;
|
vector<WxString_t> vTxtAtWxids;
|
||||||
if (!atWxids.empty()) {
|
if (!atWxids.empty()) {
|
||||||
vector<wstring> vAtWxids;
|
vector<wstring> vAtWxids;
|
||||||
wstringstream wss(String2Wstring(atWxids));
|
wstringstream wss(String2Wstring(atWxids));
|
||||||
while (wss.good()) {
|
while (wss.good()) {
|
||||||
wstring wstr;
|
wstring wstr;
|
||||||
getline(wss, wstr, L',');
|
getline(wss, wstr, L',');
|
||||||
vAtWxids.push_back(wstr);
|
vAtWxids.push_back(wstr);
|
||||||
WxString_t txtAtWxid = { 0 };
|
WxString_t txtAtWxid = { 0 };
|
||||||
txtAtWxid.text = (wchar_t *)vAtWxids.back().c_str();
|
txtAtWxid.text = (wchar_t *)vAtWxids.back().c_str();
|
||||||
txtAtWxid.size = vAtWxids.back().size();
|
txtAtWxid.size = vAtWxids.back().size();
|
||||||
txtAtWxid.capacity = vAtWxids.back().capacity();
|
txtAtWxid.capacity = vAtWxids.back().capacity();
|
||||||
vTxtAtWxids.push_back(txtAtWxid);
|
vTxtAtWxids.push_back(txtAtWxid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
__asm
|
__asm
|
||||||
{
|
{
|
||||||
pushad;
|
pushad;
|
||||||
call sendCall1;
|
call sendCall1;
|
||||||
push 0x0;
|
push 0x0;
|
||||||
push 0x0;
|
push 0x0;
|
||||||
push 0x0;
|
push 0x0;
|
||||||
push 0x1;
|
push 0x1;
|
||||||
lea eax, vTxtAtWxids;
|
lea eax, vTxtAtWxids;
|
||||||
push eax;
|
push eax;
|
||||||
lea eax, wxMsg;
|
lea eax, wxMsg;
|
||||||
push eax;
|
push eax;
|
||||||
lea edx, wxWxid;
|
lea edx, wxWxid;
|
||||||
lea ecx, buffer;
|
lea ecx, buffer;
|
||||||
call sendCall2;
|
call sendCall2;
|
||||||
mov success, eax;
|
mov success, eax;
|
||||||
add esp, 0x18;
|
add esp, 0x18;
|
||||||
lea ecx, buffer;
|
lea ecx, buffer;
|
||||||
call sendCall3;
|
call sendCall3;
|
||||||
popad;
|
popad;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SendImageMessage(string wxid, string path)
|
void SendImageMessage(string wxid, string path)
|
||||||
{
|
{
|
||||||
if (g_WeChatWinDllAddr == 0) {
|
if (g_WeChatWinDllAddr == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int success = 0;
|
int success = 0;
|
||||||
DWORD tmpEAX = 0;
|
DWORD tmpEAX = 0;
|
||||||
char buf[0x2D8] = { 0 };
|
char buf[0x2D8] = { 0 };
|
||||||
WxString_t imgWxid = { 0 };
|
WxString_t imgWxid = { 0 };
|
||||||
WxString_t imgPath = { 0 };
|
WxString_t imgPath = { 0 };
|
||||||
WxString_t nullbuffer = { 0 };
|
WxString_t nullbuffer = { 0 };
|
||||||
|
|
||||||
wstring wsWxid = String2Wstring(wxid);
|
wstring wsWxid = String2Wstring(wxid);
|
||||||
wstring wspath = String2Wstring(path);
|
wstring wspath = String2Wstring(path);
|
||||||
|
|
||||||
imgWxid.text = (wchar_t *)wsWxid.c_str();
|
imgWxid.text = (wchar_t *)wsWxid.c_str();
|
||||||
imgWxid.size = wsWxid.size();
|
imgWxid.size = wsWxid.size();
|
||||||
imgWxid.capacity = wsWxid.capacity();
|
imgWxid.capacity = wsWxid.capacity();
|
||||||
|
|
||||||
imgPath.text = (wchar_t *)wspath.c_str();
|
imgPath.text = (wchar_t *)wspath.c_str();
|
||||||
imgPath.size = wspath.size();
|
imgPath.size = wspath.size();
|
||||||
imgPath.capacity = wspath.capacity();
|
imgPath.capacity = wspath.capacity();
|
||||||
|
|
||||||
// 发送图片Call地址 = 微信基址 + 偏移
|
// 发送图片Call地址 = 微信基址 + 偏移
|
||||||
DWORD sendCall1 = g_WeChatWinDllAddr + g_WxCalls.sendImg.call1;
|
DWORD sendCall1 = g_WeChatWinDllAddr + g_WxCalls.sendImg.call1;
|
||||||
DWORD sendCall2 = g_WeChatWinDllAddr + g_WxCalls.sendImg.call2;
|
DWORD sendCall2 = g_WeChatWinDllAddr + g_WxCalls.sendImg.call2;
|
||||||
DWORD sendCall3 = g_WeChatWinDllAddr + g_WxCalls.sendImg.call3;
|
DWORD sendCall3 = g_WeChatWinDllAddr + g_WxCalls.sendImg.call3;
|
||||||
DWORD sendCall4 = g_WeChatWinDllAddr + g_WxCalls.sendImg.call4;
|
DWORD sendCall4 = g_WeChatWinDllAddr + g_WxCalls.sendImg.call4;
|
||||||
|
|
||||||
__asm {
|
__asm {
|
||||||
pushad;
|
pushad;
|
||||||
call sendCall1;
|
call sendCall1;
|
||||||
sub esp,0x14;
|
sub esp,0x14;
|
||||||
mov tmpEAX,eax;
|
mov tmpEAX,eax;
|
||||||
lea eax,nullbuffer;
|
lea eax,nullbuffer;
|
||||||
mov ecx,esp;
|
mov ecx,esp;
|
||||||
lea edi,imgPath;
|
lea edi,imgPath;
|
||||||
push eax;
|
push eax;
|
||||||
call sendCall2;
|
call sendCall2;
|
||||||
mov ecx,dword ptr [tmpEAX];
|
mov ecx,dword ptr [tmpEAX];
|
||||||
lea eax,imgWxid;
|
lea eax,imgWxid;
|
||||||
push edi;
|
push edi;
|
||||||
push eax;
|
push eax;
|
||||||
lea eax,buf;
|
lea eax,buf;
|
||||||
push eax;
|
push eax;
|
||||||
call sendCall3;
|
call sendCall3;
|
||||||
mov success,eax;
|
mov success,eax;
|
||||||
lea ecx,buf;
|
lea ecx,buf;
|
||||||
call sendCall4;
|
call sendCall4;
|
||||||
popad;
|
popad;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SendFileMessage(string wxid, string path)
|
void SendFileMessage(string wxid, string path)
|
||||||
{
|
{
|
||||||
if (g_WeChatWinDllAddr == 0) {
|
if (g_WeChatWinDllAddr == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int success = 0;
|
int success = 0;
|
||||||
DWORD tmpEAX = 0;
|
DWORD tmpEAX = 0;
|
||||||
char buffer[0x2D8] = { 0 };
|
char buffer[0x2D8] = { 0 };
|
||||||
WxString_t fileWxid = { 0 };
|
WxString_t fileWxid = { 0 };
|
||||||
WxString_t filePath = { 0 };
|
WxString_t filePath = { 0 };
|
||||||
WxString_t nullbuffer = { 0 };
|
WxString_t nullbuffer = { 0 };
|
||||||
|
|
||||||
wstring wsWxid = String2Wstring(wxid);
|
wstring wsWxid = String2Wstring(wxid);
|
||||||
wstring wspath = String2Wstring(path);
|
wstring wspath = String2Wstring(path);
|
||||||
|
|
||||||
fileWxid.text = (wchar_t *)wsWxid.c_str();
|
fileWxid.text = (wchar_t *)wsWxid.c_str();
|
||||||
fileWxid.size = wsWxid.size();
|
fileWxid.size = wsWxid.size();
|
||||||
fileWxid.capacity = wsWxid.capacity();
|
fileWxid.capacity = wsWxid.capacity();
|
||||||
|
|
||||||
filePath.text = (wchar_t *)wspath.c_str();
|
filePath.text = (wchar_t *)wspath.c_str();
|
||||||
filePath.size = wspath.size();
|
filePath.size = wspath.size();
|
||||||
filePath.capacity = wspath.capacity();
|
filePath.capacity = wspath.capacity();
|
||||||
|
|
||||||
// 发送文件Call地址 = 微信基址 + 偏移
|
// 发送文件Call地址 = 微信基址 + 偏移
|
||||||
DWORD sendCall1 = g_WeChatWinDllAddr + g_WxCalls.sendFile.call1;
|
DWORD sendCall1 = g_WeChatWinDllAddr + g_WxCalls.sendFile.call1;
|
||||||
DWORD sendCall2 = g_WeChatWinDllAddr + g_WxCalls.sendFile.call2;
|
DWORD sendCall2 = g_WeChatWinDllAddr + g_WxCalls.sendFile.call2;
|
||||||
DWORD sendCall3 = g_WeChatWinDllAddr + g_WxCalls.sendFile.call3;
|
DWORD sendCall3 = g_WeChatWinDllAddr + g_WxCalls.sendFile.call3;
|
||||||
DWORD sendCall4 = g_WeChatWinDllAddr + g_WxCalls.sendFile.call4;
|
DWORD sendCall4 = g_WeChatWinDllAddr + g_WxCalls.sendFile.call4;
|
||||||
|
|
||||||
__asm {
|
__asm {
|
||||||
pushad;
|
pushad;
|
||||||
pushfd;
|
pushfd;
|
||||||
call sendCall1;
|
call sendCall1;
|
||||||
sub esp, 0x14;
|
sub esp, 0x14;
|
||||||
mov tmpEAX, eax;
|
mov tmpEAX, eax;
|
||||||
lea eax, nullbuffer;
|
lea eax, nullbuffer;
|
||||||
mov ecx, esp;
|
mov ecx, esp;
|
||||||
push eax;
|
push eax;
|
||||||
call sendCall2;
|
call sendCall2;
|
||||||
push 0x0;
|
push 0x0;
|
||||||
sub esp, 0x14;
|
sub esp, 0x14;
|
||||||
mov edi, esp;
|
mov edi, esp;
|
||||||
mov dword ptr[edi], 0;
|
mov dword ptr[edi], 0;
|
||||||
mov dword ptr[edi + 0x4], 0;
|
mov dword ptr[edi + 0x4], 0;
|
||||||
mov dword ptr[edi + 0x8], 0;
|
mov dword ptr[edi + 0x8], 0;
|
||||||
mov dword ptr[edi + 0xc], 0;
|
mov dword ptr[edi + 0xc], 0;
|
||||||
mov dword ptr[edi + 0x10], 0;
|
mov dword ptr[edi + 0x10], 0;
|
||||||
sub esp, 0x14;
|
sub esp, 0x14;
|
||||||
lea eax, filePath;
|
lea eax, filePath;
|
||||||
mov ecx, esp;
|
mov ecx, esp;
|
||||||
push eax;
|
push eax;
|
||||||
call sendCall2;
|
call sendCall2;
|
||||||
sub esp, 0x14;
|
sub esp, 0x14;
|
||||||
lea eax, fileWxid;
|
lea eax, fileWxid;
|
||||||
mov ecx, esp;
|
mov ecx, esp;
|
||||||
push eax;
|
push eax;
|
||||||
call sendCall2;
|
call sendCall2;
|
||||||
mov ecx, dword ptr[tmpEAX];
|
mov ecx, dword ptr[tmpEAX];
|
||||||
lea eax, buffer;
|
lea eax, buffer;
|
||||||
push eax;
|
push eax;
|
||||||
call sendCall3;
|
call sendCall3;
|
||||||
mov al, byte ptr[eax + 0x38];
|
mov al, byte ptr[eax + 0x38];
|
||||||
movzx eax, al;
|
movzx eax, al;
|
||||||
mov success, eax;
|
mov success, eax;
|
||||||
lea ecx, buffer;
|
lea ecx, buffer;
|
||||||
call sendCall4;
|
call sendCall4;
|
||||||
popfd;
|
popfd;
|
||||||
popad;
|
popad;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void SendXmlMessage(string receiver, string xml, string path, int type)
|
void SendXmlMessage(string receiver, string xml, string path, int type)
|
||||||
{
|
{
|
||||||
if (g_WeChatWinDllAddr == 0) {
|
if (g_WeChatWinDllAddr == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 发送消息Call地址 = 微信基址 + 偏移
|
// 发送消息Call地址 = 微信基址 + 偏移
|
||||||
DWORD sendXmlCall1 = g_WeChatWinDllAddr + g_WxCalls.sendXml.call1;
|
DWORD sendXmlCall1 = g_WeChatWinDllAddr + g_WxCalls.sendXml.call1;
|
||||||
DWORD sendXmlCall2 = g_WeChatWinDllAddr + g_WxCalls.sendXml.call2;
|
DWORD sendXmlCall2 = g_WeChatWinDllAddr + g_WxCalls.sendXml.call2;
|
||||||
DWORD sendXmlCall3 = g_WeChatWinDllAddr + g_WxCalls.sendXml.call3;
|
DWORD sendXmlCall3 = g_WeChatWinDllAddr + g_WxCalls.sendXml.call3;
|
||||||
DWORD sendXmlCall4 = g_WeChatWinDllAddr + g_WxCalls.sendXml.call4;
|
DWORD sendXmlCall4 = g_WeChatWinDllAddr + g_WxCalls.sendXml.call4;
|
||||||
DWORD sendXmlParam = g_WeChatWinDllAddr + g_WxCalls.sendXml.param;
|
DWORD sendXmlParam = g_WeChatWinDllAddr + g_WxCalls.sendXml.param;
|
||||||
|
|
||||||
char buffer[0xFF0] = { 0 };
|
char buffer[0xFF0] = { 0 };
|
||||||
char nullBuf[0x1C] = { 0 };
|
char nullBuf[0x1C] = { 0 };
|
||||||
WxString_t wxReceiver = { 0 };
|
WxString_t wxReceiver = { 0 };
|
||||||
WxString_t wxXml = { 0 };
|
WxString_t wxXml = { 0 };
|
||||||
WxString_t wxPath = { 0 };
|
WxString_t wxPath = { 0 };
|
||||||
WxString_t wxNull = { 0 };
|
WxString_t wxNull = { 0 };
|
||||||
WxString_t wxSender = { 0 };
|
WxString_t wxSender = { 0 };
|
||||||
|
|
||||||
wstring wsSender = String2Wstring(GetSelfWxid());
|
wstring wsSender = String2Wstring(GetSelfWxid());
|
||||||
wstring wsReceiver = String2Wstring(receiver);
|
wstring wsReceiver = String2Wstring(receiver);
|
||||||
wstring wsXml = String2Wstring(xml);
|
wstring wsXml = String2Wstring(xml);
|
||||||
|
|
||||||
wxReceiver.text = (wchar_t *)wsReceiver.c_str();
|
wxReceiver.text = (wchar_t *)wsReceiver.c_str();
|
||||||
wxReceiver.size = wsReceiver.size();
|
wxReceiver.size = wsReceiver.size();
|
||||||
wxReceiver.capacity = wsReceiver.capacity();
|
wxReceiver.capacity = wsReceiver.capacity();
|
||||||
|
|
||||||
wxXml.text = (wchar_t *)wsXml.c_str();
|
wxXml.text = (wchar_t *)wsXml.c_str();
|
||||||
wxXml.size = wsXml.size();
|
wxXml.size = wsXml.size();
|
||||||
wxXml.capacity = wsXml.capacity();
|
wxXml.capacity = wsXml.capacity();
|
||||||
|
|
||||||
wxSender.text = (wchar_t *)wsSender.c_str();
|
wxSender.text = (wchar_t *)wsSender.c_str();
|
||||||
wxSender.size = wsSender.size();
|
wxSender.size = wsSender.size();
|
||||||
wxSender.capacity = wsSender.capacity();
|
wxSender.capacity = wsSender.capacity();
|
||||||
|
|
||||||
if (!path.empty()) {
|
if (!path.empty()) {
|
||||||
wstring wsPath = String2Wstring(path);
|
wstring wsPath = String2Wstring(path);
|
||||||
wxPath.text = (wchar_t *)wsPath.c_str();
|
wxPath.text = (wchar_t *)wsPath.c_str();
|
||||||
wxPath.size = wsPath.size();
|
wxPath.size = wsPath.size();
|
||||||
wxPath.capacity = wsPath.capacity();
|
wxPath.capacity = wsPath.capacity();
|
||||||
}
|
}
|
||||||
|
|
||||||
DWORD sendtype = type;
|
DWORD sendtype = type;
|
||||||
__asm {
|
__asm {
|
||||||
pushad;
|
pushad;
|
||||||
pushfd;
|
pushfd;
|
||||||
lea ecx, buffer;
|
lea ecx, buffer;
|
||||||
call sendXmlCall1;
|
call sendXmlCall1;
|
||||||
mov eax, [sendtype];
|
mov eax, [sendtype];
|
||||||
push eax;
|
push eax;
|
||||||
lea eax, nullBuf;
|
lea eax, nullBuf;
|
||||||
lea edx, wxSender;
|
lea edx, wxSender;
|
||||||
push eax;
|
push eax;
|
||||||
lea eax, wxPath;
|
lea eax, wxPath;
|
||||||
push eax;
|
push eax;
|
||||||
lea eax, wxXml;
|
lea eax, wxXml;
|
||||||
push eax;
|
push eax;
|
||||||
lea edi, wxReceiver;
|
lea edi, wxReceiver;
|
||||||
push edi;
|
push edi;
|
||||||
lea ecx, buffer;
|
lea ecx, buffer;
|
||||||
call sendXmlCall2;
|
call sendXmlCall2;
|
||||||
add esp, 0x14;
|
add esp, 0x14;
|
||||||
lea eax, wxNull;
|
lea eax, wxNull;
|
||||||
push eax;
|
push eax;
|
||||||
lea ecx, buffer;
|
lea ecx, buffer;
|
||||||
call sendXmlCall3;
|
call sendXmlCall3;
|
||||||
mov dl, 0x0;
|
mov dl, 0x0;
|
||||||
lea ecx, buffer;
|
lea ecx, buffer;
|
||||||
push sendXmlParam;
|
push sendXmlParam;
|
||||||
push sendXmlParam;
|
push sendXmlParam;
|
||||||
call sendXmlCall4;
|
call sendXmlCall4;
|
||||||
add esp, 0x8;
|
add esp, 0x8;
|
||||||
popfd;
|
popfd;
|
||||||
popad;
|
popad;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SendEmotionMessage(string wxid, string path)
|
void SendEmotionMessage(string wxid, string path)
|
||||||
{
|
{
|
||||||
if (g_WeChatWinDllAddr == 0) {
|
if (g_WeChatWinDllAddr == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
char buffer[0x1C] = { 0 };
|
char buffer[0x1C] = { 0 };
|
||||||
WxString_t emoWxid = { 0 };
|
WxString_t emoWxid = { 0 };
|
||||||
WxString_t emoPath = { 0 };
|
WxString_t emoPath = { 0 };
|
||||||
WxString_t nullbuffer = { 0 };
|
WxString_t nullbuffer = { 0 };
|
||||||
|
|
||||||
wstring wsWxid = String2Wstring(wxid);
|
wstring wsWxid = String2Wstring(wxid);
|
||||||
wstring wspath = String2Wstring(path);
|
wstring wspath = String2Wstring(path);
|
||||||
|
|
||||||
emoWxid.text = (wchar_t *)wsWxid.c_str();
|
emoWxid.text = (wchar_t *)wsWxid.c_str();
|
||||||
emoWxid.size = wsWxid.size();
|
emoWxid.size = wsWxid.size();
|
||||||
emoWxid.capacity = wsWxid.capacity();
|
emoWxid.capacity = wsWxid.capacity();
|
||||||
|
|
||||||
emoPath.text = (wchar_t *)wspath.c_str();
|
emoPath.text = (wchar_t *)wspath.c_str();
|
||||||
emoPath.size = wspath.size();
|
emoPath.size = wspath.size();
|
||||||
emoPath.capacity = wspath.capacity();
|
emoPath.capacity = wspath.capacity();
|
||||||
|
|
||||||
// 发送文件Call地址 = 微信基址 + 偏移
|
// 发送文件Call地址 = 微信基址 + 偏移
|
||||||
DWORD sendCall1 = g_WeChatWinDllAddr + g_WxCalls.sendEmo.call1;
|
DWORD sendCall1 = g_WeChatWinDllAddr + g_WxCalls.sendEmo.call1;
|
||||||
DWORD sendCall2 = g_WeChatWinDllAddr + g_WxCalls.sendEmo.call2;
|
DWORD sendCall2 = g_WeChatWinDllAddr + g_WxCalls.sendEmo.call2;
|
||||||
DWORD sendCall3 = g_WeChatWinDllAddr + g_WxCalls.sendEmo.call3;
|
DWORD sendCall3 = g_WeChatWinDllAddr + g_WxCalls.sendEmo.call3;
|
||||||
|
|
||||||
__asm {
|
__asm {
|
||||||
pushad;
|
pushad;
|
||||||
pushfd;
|
pushfd;
|
||||||
mov ebx, dword ptr[sendCall3];
|
mov ebx, dword ptr[sendCall3];
|
||||||
lea eax, buffer;
|
lea eax, buffer;
|
||||||
push eax;
|
push eax;
|
||||||
push 0x0;
|
push 0x0;
|
||||||
sub esp, 0x14;
|
sub esp, 0x14;
|
||||||
mov esi, esp;
|
mov esi, esp;
|
||||||
mov dword ptr [esi], 0x0;
|
mov dword ptr [esi], 0x0;
|
||||||
mov dword ptr [esi+0x4], 0x0;
|
mov dword ptr [esi+0x4], 0x0;
|
||||||
mov dword ptr [esi+0x8], 0x0;
|
mov dword ptr [esi+0x8], 0x0;
|
||||||
mov dword ptr [esi+0xC], 0x0;
|
mov dword ptr [esi+0xC], 0x0;
|
||||||
mov dword ptr [esi+0x10], 0x0;
|
mov dword ptr [esi+0x10], 0x0;
|
||||||
push 0x2;
|
push 0x2;
|
||||||
lea eax, emoWxid;
|
lea eax, emoWxid;
|
||||||
sub esp, 0x14;
|
sub esp, 0x14;
|
||||||
mov ecx, esp;
|
mov ecx, esp;
|
||||||
push eax;
|
push eax;
|
||||||
call sendCall1;
|
call sendCall1;
|
||||||
sub esp, 0x14;
|
sub esp, 0x14;
|
||||||
mov esi, esp;
|
mov esi, esp;
|
||||||
mov dword ptr [esi], 0x0;
|
mov dword ptr [esi], 0x0;
|
||||||
mov dword ptr [esi+0x4], 0x0;
|
mov dword ptr [esi+0x4], 0x0;
|
||||||
mov dword ptr [esi+0x8], 0x0;
|
mov dword ptr [esi+0x8], 0x0;
|
||||||
mov dword ptr [esi+0xC], 0x0;
|
mov dword ptr [esi+0xC], 0x0;
|
||||||
mov dword ptr [esi+0x10], 0x0;
|
mov dword ptr [esi+0x10], 0x0;
|
||||||
sub esp, 0x14;
|
sub esp, 0x14;
|
||||||
mov ecx, esp;
|
mov ecx, esp;
|
||||||
lea eax, emoPath;
|
lea eax, emoPath;
|
||||||
push eax;
|
push eax;
|
||||||
call sendCall1;
|
call sendCall1;
|
||||||
mov ecx, ebx;
|
mov ecx, ebx;
|
||||||
call sendCall2;
|
call sendCall2;
|
||||||
popfd;
|
popfd;
|
||||||
popad;
|
popad;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,11 +1,11 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
void SendTextMessage(string wxid, string msg, string atWxids);
|
void SendTextMessage(string wxid, string msg, string atWxids);
|
||||||
void SendImageMessage(string wxid, string path);
|
void SendImageMessage(string wxid, string path);
|
||||||
void SendFileMessage(string wxid, string path);
|
void SendFileMessage(string wxid, string path);
|
||||||
void SendXmlMessage(string receiver, string xml, string path, int type);
|
void SendXmlMessage(string receiver, string xml, string path, int type);
|
||||||
void SendEmotionMessage(string wxid, string path);
|
void SendEmotionMessage(string wxid, string path);
|
@ -1,110 +1,110 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "framework.h"
|
#include "framework.h"
|
||||||
|
|
||||||
typedef struct UserInfoCall {
|
typedef struct UserInfoCall {
|
||||||
DWORD wxid;
|
DWORD wxid;
|
||||||
DWORD nickName;
|
DWORD nickName;
|
||||||
DWORD mobile;
|
DWORD mobile;
|
||||||
DWORD home;
|
DWORD home;
|
||||||
} UserInfoCall_t;
|
} UserInfoCall_t;
|
||||||
|
|
||||||
typedef struct RecvMsg {
|
typedef struct RecvMsg {
|
||||||
DWORD hook; // Hook地址
|
DWORD hook; // Hook地址
|
||||||
DWORD call; // Call地址
|
DWORD call; // Call地址
|
||||||
DWORD type; // 消息类型地址
|
DWORD type; // 消息类型地址
|
||||||
DWORD isSelf; // 是否自己发送标志地址
|
DWORD isSelf; // 是否自己发送标志地址
|
||||||
DWORD msgId; // 消息ID地址
|
DWORD msgId; // 消息ID地址
|
||||||
DWORD msgXml; // 消息xml内容地址
|
DWORD msgXml; // 消息xml内容地址
|
||||||
DWORD roomId; // 群聊时,为群ID;私聊时,为微信ID
|
DWORD roomId; // 群聊时,为群ID;私聊时,为微信ID
|
||||||
DWORD wxId; // 私聊时,为空;群聊时,为发送者微信ID
|
DWORD wxId; // 私聊时,为空;群聊时,为发送者微信ID
|
||||||
DWORD content; // 消息内容地址
|
DWORD content; // 消息内容地址
|
||||||
DWORD thumb; // 缩略图
|
DWORD thumb; // 缩略图
|
||||||
DWORD extra; // 附加数据
|
DWORD extra; // 附加数据
|
||||||
} RecvMsg_t;
|
} RecvMsg_t;
|
||||||
|
|
||||||
typedef struct SendText {
|
typedef struct SendText {
|
||||||
DWORD call1;
|
DWORD call1;
|
||||||
DWORD call2;
|
DWORD call2;
|
||||||
DWORD call3;
|
DWORD call3;
|
||||||
} SendText_t;
|
} SendText_t;
|
||||||
|
|
||||||
typedef struct Sendfile {
|
typedef struct Sendfile {
|
||||||
DWORD call1;
|
DWORD call1;
|
||||||
DWORD call2;
|
DWORD call2;
|
||||||
DWORD call3;
|
DWORD call3;
|
||||||
DWORD call4;
|
DWORD call4;
|
||||||
} Sendfile_t;
|
} Sendfile_t;
|
||||||
|
|
||||||
typedef struct Contact {
|
typedef struct Contact {
|
||||||
DWORD base;
|
DWORD base;
|
||||||
DWORD head;
|
DWORD head;
|
||||||
DWORD wxId;
|
DWORD wxId;
|
||||||
DWORD wxCode;
|
DWORD wxCode;
|
||||||
DWORD wxRemark;
|
DWORD wxRemark;
|
||||||
DWORD wxName;
|
DWORD wxName;
|
||||||
DWORD wxGender;
|
DWORD wxGender;
|
||||||
DWORD wxCountry;
|
DWORD wxCountry;
|
||||||
DWORD wxProvince;
|
DWORD wxProvince;
|
||||||
DWORD wxCity;
|
DWORD wxCity;
|
||||||
} Contact_t;
|
} Contact_t;
|
||||||
|
|
||||||
typedef struct Sql {
|
typedef struct Sql {
|
||||||
DWORD exec;
|
DWORD exec;
|
||||||
DWORD base;
|
DWORD base;
|
||||||
DWORD start;
|
DWORD start;
|
||||||
DWORD end;
|
DWORD end;
|
||||||
DWORD slot;
|
DWORD slot;
|
||||||
DWORD name;
|
DWORD name;
|
||||||
} Sql_t;
|
} Sql_t;
|
||||||
|
|
||||||
typedef struct NewFriend {
|
typedef struct NewFriend {
|
||||||
DWORD call1;
|
DWORD call1;
|
||||||
DWORD call2;
|
DWORD call2;
|
||||||
DWORD call3;
|
DWORD call3;
|
||||||
DWORD call4;
|
DWORD call4;
|
||||||
} NewFriend_t;
|
} NewFriend_t;
|
||||||
|
|
||||||
typedef struct RoomMember {
|
typedef struct RoomMember {
|
||||||
DWORD call1;
|
DWORD call1;
|
||||||
DWORD call2;
|
DWORD call2;
|
||||||
DWORD call3;
|
DWORD call3;
|
||||||
} RoomMember_t;
|
} RoomMember_t;
|
||||||
|
|
||||||
typedef struct Xml {
|
typedef struct Xml {
|
||||||
DWORD call1;
|
DWORD call1;
|
||||||
DWORD call2;
|
DWORD call2;
|
||||||
DWORD call3;
|
DWORD call3;
|
||||||
DWORD call4;
|
DWORD call4;
|
||||||
DWORD param;
|
DWORD param;
|
||||||
} Xml_t;
|
} Xml_t;
|
||||||
|
|
||||||
typedef struct TF {
|
typedef struct TF {
|
||||||
DWORD call1;
|
DWORD call1;
|
||||||
DWORD call2;
|
DWORD call2;
|
||||||
DWORD call3;
|
DWORD call3;
|
||||||
} TF_t;
|
} TF_t;
|
||||||
|
|
||||||
typedef struct WxCalls {
|
typedef struct WxCalls {
|
||||||
DWORD login; // 登录状态
|
DWORD login; // 登录状态
|
||||||
UserInfoCall_t ui; // 用户信息
|
UserInfoCall_t ui; // 用户信息
|
||||||
SendText_t sendText; // 发送消息
|
SendText_t sendText; // 发送消息
|
||||||
RecvMsg_t recvMsg; // 接收消息
|
RecvMsg_t recvMsg; // 接收消息
|
||||||
Sendfile_t sendImg; // 发送图片
|
Sendfile_t sendImg; // 发送图片
|
||||||
Sendfile_t sendFile; // 发送文件
|
Sendfile_t sendFile; // 发送文件
|
||||||
Xml_t sendXml; // 发送XML
|
Xml_t sendXml; // 发送XML
|
||||||
Sendfile_t sendEmo; // 发送表情
|
Sendfile_t sendEmo; // 发送表情
|
||||||
Contact_t contact; // 获取联系人
|
Contact_t contact; // 获取联系人
|
||||||
Sql_t sql; // 执行 SQL
|
Sql_t sql; // 执行 SQL
|
||||||
NewFriend_t anf; // 通过好友申请
|
NewFriend_t anf; // 通过好友申请
|
||||||
RoomMember_t arm; // 添加群成员
|
RoomMember_t arm; // 添加群成员
|
||||||
RoomMember_t drm; // 删除群成员
|
RoomMember_t drm; // 删除群成员
|
||||||
TF_t tf; // 接收转账
|
TF_t tf; // 接收转账
|
||||||
} WxCalls_t;
|
} WxCalls_t;
|
||||||
|
|
||||||
typedef struct WxString {
|
typedef struct WxString {
|
||||||
wchar_t *text;
|
wchar_t *text;
|
||||||
DWORD size;
|
DWORD size;
|
||||||
DWORD capacity;
|
DWORD capacity;
|
||||||
char fill[8];
|
char fill[8];
|
||||||
} WxString_t;
|
} WxString_t;
|
@ -119,7 +119,7 @@
|
|||||||
</Link>
|
</Link>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
<Command>xcopy /y $(OutDir)$(TargetFileName) $(SolutionDir)Out
|
<Command>xcopy /y $(OutDir)$(TargetFileName) $(SolutionDir)Out
|
||||||
xcopy /y $(OutDir)$(TargetFileName) $(SolutionDir)python\wcferry</Command>
|
xcopy /y $(OutDir)$(TargetFileName) $(SolutionDir)..\clients\python\wcferry</Command>
|
||||||
</PostBuildEvent>
|
</PostBuildEvent>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
<Message>Copy files</Message>
|
<Message>Copy files</Message>
|
@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<PropertyGroup />
|
<PropertyGroup />
|
||||||
</Project>
|
</Project>
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 9.5 MiB After Width: | Height: | Size: 9.5 MiB |