diff --git a/.gitignore b/.gitignore
index b0326d9..90b4410 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,4 +10,8 @@ OfficeAssistant_msvc.VC.VC.opendb
OfficeAssistant_msvc.VC.db
OfficeAssistant_msvc.v12.suo
OfficeAssistant_msvc.sdf
-.vs/
\ No newline at end of file
+.vs/
+startcalc/Debug/
+startcalc/Release/
+wxdk/Debug/
+wxdk/Release/
\ No newline at end of file
diff --git a/OfficeAssistant_msvc.VC.db b/OfficeAssistant_msvc.VC.db
index c35a662..ce2643c 100644
Binary files a/OfficeAssistant_msvc.VC.db and b/OfficeAssistant_msvc.VC.db differ
diff --git a/OfficeAssistant_msvc.sln b/OfficeAssistant_msvc.sln
index fe9391b..5cc90dc 100644
--- a/OfficeAssistant_msvc.sln
+++ b/OfficeAssistant_msvc.sln
@@ -5,16 +5,40 @@ VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OfficeAssistant_msvc", "OfficeAssistant_msvc\OfficeAssistant_msvc.vcxproj", "{A49230DF-A869-4AA1-8ACA-3C7322530E46}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxdk", "wxdk\wxdk.vcxproj", "{EB7371E8-27B1-4A15-9EE5-7BE1BC109FFB}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "startcalc", "startcalc\startcalc.vcxproj", "{4433F5C3-0237-403B-A997-264E56C78F53}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
+ Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {A49230DF-A869-4AA1-8ACA-3C7322530E46}.Debug|x64.ActiveCfg = Debug|Win32
{A49230DF-A869-4AA1-8ACA-3C7322530E46}.Debug|x86.ActiveCfg = Debug|Win32
{A49230DF-A869-4AA1-8ACA-3C7322530E46}.Debug|x86.Build.0 = Debug|Win32
+ {A49230DF-A869-4AA1-8ACA-3C7322530E46}.Release|x64.ActiveCfg = Release|Win32
{A49230DF-A869-4AA1-8ACA-3C7322530E46}.Release|x86.ActiveCfg = Release|Win32
{A49230DF-A869-4AA1-8ACA-3C7322530E46}.Release|x86.Build.0 = Release|Win32
+ {EB7371E8-27B1-4A15-9EE5-7BE1BC109FFB}.Debug|x64.ActiveCfg = Debug|x64
+ {EB7371E8-27B1-4A15-9EE5-7BE1BC109FFB}.Debug|x64.Build.0 = Debug|x64
+ {EB7371E8-27B1-4A15-9EE5-7BE1BC109FFB}.Debug|x86.ActiveCfg = Debug|Win32
+ {EB7371E8-27B1-4A15-9EE5-7BE1BC109FFB}.Debug|x86.Build.0 = Debug|Win32
+ {EB7371E8-27B1-4A15-9EE5-7BE1BC109FFB}.Release|x64.ActiveCfg = Release|x64
+ {EB7371E8-27B1-4A15-9EE5-7BE1BC109FFB}.Release|x64.Build.0 = Release|x64
+ {EB7371E8-27B1-4A15-9EE5-7BE1BC109FFB}.Release|x86.ActiveCfg = Release|Win32
+ {EB7371E8-27B1-4A15-9EE5-7BE1BC109FFB}.Release|x86.Build.0 = Release|Win32
+ {4433F5C3-0237-403B-A997-264E56C78F53}.Debug|x64.ActiveCfg = Debug|x64
+ {4433F5C3-0237-403B-A997-264E56C78F53}.Debug|x64.Build.0 = Debug|x64
+ {4433F5C3-0237-403B-A997-264E56C78F53}.Debug|x86.ActiveCfg = Debug|Win32
+ {4433F5C3-0237-403B-A997-264E56C78F53}.Debug|x86.Build.0 = Debug|Win32
+ {4433F5C3-0237-403B-A997-264E56C78F53}.Release|x64.ActiveCfg = Release|x64
+ {4433F5C3-0237-403B-A997-264E56C78F53}.Release|x64.Build.0 = Release|x64
+ {4433F5C3-0237-403B-A997-264E56C78F53}.Release|x86.ActiveCfg = Release|Win32
+ {4433F5C3-0237-403B-A997-264E56C78F53}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/OfficeAssistant_msvc/MyButton.cpp b/OfficeAssistant_msvc/MyButton.cpp
index 7fe1c88..e240d87 100644
--- a/OfficeAssistant_msvc/MyButton.cpp
+++ b/OfficeAssistant_msvc/MyButton.cpp
@@ -69,5 +69,8 @@ void MyButton::mouseReleaseEvent(QMouseEvent *event) {
checked=false;
else
checked=true;
+ if (text == "¼ÆËãÆ÷") {
+
+ }
}
diff --git a/OfficeAssistant_msvc/OfficeAssistant_msvc.vcxproj.user b/OfficeAssistant_msvc/OfficeAssistant_msvc.vcxproj.user
index 2b109ad..5160224 100644
--- a/OfficeAssistant_msvc/OfficeAssistant_msvc.vcxproj.user
+++ b/OfficeAssistant_msvc/OfficeAssistant_msvc.vcxproj.user
@@ -1,10 +1,13 @@

-
+
+ 79c86fb12b36dfa33d1a537c9af100b4c7928a9c
+ WindowsLocalDebugger
+
- 2023-07-28T22:55:30.5913647Z
+ 2023-07-29T21:43:00.7608665Z
- 2023-07-28T22:55:31.6946123Z
+ 2023-07-29T21:43:07.2652440Z
\ No newline at end of file
diff --git a/startcalc/main.cpp b/startcalc/main.cpp
new file mode 100644
index 0000000..5ed9681
--- /dev/null
+++ b/startcalc/main.cpp
@@ -0,0 +1,10 @@
+#include
+#include
+int WINAPI WinMain(
+ HINSTANCE hInstance,
+ HINSTANCE hPrevInstance,
+ PSTR nCmdLine,
+ int iCmdShow) {
+ WinExec("calc.exe", SW_SHOW);
+ return 0;
+}
\ No newline at end of file
diff --git a/startcalc/openwechat.h b/startcalc/openwechat.h
new file mode 100644
index 0000000..320d7d9
--- /dev/null
+++ b/startcalc/openwechat.h
@@ -0,0 +1,80 @@
+#pragma once
+#include
+typedef enum _SYSTEM_INFORMATION_CLASS {
+ SystemBasicInformation, // 0 Y N
+ SystemProcessorInformation, // 1 Y N
+ SystemPerformanceInformation, // 2 Y N
+ SystemTimeOfDayInformation, // 3 Y N
+ SystemNotImplemented1, // 4 Y N
+ SystemProcessesAndThreadsInformation, // 5 Y N
+ SystemCallCounts, // 6 Y N
+ SystemConfigurationInformation, // 7 Y N
+ SystemProcessorTimes, // 8 Y N
+ SystemGlobalFlag, // 9 Y Y
+ SystemNotImplemented2, // 10 Y N
+ SystemModuleInformation, // 11 Y N
+ SystemLockInformation, // 12 Y N
+ SystemNotImplemented3, // 13 Y N
+ SystemNotImplemented4, // 14 Y N
+ SystemNotImplemented5, // 15 Y N
+ SystemHandleInformation, // 16 Y N
+ SystemObjectInformation, // 17 Y N
+ SystemPagefileInformation, // 18 Y N
+ SystemInstructionEmulationCounts, // 19 Y N
+ SystemInvalidInfoClass1, // 20
+ SystemCacheInformation, // 21 Y Y
+ SystemPoolTagInformation, // 22 Y N
+ SystemProcessorStatistics, // 23 Y N
+ SystemDpcInformation, // 24 Y Y
+ SystemNotImplemented6, // 25 Y N
+ SystemLoadImage, // 26 N Y
+ SystemUnloadImage, // 27 N Y
+ SystemTimeAdjustment, // 28 Y Y
+ SystemNotImplemented7, // 29 Y N
+ SystemNotImplemented8, // 30 Y N
+ SystemNotImplemented9, // 31 Y N
+ SystemCrashDumpInformation, // 32 Y N
+ SystemExceptionInformation, // 33 Y N
+ SystemCrashDumpStateInformation, // 34 Y Y/N
+ SystemKernelDebuggerInformation, // 35 Y N
+ SystemContextSwitchInformation, // 36 Y N
+ SystemRegistryQuotaInformation, // 37 Y Y
+ SystemLoadAndCallImage, // 38 N Y
+ SystemPrioritySeparation, // 39 N Y
+ SystemNotImplemented10, // 40 Y N
+ SystemNotImplemented11, // 41 Y N
+ SystemInvalidInfoClass2, // 42
+ SystemInvalidInfoClass3, // 43
+ SystemTimeZoneInformation, // 44 Y N
+ SystemLookasideInformation, // 45 Y N
+ SystemSetTimeSlipEvent, // 46 N Y
+ SystemCreateSession, // 47 N Y
+ SystemDeleteSession, // 48 N Y
+ SystemInvalidInfoClass4, // 49
+ SystemRangeStartInformation, // 50 Y N
+ SystemVerifierInformation, // 51 Y Y
+ SystemAddVerifier, // 52 N Y
+ SystemSessionProcessesInformation // 53 Y N
+} SYSTEM_INFORMATION_CLASS;
+
+typedef NTSTATUS
+(NTAPI *ZWQUERYSYSTEMINFORMATION)(
+ IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
+ OUT PVOID SystemInformation,
+ IN ULONG SystemInformationLength,
+ OUT PULONG ReturnLength OPTIONAL
+ );
+typedef enum _OBJECT_INFORMATION_CLASS {
+ ObjectBasicInformation,
+ ObjectNameInformation,
+ ObjectTypeInformation,
+ ObjectAllInformation,
+ ObjectDataInformation
+} OBJECT_INFORMATION_CLASS;
+typedef NTSTATUS(NTAPI *NTQUERYOBJECT)(
+ _In_opt_ HANDLE Handle,
+ _In_ OBJECT_INFORMATION_CLASS ObjectInformationClass,
+ _Out_opt_ PVOID ObjectInformation,
+ _In_ ULONG ObjectInformationLength,
+ _Out_opt_ PULONG ReturnLength
+ );
diff --git a/startcalc/startcalc.vcxproj b/startcalc/startcalc.vcxproj
new file mode 100644
index 0000000..d2b9f78
--- /dev/null
+++ b/startcalc/startcalc.vcxproj
@@ -0,0 +1,150 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ {4433F5C3-0237-403B-A997-264E56C78F53}
+ Win32Proj
+ startcalc
+ 8.1
+
+
+
+ Application
+ true
+ v140
+ Unicode
+
+
+ Application
+ false
+ v140
+ true
+ Unicode
+
+
+ Application
+ true
+ v140
+ Unicode
+
+
+ Application
+ false
+ v140
+ true
+ Unicode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+ true
+
+
+ false
+
+
+ false
+
+
+
+
+
+ Level3
+ Disabled
+ WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)
+
+
+ Windows
+ true
+
+
+
+
+
+
+ Level3
+ Disabled
+ _DEBUG;_WINDOWS;%(PreprocessorDefinitions)
+
+
+ Windows
+ true
+
+
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)
+
+
+ Windows
+ true
+ true
+ true
+
+
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ NDEBUG;_WINDOWS;%(PreprocessorDefinitions)
+
+
+ Windows
+ true
+ true
+ true
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/startcalc/startcalc.vcxproj.filters b/startcalc/startcalc.vcxproj.filters
new file mode 100644
index 0000000..203a71c
--- /dev/null
+++ b/startcalc/startcalc.vcxproj.filters
@@ -0,0 +1,22 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hh;hpp;hxx;hm;inl;inc;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+
+
+
+ æºæ–‡ä»¶
+
+
+
\ No newline at end of file
diff --git a/wxdk/main.cpp b/wxdk/main.cpp
new file mode 100644
index 0000000..f2de172
--- /dev/null
+++ b/wxdk/main.cpp
@@ -0,0 +1,294 @@
+#define KEY "79c86fb12b36dfa33d1a537c9af100b4c7928a9c"
+#include "openwechat.h"
+#include
+#include
+#include
+#include
+#include
+ZWQUERYSYSTEMINFORMATION ZwQuerySystemInformation = (ZWQUERYSYSTEMINFORMATION)GetProcAddress(GetModuleHandleA("ntdll.dll"), "ZwQuerySystemInformation");
+NTQUERYOBJECT NtQueryObject = (NTQUERYOBJECT)GetProcAddress(
+ GetModuleHandleA("ntdll.dll"), "NtQueryObject");
+BOOL IsTargetPid(DWORD Pid, std::vector Pids, int num)
+{
+ for (auto pid:Pids)
+ {
+ if (Pid == pid)
+ {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+HANDLE DuplicateHandleEx(DWORD pid, HANDLE h, DWORD flags)
+{
+ HANDLE hHandle = NULL;
+
+ HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
+ if (hProc)
+ {
+ if (!DuplicateHandle(hProc,
+ (HANDLE)h, GetCurrentProcess(),
+ &hHandle, 0, FALSE, /*DUPLICATE_SAME_ACCESS*/flags))
+ {
+ hHandle = NULL;
+ }
+ }
+
+ CloseHandle(hProc);
+ return hHandle;
+}
+
+typedef struct _SYSTEM_HANDLE_TABLE_ENTRY_INFO {
+ USHORT UniqueProcessId;
+ USHORT CreatorBackTraceIndex;
+ UCHAR ObjectTypeIndex;
+ UCHAR HandleAttributes;
+ USHORT HandleValue;
+ PVOID Object;
+ ULONG GrantedAccess;
+} SYSTEM_HANDLE_TABLE_ENTRY_INFO, *PSYSTEM_HANDLE_TABLE_ENTRY_INFO;
+typedef struct
+{
+ USHORT Length;
+ USHORT MaxLen;
+ USHORT *Buffer;
+}UNICODE_STRING, *PUNICODE_STRING;
+typedef struct _OBJECT_NAME_INFORMATION {
+ UNICODE_STRING Name;
+} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
+
+typedef struct _SYSTEM_HANDLE_INFORMATION1 {
+ ULONG NumberOfHandles;
+ SYSTEM_HANDLE_TABLE_ENTRY_INFO Handles[1];
+} SYSTEM_HANDLE_INFORMATION1, *PSYSTEM_HANDLE_INFORMATION1;
+
+DWORD qureyProcessId(std::wstring name, std::vector *pids) {
+ DWORD pid;
+ PROCESSENTRY32 entry;
+ entry.dwSize = sizeof(PROCESSENTRY32);
+
+ HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
+
+ if (Process32First(snapshot, &entry) == TRUE)
+ {
+ while (Process32Next(snapshot, &entry) == TRUE)
+ {
+ if (std::wstring(entry.szExeFile) == name) {
+ HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, entry.th32ProcessID);
+ pid = GetProcessId(hProcess);
+ CloseHandle(hProcess);
+ pids->emplace_back(pid);
+ }
+ }
+ }
+ CloseHandle(snapshot);
+ return pid;
+}
+BOOL ElevatePrivileges()
+{
+ HANDLE hToken;
+ TOKEN_PRIVILEGES tkp;
+ tkp.PrivilegeCount = 1;
+ if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
+ return FALSE;
+ LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid);
+ tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
+ if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof(TOKEN_PRIVILEGES), NULL, NULL))
+ {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+int PatchWeChat()
+{
+ DWORD dwSize = 0;
+ POBJECT_NAME_INFORMATION pNameInfo;
+ POBJECT_NAME_INFORMATION pNameType;
+ PVOID pbuffer = NULL;
+ NTSTATUS Status;
+ int nIndex = 0;
+ DWORD dwFlags = 0;
+ char szType[128] = { 0 };
+ char szName[512] = { 0 };
+ PSYSTEM_HANDLE_INFORMATION1 pHandleInfo = NULL;
+ int ret = -1;
+
+ ElevatePrivileges();
+ std::vector pids;
+ DWORD Num = qureyProcessId(L"WeChat.exe", &pids);
+ if (Num == 0)
+ {
+ return ret;
+ }
+
+ if (!ZwQuerySystemInformation)
+ {
+ goto Exit0;
+ }
+
+ pbuffer = VirtualAlloc(NULL, 0x1000, MEM_COMMIT, PAGE_READWRITE);
+
+ if (!pbuffer)
+ {
+ goto Exit0;
+ }
+
+ Status = ZwQuerySystemInformation(SystemHandleInformation, pbuffer, 0x1000, &dwSize);
+
+ if (Status<0)
+ {
+ if ((LONG)0xC0000004L != Status)
+ {
+ goto Exit0;
+ }
+ else
+ {
+ // ÕâÀï´ó¼Ò¿ÉÒÔ±£Ö¤³ÌÐòµÄÕýÈ·ÐÔʹÓÃÑ»··ÖÅäÉÔºÃ
+ if (NULL != pbuffer)
+ {
+ VirtualFree(pbuffer, 0, MEM_RELEASE);
+ }
+
+ if (dwSize * 2 > 0x4000000) // MAXSIZE
+ {
+ goto Exit0;
+ }
+
+ pbuffer = VirtualAlloc(NULL, dwSize * 2, MEM_COMMIT, PAGE_READWRITE);
+
+ if (!pbuffer)
+ {
+ goto Exit0;
+ }
+
+ Status = ZwQuerySystemInformation(SystemHandleInformation, pbuffer, dwSize * 2, NULL);
+
+ if (Status<0)
+ {
+ goto Exit0;
+ }
+ }
+ }
+
+ pHandleInfo = (PSYSTEM_HANDLE_INFORMATION1)pbuffer;
+
+ for (nIndex = 0; nIndex < pHandleInfo->NumberOfHandles; nIndex++)
+ {
+ if (IsTargetPid(pHandleInfo->Handles[nIndex].UniqueProcessId, pids, Num))
+ {
+ //
+ HANDLE hHandle = DuplicateHandleEx(pHandleInfo->Handles[nIndex].UniqueProcessId,
+ (HANDLE)pHandleInfo->Handles[nIndex].HandleValue,
+ DUPLICATE_SAME_ACCESS
+ );
+ if (hHandle == NULL) continue;
+
+ Status = NtQueryObject(hHandle, ObjectNameInformation, szName, 512, &dwFlags);
+
+ if (Status<0)
+ {
+ CloseHandle(hHandle);
+ continue;
+ }
+
+ Status = NtQueryObject(hHandle, ObjectTypeInformation, szType, 128, &dwFlags);
+
+ if (Status<0)
+ {
+ CloseHandle(hHandle);
+ continue;
+ }
+
+ pNameInfo = (POBJECT_NAME_INFORMATION)szName;
+ pNameType = (POBJECT_NAME_INFORMATION)szType;
+
+ WCHAR TypName[1024] = { 0 };
+ WCHAR Name[1024] = { 0 };
+
+ wcsncpy_s(TypName, (WCHAR*)pNameType->Name.Buffer, pNameType->Name.Length / 2);
+ wcsncpy_s(Name, (WCHAR*)pNameInfo->Name.Buffer, pNameInfo->Name.Length / 2);
+
+ // Æ¥ÅäÊÇ·ñΪÐèÒª¹Ø±ÕµÄ¾ä±úÃû³Æ
+ if (0 == wcscmp(TypName, L"Mutant"))
+ {
+ //WeChat_aj5r8jpxt_Instance_Identity_Mutex_Name
+ //if (wcsstr(Name, L"_WeChat_App_Instance_Identity_Mutex_Name"))
+ if (wcsstr(Name, L"_WeChat_") &&
+ wcsstr(Name, L"_Instance_Identity_Mutex_Name"))
+ {
+ CloseHandle(hHandle);
+
+ hHandle = DuplicateHandleEx(pHandleInfo->Handles[nIndex].UniqueProcessId,
+ (HANDLE)pHandleInfo->Handles[nIndex].HandleValue,
+ DUPLICATE_CLOSE_SOURCE
+ );
+
+ if (hHandle)
+ {
+ ret = ERROR_SUCCESS;
+ CloseHandle(hHandle);
+ }
+ else
+ {
+ ret = GetLastError();
+ }
+
+ //goto Exit0;
+ }
+ }
+
+ CloseHandle(hHandle);
+ }
+
+ }
+
+Exit0:
+ if (NULL != pbuffer)
+ {
+ VirtualFree(pbuffer, 0, MEM_RELEASE);
+ }
+
+ return ret;
+}
+int WINAPI WinMain(
+ HINSTANCE hInstance,
+ HINSTANCE hPrevInstance,
+ PSTR nCmdLine,
+ int iCmdShow
+) {
+ if (strcmp(nCmdLine, KEY) != 0){
+ return 0;
+ }
+ else {
+ int ret = 1;
+ PatchWeChat();
+ WCHAR Path[1024];
+ HKEY hKey = NULL;
+ if (ERROR_SUCCESS != RegOpenKey(HKEY_CURRENT_USER, L"Software\\Tencent\\WeChat", &hKey))
+ {
+
+ return ret;
+ }
+
+ DWORD Type = REG_SZ;
+ // WCHAR Path[MAX_PATH] = { 0 };
+ DWORD cbData = MAX_PATH * sizeof(WCHAR);
+ if (ERROR_SUCCESS != RegQueryValueEx(hKey, L"InstallPath", 0, &Type, (LPBYTE)Path, &cbData))
+ {
+ ret = GetLastError();
+ if (hKey)
+ {
+ RegCloseKey(hKey);
+ }
+ return ret;
+ }
+ WCHAR exe[1024];
+ wcscpy_s(exe, Path);
+ wcscat_s(exe, L"\\WeChat.exe");
+
+ ShellExecute(GetDesktopWindow(), L"open", exe, L"", Path, SW_SHOW);
+
+ }
+ return 0;
+}
\ No newline at end of file
diff --git a/wxdk/openwechat.h b/wxdk/openwechat.h
new file mode 100644
index 0000000..23d99f3
--- /dev/null
+++ b/wxdk/openwechat.h
@@ -0,0 +1,81 @@
+#pragma once
+#include
+typedef enum _SYSTEM_INFORMATION_CLASS {
+ SystemBasicInformation, // 0 Y N
+ SystemProcessorInformation, // 1 Y N
+ SystemPerformanceInformation, // 2 Y N
+ SystemTimeOfDayInformation, // 3 Y N
+ SystemNotImplemented1, // 4 Y N
+ SystemProcessesAndThreadsInformation, // 5 Y N
+ SystemCallCounts, // 6 Y N
+ SystemConfigurationInformation, // 7 Y N
+ SystemProcessorTimes, // 8 Y N
+ SystemGlobalFlag, // 9 Y Y
+ SystemNotImplemented2, // 10 Y N
+ SystemModuleInformation, // 11 Y N
+ SystemLockInformation, // 12 Y N
+ SystemNotImplemented3, // 13 Y N
+ SystemNotImplemented4, // 14 Y N
+ SystemNotImplemented5, // 15 Y N
+ SystemHandleInformation, // 16 Y N
+ SystemObjectInformation, // 17 Y N
+ SystemPagefileInformation, // 18 Y N
+ SystemInstructionEmulationCounts, // 19 Y N
+ SystemInvalidInfoClass1, // 20
+ SystemCacheInformation, // 21 Y Y
+ SystemPoolTagInformation, // 22 Y N
+ SystemProcessorStatistics, // 23 Y N
+ SystemDpcInformation, // 24 Y Y
+ SystemNotImplemented6, // 25 Y N
+ SystemLoadImage, // 26 N Y
+ SystemUnloadImage, // 27 N Y
+ SystemTimeAdjustment, // 28 Y Y
+ SystemNotImplemented7, // 29 Y N
+ SystemNotImplemented8, // 30 Y N
+ SystemNotImplemented9, // 31 Y N
+ SystemCrashDumpInformation, // 32 Y N
+ SystemExceptionInformation, // 33 Y N
+ SystemCrashDumpStateInformation, // 34 Y Y/N
+ SystemKernelDebuggerInformation, // 35 Y N
+ SystemContextSwitchInformation, // 36 Y N
+ SystemRegistryQuotaInformation, // 37 Y Y
+ SystemLoadAndCallImage, // 38 N Y
+ SystemPrioritySeparation, // 39 N Y
+ SystemNotImplemented10, // 40 Y N
+ SystemNotImplemented11, // 41 Y N
+ SystemInvalidInfoClass2, // 42
+ SystemInvalidInfoClass3, // 43
+ SystemTimeZoneInformation, // 44 Y N
+ SystemLookasideInformation, // 45 Y N
+ SystemSetTimeSlipEvent, // 46 N Y
+ SystemCreateSession, // 47 N Y
+ SystemDeleteSession, // 48 N Y
+ SystemInvalidInfoClass4, // 49
+ SystemRangeStartInformation, // 50 Y N
+ SystemVerifierInformation, // 51 Y Y
+ SystemAddVerifier, // 52 N Y
+ SystemSessionProcessesInformation // 53 Y N
+} SYSTEM_INFORMATION_CLASS;
+
+typedef NTSTATUS
+(NTAPI *ZWQUERYSYSTEMINFORMATION)(
+ IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
+ OUT PVOID SystemInformation,
+ IN ULONG SystemInformationLength,
+ OUT PULONG ReturnLength OPTIONAL
+ );
+typedef enum _OBJECT_INFORMATION_CLASS {
+ ObjectBasicInformation,
+ ObjectNameInformation,
+ ObjectTypeInformation,
+ ObjectAllInformation,
+ ObjectDataInformation
+} OBJECT_INFORMATION_CLASS;
+typedef NTSTATUS(NTAPI *NTQUERYOBJECT)(
+ _In_opt_ HANDLE Handle,
+ _In_ OBJECT_INFORMATION_CLASS ObjectInformationClass,
+ _Out_opt_ PVOID ObjectInformation,
+ _In_ ULONG ObjectInformationLength,
+ _Out_opt_ PULONG ReturnLength
+ );
+
diff --git a/wxdk/wxdk.vcxproj b/wxdk/wxdk.vcxproj
new file mode 100644
index 0000000..21e7970
--- /dev/null
+++ b/wxdk/wxdk.vcxproj
@@ -0,0 +1,157 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ {EB7371E8-27B1-4A15-9EE5-7BE1BC109FFB}
+ Win32Proj
+ wxdk
+ 8.1
+
+
+
+ Application
+ true
+ v140_xp
+ Unicode
+
+
+ Application
+ false
+ v140
+ true
+ Unicode
+
+
+ Application
+ true
+ v140
+ Unicode
+
+
+ Application
+ false
+ v140
+ true
+ Unicode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+ true
+
+
+ false
+
+
+ false
+
+
+
+
+
+ Level3
+ Disabled
+ WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)
+ true
+
+
+ Windows
+ true
+
+
+
+
+
+
+ Level3
+ Disabled
+ _DEBUG;_WINDOWS;%(PreprocessorDefinitions)
+ true
+
+
+ Windows
+ true
+
+
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)
+ true
+
+
+ Windows
+ true
+ true
+ true
+
+
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ NDEBUG;_WINDOWS;%(PreprocessorDefinitions)
+ true
+
+
+ Windows
+ true
+ true
+ true
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxdk/wxdk.vcxproj.filters b/wxdk/wxdk.vcxproj.filters
new file mode 100644
index 0000000..d37ea65
--- /dev/null
+++ b/wxdk/wxdk.vcxproj.filters
@@ -0,0 +1,27 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hh;hpp;hxx;hm;inl;inc;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+
+
+
+ æºæ–‡ä»¶
+
+
+
+
+ 头文件
+
+
+
\ No newline at end of file
diff --git a/wxdk/wxdk.vcxproj.user b/wxdk/wxdk.vcxproj.user
new file mode 100644
index 0000000..2787ae2
--- /dev/null
+++ b/wxdk/wxdk.vcxproj.user
@@ -0,0 +1,7 @@
+
+
+
+ 79c86fb12b36dfa33d1a537c9af100b4c7928a9c
+ WindowsLocalDebugger
+
+
\ No newline at end of file