From fc82c875971fd53ae33a9dfce662126952a6fa31 Mon Sep 17 00:00:00 2001 From: Double Sine Date: Mon, 11 Dec 2017 20:37:18 +0800 Subject: [PATCH] remove old branch file --- navicat-keygen.sln | 38 --- navicat-keygen/_tmain.cpp | 271 ------------------ navicat-keygen/navicat-keygen.vcxproj | 162 ----------- navicat-keygen/navicat-keygen.vcxproj.filters | 22 -- navicat-patcher/_tmain.cpp | 105 ------- navicat-patcher/navicat-patcher.vcxproj | 162 ----------- .../navicat-patcher.vcxproj.filters | 22 -- 7 files changed, 782 deletions(-) delete mode 100644 navicat-keygen.sln delete mode 100644 navicat-keygen/_tmain.cpp delete mode 100644 navicat-keygen/navicat-keygen.vcxproj delete mode 100644 navicat-keygen/navicat-keygen.vcxproj.filters delete mode 100644 navicat-patcher/_tmain.cpp delete mode 100644 navicat-patcher/navicat-patcher.vcxproj delete mode 100644 navicat-patcher/navicat-patcher.vcxproj.filters diff --git a/navicat-keygen.sln b/navicat-keygen.sln deleted file mode 100644 index 59ce178..0000000 --- a/navicat-keygen.sln +++ /dev/null @@ -1,38 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25420.1 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "navicat-keygen", "navicat-keygen\navicat-keygen.vcxproj", "{CB49F054-83AB-4C16-B73B-33D7DF696E16}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "navicat-patcher", "navicat-patcher\navicat-patcher.vcxproj", "{30BE8CAB-6137-4441-9F64-599D0A6EEA0C}" -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 - {CB49F054-83AB-4C16-B73B-33D7DF696E16}.Debug|x64.ActiveCfg = Debug|x64 - {CB49F054-83AB-4C16-B73B-33D7DF696E16}.Debug|x64.Build.0 = Debug|x64 - {CB49F054-83AB-4C16-B73B-33D7DF696E16}.Debug|x86.ActiveCfg = Debug|Win32 - {CB49F054-83AB-4C16-B73B-33D7DF696E16}.Debug|x86.Build.0 = Debug|Win32 - {CB49F054-83AB-4C16-B73B-33D7DF696E16}.Release|x64.ActiveCfg = Release|x64 - {CB49F054-83AB-4C16-B73B-33D7DF696E16}.Release|x64.Build.0 = Release|x64 - {CB49F054-83AB-4C16-B73B-33D7DF696E16}.Release|x86.ActiveCfg = Release|Win32 - {CB49F054-83AB-4C16-B73B-33D7DF696E16}.Release|x86.Build.0 = Release|Win32 - {30BE8CAB-6137-4441-9F64-599D0A6EEA0C}.Debug|x64.ActiveCfg = Debug|x64 - {30BE8CAB-6137-4441-9F64-599D0A6EEA0C}.Debug|x64.Build.0 = Debug|x64 - {30BE8CAB-6137-4441-9F64-599D0A6EEA0C}.Debug|x86.ActiveCfg = Debug|Win32 - {30BE8CAB-6137-4441-9F64-599D0A6EEA0C}.Debug|x86.Build.0 = Debug|Win32 - {30BE8CAB-6137-4441-9F64-599D0A6EEA0C}.Release|x64.ActiveCfg = Release|x64 - {30BE8CAB-6137-4441-9F64-599D0A6EEA0C}.Release|x64.Build.0 = Release|x64 - {30BE8CAB-6137-4441-9F64-599D0A6EEA0C}.Release|x86.ActiveCfg = Release|Win32 - {30BE8CAB-6137-4441-9F64-599D0A6EEA0C}.Release|x86.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/navicat-keygen/_tmain.cpp b/navicat-keygen/_tmain.cpp deleted file mode 100644 index 0de12cf..0000000 --- a/navicat-keygen/_tmain.cpp +++ /dev/null @@ -1,271 +0,0 @@ -#include -#include -#include - -#ifndef UNICODE -#include -#endif - -#include -#include -#include -#include -#include - -#pragma comment(lib, "Crypt32.lib") -#pragma comment(lib, "libcrypto.lib") - -#define NAVICAT_12 - -void GenerateSnKey(char(&SnKey)[16]) { - static char EncodeTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"; - static DES_cblock DESKey = { 0x64, 0xAD, 0xF3, 0x2F, 0xAE, 0xF2, 0x1A, 0x27 }; - - BYTE temp_snKey[10] = { 0x68, 0x2a }; // must start with 0x68, 0x2a - temp_snKey[2] = rand(); - temp_snKey[3] = rand(); - temp_snKey[4] = rand(); - temp_snKey[5] = 0xCE; // Must be 0xCE for Simplified Chinese version. - // Must be 0xAA for Traditional Chinese version. - - temp_snKey[6] = 0x32; // Must be 0x32 for Simplified Chinese version. - // Must be 0x99 for Traditional Chinese version. - -#if defined(NAVICAT_12) - temp_snKey[7] = 0x65; // 0x65 - commercial, 0x66 - non-commercial - temp_snKey[8] = 0xC0; // High 4-bits = version number. Low 4-bits doesn't know, but can be used to delay activation time. -#elif defined(NAVICAT_11) - temp_snKey[7] = 0x15; // 0x15 - commercial, 0x16 - non-commercial - temp_snKey[8] = 0xB0; // High 4-bits = version number. Low 4-bits doesn't know, but can be used to delay activation time. -#endif - temp_snKey[9] = 0x70; // 0xfd, 0xfc, 0xfb if you want to use not-for-resale license. - - DES_key_schedule schedule; - DES_set_key_unchecked(&DESKey, &schedule); - DES_cblock enc_temp_snKey; - - DES_ecb_encrypt(reinterpret_cast(temp_snKey + 2), &enc_temp_snKey, &schedule, DES_ENCRYPT); - memmove_s(temp_snKey + 2, sizeof(enc_temp_snKey), enc_temp_snKey, sizeof(enc_temp_snKey)); - - SnKey[0] = EncodeTable[temp_snKey[0] >> 3]; - SnKey[1] = EncodeTable[(temp_snKey[0] & 0x07) << 2 | temp_snKey[1] >> 6]; - SnKey[2] = EncodeTable[temp_snKey[1] >> 1 & 0x1F]; - SnKey[3] = EncodeTable[(temp_snKey[1] & 0x1) << 4 | temp_snKey[2] >> 4]; - SnKey[4] = EncodeTable[(temp_snKey[2] & 0xF) << 1 | temp_snKey[3] >> 7]; - SnKey[5] = EncodeTable[temp_snKey[3] >> 2 & 0x1F]; - SnKey[6] = EncodeTable[temp_snKey[3] << 3 & 0x1F | temp_snKey[4] >> 5]; - SnKey[7] = EncodeTable[temp_snKey[4] & 0x1F]; - - SnKey[8] = EncodeTable[temp_snKey[5] >> 3]; - SnKey[9] = EncodeTable[(temp_snKey[5] & 0x07) << 2 | temp_snKey[6] >> 6]; - SnKey[10] = EncodeTable[temp_snKey[6] >> 1 & 0x1F]; - SnKey[11] = EncodeTable[(temp_snKey[6] & 0x1) << 4 | temp_snKey[7] >> 4]; - SnKey[12] = EncodeTable[(temp_snKey[7] & 0xF) << 1 | temp_snKey[8] >> 7]; - SnKey[13] = EncodeTable[temp_snKey[8] >> 2 & 0x1F]; - SnKey[14] = EncodeTable[temp_snKey[8] << 3 & 0x1F | temp_snKey[9] >> 5]; - SnKey[15] = EncodeTable[temp_snKey[9] & 0x1F]; - - _tprintf_s(TEXT("\r\n")); - _tprintf_s(TEXT("SnKey:\r\n")); - _tprintf_s(TEXT("%.4hs-%.4hs-%.4hs-%.4hs\r\n"), SnKey, SnKey + 4, SnKey + 8, SnKey + 12); - _tprintf_s(TEXT("\r\n")); -} - -BOOL GenerateLicense(RSA* RSAPrivateKey, - const char* SnKey, - const char* Name, - const char* Organization, - const char* DI) { - - char LicenseJson[2048 / 8] = { }; -#if defined(NAVICAT_12) - sprintf_s(LicenseJson, "{\"K\":\"%.16s\", \"N\":\"%s\", \"O\":\"%s\", \"DI\":\"%s\"}", SnKey, Name, Organization, DI); -#elif defined(NAVICAT_11) - sprintf_s(LicenseJson, "{\"K\":\"%.16s\", \"N\":\"%s\", \"O\":\"%s\"}", SnKey, Name, Organization); -#endif - unsigned char License[2048 / 8] = { }; - RSA_private_encrypt(strlen(LicenseJson), - reinterpret_cast(LicenseJson), - License, - RSAPrivateKey, - RSA_PKCS1_PADDING); - -#if defined(NAVICAT_12) - DWORD LicenseStringLength = 1024; - TCHAR LicenseString[1024] = { }; - if (!CryptBinaryToString(License, sizeof(License), CRYPT_STRING_BASE64, LicenseString, &LicenseStringLength)) { - _tprintf_s(TEXT("Cannot get Base64 string. CODE: 0x%08x\r\n"), GetLastError()); - return FALSE; - } - - _tprintf_s(TEXT("License:\r\n%s"), LicenseString); - return TRUE; -#elif defined(NAVICAT_11) - HANDLE hLicenseFile = CreateFile(TEXT("license_file"), GENERIC_ALL, NULL, nullptr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr); - if (hLicenseFile == NULL) - return FALSE; - - if (!WriteFile(hLicenseFile, License, sizeof(License), nullptr, nullptr)) { - CloseHandle(hLicenseFile); - return FALSE; - } - - CloseHandle(hLicenseFile); - return TRUE; -#endif -} - -int _tmain(int argc, TCHAR* argv[]) { - if (argc != 2) { - _tprintf_s(TEXT("Usage:\r\n")); - _tprintf_s(TEXT(" navicat-keygen.exe \r\n")); - return -1; - } - - srand(time(nullptr)); - -#ifdef UNICODE - char pem_file_path[256] = { }; - sprintf_s(pem_file_path, "%S", argv[1]); -#else - char* pem_file_path = argv[1]; -#endif - - RSA* PrivateKey = nullptr; - BIO* PrivateKeyFile = BIO_new(BIO_s_file()); - BIO_read_filename(PrivateKeyFile, pem_file_path); - PrivateKey = PEM_read_bio_RSAPrivateKey(PrivateKeyFile, nullptr, nullptr, nullptr); - BIO_free_all(PrivateKeyFile); - - if (PrivateKey == nullptr) { - _tprintf_s(TEXT("Failed to load private key.\r\n")); - return -2; - } - - TCHAR tName[64] = { }; - TCHAR tOrganization[64] = { }; - { - DWORD ReadCount; - - _tprintf_s(TEXT("Your name: ")); - ReadConsole(GetStdHandle(STD_INPUT_HANDLE), tName, 64, &ReadCount, nullptr); - tName[ReadCount - 2] = 0; - tName[ReadCount - 1] = 0; - _tprintf_s(TEXT("Your organization: ")); - ReadConsole(GetStdHandle(STD_INPUT_HANDLE), tOrganization, 64, &ReadCount, nullptr); - tOrganization[ReadCount - 2] = 0; - tOrganization[ReadCount - 1] = 0; - } - -#ifdef UNICODE - char Name[64] = { }; - char Organization[64] = { }; - - if (WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, - tName, _tcslen(tName), - Name, 64, - NULL, - NULL) == 0) { - _tprintf_s(TEXT("Failed to convert name to UTF-8. CODE: 0x%08x\r\n"), GetLastError()); - RSA_free(PrivateKey); - return GetLastError(); - } - - if (WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, - tOrganization, _tcslen(tOrganization), - Organization, 64, - NULL, - NULL) == 0) { - _tprintf_s(TEXT("Failed to convert name to UTF-8. CODE: 0x%08x\r\n"), GetLastError()); - RSA_free(PrivateKey); - return GetLastError(); - } -#else - char* Name = tName; - char* Organization = tOrganization; -#endif - - char SnKey[16] = { }; - GenerateSnKey(SnKey); - - TCHAR Base64String[1024] = { }; - _tprintf_s(TEXT("Input request code (in Base64), empty line to return:\r\n")); - for (TCHAR* cur = Base64String; cur < Base64String + 1024;) { - DWORD ReadCount; - if (!ReadConsole(GetStdHandle(STD_INPUT_HANDLE), cur, Base64String + 1024 - cur, &ReadCount, NULL)) - break; - - cur += ReadCount; -#ifdef UNICODE - if (*reinterpret_cast(cur - 4) == '\r\0\n\0') - break; -#else - if (*reinterpret_cast(cur - 4) == '\r\n\r\n') - break; -#endif - } - Base64String[1024 - 1] = NULL; - - BYTE enc_request_code[1024] = { }; - DWORD enc_request_code_length = 1024; - if (!CryptStringToBinary(Base64String, NULL, CRYPT_STRING_BASE64, enc_request_code, &enc_request_code_length, NULL, NULL)) { - _tprintf_s(TEXT("Failed to decode Base64 string. CODE: 0x%08x\r\n"), GetLastError()); - RSA_free(PrivateKey); - return GetLastError(); - } - - char request_code[1024] = { }; - if (!RSA_private_decrypt(enc_request_code_length, - enc_request_code, - reinterpret_cast(request_code), - PrivateKey, RSA_PKCS1_PADDING)) { - _tprintf_s(TEXT("Failed to decrypt request code.\r\n")); - RSA_free(PrivateKey); - return -3; - } - -#ifdef _DEBUG -#ifdef UNICODE - _tprintf_s(TEXT("%S\r\n"), request_code); -#else - _tprintf_s(TEXT("%s\r\n"), request_code); -#endif -#endif - - //-------------------------------------------------------------------- - - if (strlen(request_code) >= 256) { - _tprintf_s(TEXT("Not a valid request code.\r\n")); - RSA_free(PrivateKey); - return -4; - } - - char* DI_ptr = request_code; - for (; DI_ptr < request_code + 256; DI_ptr++) { - if (*reinterpret_cast(DI_ptr) == '"ID"') { - DI_ptr += 4; - while (*DI_ptr++ != '"'); - break; - } - } - - if (DI_ptr >= request_code + 256) { - _tprintf_s(TEXT("Not a valid request code.\r\n")); - RSA_free(PrivateKey); - return -5; - } - - for (char* ptr = DI_ptr; ptr < request_code + 256; ptr++) { - if (*ptr == '"') { - *ptr = 0; - break; - } - } - - //------------------------------------------------------------------- - - GenerateLicense(PrivateKey, SnKey, Name, Organization, DI_ptr); - - RSA_free(PrivateKey); - return 0; -} diff --git a/navicat-keygen/navicat-keygen.vcxproj b/navicat-keygen/navicat-keygen.vcxproj deleted file mode 100644 index 3aba5bd..0000000 --- a/navicat-keygen/navicat-keygen.vcxproj +++ /dev/null @@ -1,162 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - {CB49F054-83AB-4C16-B73B-33D7DF696E16} - Win32Proj - navicatkeygen - 8.1 - - - - Application - true - v140 - Unicode - - - Application - false - v140 - true - Unicode - - - Application - true - v140 - Unicode - - - Application - false - v140 - true - Unicode - - - - - - - - - - - - - - - - - - - - - true - - - true - D:\OpenSSL-Win64\include;$(IncludePath) - D:\OpenSSL-Win64\lib;$(LibraryPath) - - - false - - - false - D:\OpenSSL-Win64\include;$(IncludePath) - D:\OpenSSL-Win64\lib;$(LibraryPath) - - - - - - Level3 - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDebug - - - Console - true - - - - - - - Level3 - Disabled - _DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDebug - - - Console - true - - - - - Level3 - - - MaxSpeed - true - true - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreaded - - - Console - true - true - true - - - - - Level3 - - - MaxSpeed - true - true - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreaded - - - Console - true - true - true - - - - - - - - - \ No newline at end of file diff --git a/navicat-keygen/navicat-keygen.vcxproj.filters b/navicat-keygen/navicat-keygen.vcxproj.filters deleted file mode 100644 index 0043367..0000000 --- a/navicat-keygen/navicat-keygen.vcxproj.filters +++ /dev/null @@ -1,22 +0,0 @@ - - - - - {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/navicat-patcher/_tmain.cpp b/navicat-patcher/_tmain.cpp deleted file mode 100644 index 8df6c52..0000000 --- a/navicat-patcher/_tmain.cpp +++ /dev/null @@ -1,105 +0,0 @@ -#include -#include - -#include -#include -#include -#include - -#pragma comment(lib, "libcrypto.lib") - -BOOL BackupNavicat(PTSTR NavicatFileName) { - TCHAR new_NavicatFileName[1024] = { }; - - if (NavicatFileName == nullptr) - NavicatFileName = TEXT("navicat.exe"); - - _stprintf_s(new_NavicatFileName, TEXT("%s%s"), NavicatFileName, TEXT(".backup")); - - if (!CopyFile(NavicatFileName, new_NavicatFileName, TRUE)) { - switch (GetLastError()) { - case ERROR_FILE_NOT_FOUND: - _tprintf_s(TEXT("Cannot find %s.\r\n"), NavicatFileName); - break; - case ERROR_FILE_EXISTS: - _tprintf_s(TEXT("Backup file already exists.\r\n")); - break; - default: - _tprintf_s(TEXT("Unknown error. CODE: 0x%08x.\r\n"), GetLastError()); - } - return FALSE; - } - - _tprintf_s(TEXT("%s has been backed up.\r\n"), NavicatFileName); - return TRUE; -} - -BOOL ReplaceNavicatPublicKey(HANDLE resUpdater, void* pemPublicKey, size_t length) { - return UpdateResource(resUpdater, - RT_RCDATA, - TEXT("ActivationPubKey"), - MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT), - pemPublicKey, length); -} - -RSA* GeneratePrivateKey() { - RSA* PrivateKey = RSA_generate_key(2048, RSA_F4, nullptr, nullptr); - BIO* PrivateKeyFile = BIO_new(BIO_s_file()); - BIO_write_filename(PrivateKeyFile, "RegPrivateKey.pem"); - PEM_write_bio_RSAPrivateKey(PrivateKeyFile, PrivateKey, nullptr, nullptr, 0, nullptr, nullptr); - BIO_free_all(PrivateKeyFile); - - return PrivateKey; -} - -int _tmain(int argc, TCHAR* argv[]) { - if (argc != 2 && argc != 3) { - _tprintf_s(TEXT("Usage:\r\n")); - _tprintf_s(TEXT(" navicat-patcher.exe \r\n")); - return 0; - } - - if (BackupNavicat(argv[1]) == FALSE) - return GetLastError(); - - RSA* PrivateKey = GeneratePrivateKey(); - - HANDLE hUpdater = BeginUpdateResource(argv[1], FALSE); - if (hUpdater == NULL) { - _tprintf_s(TEXT("Cannot open file. CODE: 0x%08x\r\n"), GetLastError()); - RSA_free(PrivateKey); - return GetLastError(); - } - - char pemPublicKey[1024] = { }; - { - char temp_buf[1024] = { }; - BIO* BIO_pemPublicKey = BIO_new(BIO_s_mem()); - - PEM_write_bio_RSA_PUBKEY(BIO_pemPublicKey, PrivateKey); - BIO_read(BIO_pemPublicKey, temp_buf, 1024); - BIO_free_all(BIO_pemPublicKey); - - char* pemPublicKey_ptr = pemPublicKey; - for (size_t i = 0; i < 1024; ++i) { - if (temp_buf[i] == '\n') - *(pemPublicKey_ptr++) = '\r'; - if (temp_buf[i] == 0) - break; - *(pemPublicKey_ptr++) = temp_buf[i]; - } - } - - if (ReplaceNavicatPublicKey(hUpdater, pemPublicKey, strlen(pemPublicKey)) == FALSE) { - _tprintf_s(TEXT("Cannot replace public key. CODE: 0x%08x\r\n"), GetLastError()); - EndUpdateResource(hUpdater, TRUE); - return GetLastError(); - } else { - _tprintf_s(TEXT("Public key has been replaced.\r\n")); - EndUpdateResource(hUpdater, FALSE); - } - - _tprintf_s(TEXT("Success!.\r\n")); - RSA_free(PrivateKey); - return 0; -} \ No newline at end of file diff --git a/navicat-patcher/navicat-patcher.vcxproj b/navicat-patcher/navicat-patcher.vcxproj deleted file mode 100644 index 2c0ab6b..0000000 --- a/navicat-patcher/navicat-patcher.vcxproj +++ /dev/null @@ -1,162 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - {30BE8CAB-6137-4441-9F64-599D0A6EEA0C} - Win32Proj - navicatpatcher - 8.1 - - - - Application - true - v140 - Unicode - - - Application - false - v140 - true - Unicode - - - Application - true - v140 - Unicode - - - Application - false - v140 - true - Unicode - - - - - - - - - - - - - - - - - - - - - true - - - true - D:\OpenSSL-Win64\include;$(IncludePath) - D:\OpenSSL-Win64\lib;$(LibraryPath) - - - false - - - false - D:\OpenSSL-Win64\include;$(IncludePath) - D:\OpenSSL-Win64\lib;$(LibraryPath) - - - - - - Level3 - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDebug - - - Console - true - - - - - - - Level3 - Disabled - _DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDebug - - - Console - true - - - - - Level3 - - - MaxSpeed - true - true - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreaded - - - Console - true - true - true - - - - - Level3 - - - MaxSpeed - true - true - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreaded - - - Console - true - true - true - - - - - - - - - \ No newline at end of file diff --git a/navicat-patcher/navicat-patcher.vcxproj.filters b/navicat-patcher/navicat-patcher.vcxproj.filters deleted file mode 100644 index 0043367..0000000 --- a/navicat-patcher/navicat-patcher.vcxproj.filters +++ /dev/null @@ -1,22 +0,0 @@ - - - - - {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