solved new crackme

This commit is contained in:
Chenx221 2024-10-14 13:59:21 +08:00
parent 911f09829d
commit 9afc07e2ce
Signed by: chenx221
GPG Key ID: D7A9EC07024C3021
10 changed files with 487 additions and 0 deletions

BIN
brutme1/brutme1.exe Normal file

Binary file not shown.

View File

@ -0,0 +1,23 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v8.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v8.0": {
"FindKey/1.0.0": {
"runtime": {
"FindKey.dll": {}
}
}
}
},
"libraries": {
"FindKey/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
}
}
}

BIN
brutme1/keygen/FindKey.dll Normal file

Binary file not shown.

BIN
brutme1/keygen/FindKey.exe Normal file

Binary file not shown.

View File

@ -0,0 +1,13 @@
{
"runtimeOptions": {
"tfm": "net8.0",
"framework": {
"name": "Microsoft.NETCore.App",
"version": "8.0.0"
},
"configProperties": {
"System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
}
}
}

6
brutme1/readme.txt Normal file
View File

@ -0,0 +1,6 @@
-------------------------------------------------------
|Task | Find the correct string for goodboy msg. =) |
-------------------------------------------------------
|Author | indomit |
|Date | 9, May, 2006 |
-------------------------------------------------------

244
brutme1/solve.md Normal file
View File

@ -0,0 +1,244 @@
这次还是寻找正确的serial
先放正确的serial: `54935769`
```cmd
D:\sources\keygen\FindKey\bin\x64\Release\net8.0>FindKey.exe
Found match: 5493-5769
```
首先定位到按钮事件:
```assembly
00405C30 | 55 | push ebp | Check
00405C31 | 8BEC | mov ebp,esp |
00405C33 | B9 09000000 | mov ecx,9 | 09:'\t'
00405C38 | 6A 00 | push 0 |
00405C3A | 6A 00 | push 0 |
00405C3C | 49 | dec ecx |
00405C3D | 75 F9 | jne brutme1.405C38 |
00405C3F | 53 | push ebx |
00405C40 | 56 | push esi | esi:"U嬱兡鸶鬪@"
00405C41 | 57 | push edi | edi:"U嬱兡鸶鬪@"
00405C42 | 8BD8 | mov ebx,eax |
00405C44 | 33C0 | xor eax,eax |
00405C46 | 55 | push ebp |
00405C47 | 68 6A5E4000 | push brutme1.405E6A |
00405C4C | 64:FF30 | push dword ptr fs:[eax] |
00405C4F | 64:8920 | mov dword ptr fs:[eax],esp |
00405C52 | 8D55 F0 | lea edx,dword ptr ss:[ebp-10] |
00405C55 | 8B43 24 | mov eax,dword ptr ds:[ebx+24] |
00405C58 | E8 77F1FFFF | call <brutme1.GetSerial> |
00405C5D | 8B45 F0 | mov eax,dword ptr ss:[ebp-10] | [ebp-10]: Serial
00405C60 | E8 DBD4FFFF | call brutme1.403140 | GetLength
00405C65 | 83F8 08 | cmp eax,8 | 长度需要8位
00405C68 | 0F85 BC010000 | jne <brutme1.Fail> |
00405C6E | 8D55 E8 | lea edx,dword ptr ss:[ebp-18] |
```
一上来先检查输入的Serial长度是否为8位
在这之后是将8位serial对半分开转成数值意味着8位都要是0-9数字
```assembly
00405C71 | 8B43 24 | mov eax,dword ptr ds:[ebx+24] | eax:_TppWorkerThread@4
00405C74 | E8 5BF1FFFF | call <brutme1.GetSerial> |
00405C79 | 8B45 E8 | mov eax,dword ptr ss:[ebp-18] | [ebp-18]: Serial
00405C7C | 8A10 | mov dl,byte ptr ds:[eax] | 取第一位
00405C7E | 8D45 EC | lea eax,dword ptr ss:[ebp-14] | eax:_TppWorkerThread@4
00405C81 | 8850 01 | mov byte ptr ds:[eax+1],dl | eax+01:_TppWorkerThread@4+1
00405C84 | C600 01 | mov byte ptr ds:[eax],1 | eax:_TppWorkerThread@4
00405C87 | 8D55 EC | lea edx,dword ptr ss:[ebp-14] |
00405C8A | 8D45 E4 | lea eax,dword ptr ss:[ebp-1C] | eax:_TppWorkerThread@4
00405C8D | E8 72C9FFFF | call <brutme1.PStrCpy> |
00405C92 | 8D55 DC | lea edx,dword ptr ss:[ebp-24] |
00405C95 | 8B43 24 | mov eax,dword ptr ds:[ebx+24] | eax:_TppWorkerThread@4
00405C98 | E8 37F1FFFF | call <brutme1.GetSerial> |
00405C9D | 8B45 DC | mov eax,dword ptr ss:[ebp-24] | [ebp-24]: Serial
00405CA0 | 8A50 01 | mov dl,byte ptr ds:[eax+1] | 取第二位
00405CA3 | 8D45 E0 | lea eax,dword ptr ss:[ebp-20] | eax:_TppWorkerThread@4
00405CA6 | 8850 01 | mov byte ptr ds:[eax+1],dl | eax+01:_TppWorkerThread@4+1
00405CA9 | C600 01 | mov byte ptr ds:[eax],1 | eax:_TppWorkerThread@4
00405CAC | 8D55 E0 | lea edx,dword ptr ss:[ebp-20] | 2
00405CAF | 8D45 E4 | lea eax,dword ptr ss:[ebp-1C] | 1
00405CB2 | B1 02 | mov cl,2 |
00405CB4 | E8 1BC9FFFF | call <brutme1.PStrNCat> | 拼接12
00405CB9 | 8D55 E4 | lea edx,dword ptr ss:[ebp-1C] |
00405CBC | 8D45 D8 | lea eax,dword ptr ss:[ebp-28] | eax:_TppWorkerThread@4
00405CBF | E8 40C9FFFF | call <brutme1.PStrCpy> |
00405CC4 | 8D55 D4 | lea edx,dword ptr ss:[ebp-2C] | [ebp-2C]:"P羘"
00405CC7 | 8B43 24 | mov eax,dword ptr ds:[ebx+24] | eax:_TppWorkerThread@4
00405CCA | E8 05F1FFFF | call <brutme1.GetSerial> |
00405CCF | 8B45 D4 | mov eax,dword ptr ss:[ebp-2C] | eax:_TppWorkerThread@4, [ebp-2C]:"P羘"
00405CD2 | 8A50 02 | mov dl,byte ptr ds:[eax+2] | 3
00405CD5 | 8D45 E0 | lea eax,dword ptr ss:[ebp-20] | eax:_TppWorkerThread@4
00405CD8 | 8850 01 | mov byte ptr ds:[eax+1],dl | eax+01:_TppWorkerThread@4+1
00405CDB | C600 01 | mov byte ptr ds:[eax],1 | eax:_TppWorkerThread@4
00405CDE | 8D55 E0 | lea edx,dword ptr ss:[ebp-20] |
00405CE1 | 8D45 D8 | lea eax,dword ptr ss:[ebp-28] | eax:_TppWorkerThread@4
00405CE4 | B1 03 | mov cl,3 |
00405CE6 | E8 E9C8FFFF | call <brutme1.PStrNCat> |
00405CEB | 8D55 D8 | lea edx,dword ptr ss:[ebp-28] |
00405CEE | 8D45 CC | lea eax,dword ptr ss:[ebp-34] | eax:_TppWorkerThread@4
00405CF1 | E8 0EC9FFFF | call <brutme1.PStrCpy> |
00405CF6 | 8D55 C8 | lea edx,dword ptr ss:[ebp-38] |
00405CF9 | 8B43 24 | mov eax,dword ptr ds:[ebx+24] | eax:_TppWorkerThread@4
00405CFC | E8 D3F0FFFF | call <brutme1.GetSerial> |
00405D01 | 8B45 C8 | mov eax,dword ptr ss:[ebp-38] | eax:_TppWorkerThread@4
00405D04 | 8A50 03 | mov dl,byte ptr ds:[eax+3] | eax+03:_TppWorkerThread@4+3
00405D07 | 8D45 E0 | lea eax,dword ptr ss:[ebp-20] | eax:_TppWorkerThread@4
00405D0A | 8850 01 | mov byte ptr ds:[eax+1],dl | eax+01:_TppWorkerThread@4+1
00405D0D | C600 01 | mov byte ptr ds:[eax],1 | eax:_TppWorkerThread@4
00405D10 | 8D55 E0 | lea edx,dword ptr ss:[ebp-20] |
00405D13 | 8D45 CC | lea eax,dword ptr ss:[ebp-34] | eax:_TppWorkerThread@4
00405D16 | B1 04 | mov cl,4 |
00405D18 | E8 B7C8FFFF | call <brutme1.PStrNCat> |
00405D1D | 8D55 CC | lea edx,dword ptr ss:[ebp-34] | 前四位
00405D20 | 8D45 F8 | lea eax,dword ptr ss:[ebp-8] | eax:_TppWorkerThread@4
00405D23 | E8 F4D3FFFF | call brutme1.40311C | StrConvert
00405D28 | 8D55 C4 | lea edx,dword ptr ss:[ebp-3C] |
00405D2B | 8B43 24 | mov eax,dword ptr ds:[ebx+24] | eax:_TppWorkerThread@4
00405D2E | E8 A1F0FFFF | call <brutme1.GetSerial> |
00405D33 | 8B45 C4 | mov eax,dword ptr ss:[ebp-3C] | eax:_TppWorkerThread@4
00405D36 | 8A50 04 | mov dl,byte ptr ds:[eax+4] | eax+04:_TppWorkerThread@4+4
00405D39 | 8D45 EC | lea eax,dword ptr ss:[ebp-14] | eax:_TppWorkerThread@4
00405D3C | 8850 01 | mov byte ptr ds:[eax+1],dl | eax+01:_TppWorkerThread@4+1
00405D3F | C600 01 | mov byte ptr ds:[eax],1 | eax:_TppWorkerThread@4
00405D42 | 8D55 EC | lea edx,dword ptr ss:[ebp-14] |
00405D45 | 8D45 E4 | lea eax,dword ptr ss:[ebp-1C] | eax:_TppWorkerThread@4
00405D48 | E8 B7C8FFFF | call <brutme1.PStrCpy> | 5
00405D4D | 8D55 C0 | lea edx,dword ptr ss:[ebp-40] |
00405D50 | 8B43 24 | mov eax,dword ptr ds:[ebx+24] | eax:_TppWorkerThread@4
00405D53 | E8 7CF0FFFF | call <brutme1.GetSerial> |
00405D58 | 8B45 C0 | mov eax,dword ptr ss:[ebp-40] | eax:_TppWorkerThread@4
00405D5B | 8A50 05 | mov dl,byte ptr ds:[eax+5] | eax+05:_TppWorkerThread@4+5
00405D5E | 8D45 E0 | lea eax,dword ptr ss:[ebp-20] | eax:_TppWorkerThread@4
00405D61 | 8850 01 | mov byte ptr ds:[eax+1],dl | eax+01:_TppWorkerThread@4+1
00405D64 | C600 01 | mov byte ptr ds:[eax],1 | eax:_TppWorkerThread@4
00405D67 | 8D55 E0 | lea edx,dword ptr ss:[ebp-20] |
00405D6A | 8D45 E4 | lea eax,dword ptr ss:[ebp-1C] | eax:_TppWorkerThread@4
00405D6D | B1 02 | mov cl,2 |
00405D6F | E8 60C8FFFF | call <brutme1.PStrNCat> | 56
00405D74 | 8D55 E4 | lea edx,dword ptr ss:[ebp-1C] |
00405D77 | 8D45 D8 | lea eax,dword ptr ss:[ebp-28] | eax:_TppWorkerThread@4
00405D7A | E8 85C8FFFF | call <brutme1.PStrCpy> |
00405D7F | 8D55 BC | lea edx,dword ptr ss:[ebp-44] |
00405D82 | 8B43 24 | mov eax,dword ptr ds:[ebx+24] | eax:_TppWorkerThread@4
00405D85 | E8 4AF0FFFF | call <brutme1.GetSerial> |
00405D8A | 8B45 BC | mov eax,dword ptr ss:[ebp-44] | eax:_TppWorkerThread@4
00405D8D | 8A50 06 | mov dl,byte ptr ds:[eax+6] | eax+06:_TppWorkerThread@4+6
00405D90 | 8D45 E0 | lea eax,dword ptr ss:[ebp-20] | eax:_TppWorkerThread@4
00405D93 | 8850 01 | mov byte ptr ds:[eax+1],dl | eax+01:_TppWorkerThread@4+1
00405D96 | C600 01 | mov byte ptr ds:[eax],1 | eax:_TppWorkerThread@4
00405D99 | 8D55 E0 | lea edx,dword ptr ss:[ebp-20] |
00405D9C | 8D45 D8 | lea eax,dword ptr ss:[ebp-28] | eax:_TppWorkerThread@4
00405D9F | B1 03 | mov cl,3 |
00405DA1 | E8 2EC8FFFF | call <brutme1.PStrNCat> | 567
00405DA6 | 8D55 D8 | lea edx,dword ptr ss:[ebp-28] |
00405DA9 | 8D45 CC | lea eax,dword ptr ss:[ebp-34] | eax:_TppWorkerThread@4
00405DAC | E8 53C8FFFF | call <brutme1.PStrCpy> |
00405DB1 | 8D55 B8 | lea edx,dword ptr ss:[ebp-48] |
00405DB4 | 8B43 24 | mov eax,dword ptr ds:[ebx+24] | eax:_TppWorkerThread@4
00405DB7 | E8 18F0FFFF | call <brutme1.GetSerial> |
00405DBC | 8B45 B8 | mov eax,dword ptr ss:[ebp-48] | eax:_TppWorkerThread@4
00405DBF | 8A50 07 | mov dl,byte ptr ds:[eax+7] | eax+07:_TppWorkerThread@4+7
00405DC2 | 8D45 E0 | lea eax,dword ptr ss:[ebp-20] | eax:_TppWorkerThread@4
00405DC5 | 8850 01 | mov byte ptr ds:[eax+1],dl | eax+01:_TppWorkerThread@4+1
00405DC8 | C600 01 | mov byte ptr ds:[eax],1 | eax:_TppWorkerThread@4
00405DCB | 8D55 E0 | lea edx,dword ptr ss:[ebp-20] |
00405DCE | 8D45 CC | lea eax,dword ptr ss:[ebp-34] | eax:_TppWorkerThread@4
00405DD1 | B1 04 | mov cl,4 |
00405DD3 | E8 FCC7FFFF | call <brutme1.PStrNCat> | 5678
00405DD8 | 8D55 CC | lea edx,dword ptr ss:[ebp-34] |
00405DDB | 8D45 F4 | lea eax,dword ptr ss:[ebp-C] | eax:_TppWorkerThread@4, [ebp-0C]:__except_handler4
00405DDE | E8 39D3FFFF | call brutme1.40311C | StrConvert
00405DE3 | 8D55 FC | lea edx,dword ptr ss:[ebp-4] |
00405DE6 | 8B45 F8 | mov eax,dword ptr ss:[ebp-8] | 1234
00405DE9 | E8 42C8FFFF | call <brutme1.ValLong> |
00405DEE | 8BF0 | mov esi,eax | eax:_TppWorkerThread@4
00405DF0 | 837D FC 00 | cmp dword ptr ss:[ebp-4],0 |
00405DF4 | 75 34 | jne <brutme1.Fail> |
00405DF6 | 8D55 FC | lea edx,dword ptr ss:[ebp-4] |
00405DF9 | 8B45 F4 | mov eax,dword ptr ss:[ebp-C] | 5678
00405DFC | E8 2FC8FFFF | call <brutme1.ValLong> |
00405E01 | 8BF8 | mov edi,eax | eax:_TppWorkerThread@4
00405E03 | 837D FC 00 | cmp dword ptr ss:[ebp-4],0 |
00405E07 | 75 21 | jne <brutme1.Fail> |
```
转换后将两个数值送进另一个函数中计算
```assembly
00405E09 | 8BC3 | mov eax,ebx | ebx:"4Z@"
00405E0B | 8BCF | mov ecx,edi | 5678
00405E0D | 8BD6 | mov edx,esi | 1234
00405E0F | E8 F0FDFFFF | call <brutme1.CheckSerial> |
```
在这里经过0xD00B次循环处理后将结果与设定值`0x6F3AAD5A`进行比较
```assembly
00405C04 | 53 | push ebx | ebx:"4Z@"
00405C05 | B8 0BD00000 | mov eax,D00B | 0xD00B
00405C0A | 33D1 | xor edx,ecx | 1234 xor 5678
00405C0C | 8BD9 | mov ebx,ecx |
00405C0E | C1E3 02 | shl ebx,2 |
00405C11 | 8BCA | mov ecx,edx |
00405C13 | C1E9 02 | shr ecx,2 |
00405C16 | 03D9 | add ebx,ecx |
00405C18 | 8BCB | mov ecx,ebx |
00405C1A | 33CA | xor ecx,edx |
00405C1C | 48 | dec eax | eax:_TppWorkerThread@4
00405C1D | 75 EB | jne brutme1.405C0A |
00405C1F | 81FB 5AAD3A6F | cmp ebx,6F3AAD5A |
00405C25 | 75 04 | jne brutme1.405C2B |
00405C27 | B0 01 | mov al,1 |
00405C29 | 5B | pop ebx |
00405C2A | C3 | ret |
00405C2B | 33C0 | xor eax,eax | eax:_TppWorkerThread@4
00405C2D | 5B | pop ebx |
00405C2E | C3 | ret |
```
怎么看都不像是能直接逆的,所以直接准备暴力破解:
(大概需要几分钟~十几分钟时间,喝杯水稍作等待)
```c#
static void Main()
{
var parallelOptions = new ParallelOptions
{
MaxDegreeOfParallelism = 6 //根据设备自行调整
};
Parallel.For(0, 10000, parallelOptions, (i, state) =>
{
for (int j = 0; j <= 9999; j++)
{
if (CheckIfMatchesCondition(i, j))
{
Console.WriteLine($"Found match: {i:D4}-{j:D4}");
state.Stop();
break;
}
}
});
}
static bool CheckIfMatchesCondition(int p1, int p2)
{
uint edx = (uint)p1;
uint ecx = (uint)p2;
uint ebx;
int eax = 0xD00B;
do
{
edx ^= ecx;
ebx = (ecx << 2) + (edx >> 2);
ecx = ebx ^ edx;
}
while (--eax > 0);
return ebx == 0x6F3AAD5A;
}
```

View File

@ -0,0 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<Platforms>AnyCPU;x64;x86</Platforms>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,41 @@
namespace FindKey
{
internal class Program
{
static void Main()
{
var parallelOptions = new ParallelOptions
{
MaxDegreeOfParallelism = 6
};
Parallel.For(0, 10000, parallelOptions, (i, state) =>
{
for (int j = 0; j <= 9999; j++)
{
if (CheckIfMatchesCondition(i, j))
{
Console.WriteLine($"Found match: {i:D4}-{j:D4}");
state.Stop();
break;
}
}
});
}
static bool CheckIfMatchesCondition(int p1, int p2)
{
uint edx = (uint)p1;
uint ecx = (uint)p2;
uint ebx;
int eax = 0xD00B;
do
{
edx ^= ecx;
ebx = (ecx << 2) + (edx >> 2);
ecx = ebx ^ edx;
}
while (--eax > 0);
return ebx == 0x6F3AAD5A;
}
}
}

149
brutme1/source/keygen1.sln Normal file
View File

@ -0,0 +1,149 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.11.35303.130
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "keygen1", "keygen1\keygen1.csproj", "{D0E162E3-FC99-4405-BEE1-AB85D9D41DA9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "keygen2", "keygen2\keygen2.csproj", "{2446CB50-1882-4219-9DB0-E7F5517E6E20}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "keygen3", "keygen3\keygen3.csproj", "{BC47A6DE-7F9D-4D65-A996-69FB778C95F3}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GiveMeSerial", "GiveMeSerial\GiveMeSerial.vcxproj", "{E3604156-7DF2-4B5F-AECA-64786B92F38C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DllInjector", "DllInjector\DllInjector.csproj", "{A5A24406-1296-457B-91A3-60E67511D807}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GetSerial", "GetSerial\GetSerial.vcxproj", "{85044A5C-C4A3-4C79-9AD5-6895F61F8515}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GuessSerial", "GuessSerial\GuessSerial.csproj", "{7B2D3886-A213-4F99-89F7-D0D7DDAA97D9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Validator", "Validator\Validator.csproj", "{6BE1ED72-6CA9-4442-B529-C867A9D6904C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FindKey", "FindKey\FindKey.csproj", "{D5E3C871-EA87-48E7-9287-E96B8410EB18}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{D0E162E3-FC99-4405-BEE1-AB85D9D41DA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D0E162E3-FC99-4405-BEE1-AB85D9D41DA9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D0E162E3-FC99-4405-BEE1-AB85D9D41DA9}.Debug|x64.ActiveCfg = Debug|Any CPU
{D0E162E3-FC99-4405-BEE1-AB85D9D41DA9}.Debug|x64.Build.0 = Debug|Any CPU
{D0E162E3-FC99-4405-BEE1-AB85D9D41DA9}.Debug|x86.ActiveCfg = Debug|x86
{D0E162E3-FC99-4405-BEE1-AB85D9D41DA9}.Debug|x86.Build.0 = Debug|x86
{D0E162E3-FC99-4405-BEE1-AB85D9D41DA9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D0E162E3-FC99-4405-BEE1-AB85D9D41DA9}.Release|Any CPU.Build.0 = Release|Any CPU
{D0E162E3-FC99-4405-BEE1-AB85D9D41DA9}.Release|x64.ActiveCfg = Release|x64
{D0E162E3-FC99-4405-BEE1-AB85D9D41DA9}.Release|x64.Build.0 = Release|x64
{D0E162E3-FC99-4405-BEE1-AB85D9D41DA9}.Release|x86.ActiveCfg = Release|x86
{D0E162E3-FC99-4405-BEE1-AB85D9D41DA9}.Release|x86.Build.0 = Release|x86
{2446CB50-1882-4219-9DB0-E7F5517E6E20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2446CB50-1882-4219-9DB0-E7F5517E6E20}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2446CB50-1882-4219-9DB0-E7F5517E6E20}.Debug|x64.ActiveCfg = Debug|x64
{2446CB50-1882-4219-9DB0-E7F5517E6E20}.Debug|x64.Build.0 = Debug|x64
{2446CB50-1882-4219-9DB0-E7F5517E6E20}.Debug|x86.ActiveCfg = Debug|x86
{2446CB50-1882-4219-9DB0-E7F5517E6E20}.Debug|x86.Build.0 = Debug|x86
{2446CB50-1882-4219-9DB0-E7F5517E6E20}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2446CB50-1882-4219-9DB0-E7F5517E6E20}.Release|Any CPU.Build.0 = Release|Any CPU
{2446CB50-1882-4219-9DB0-E7F5517E6E20}.Release|x64.ActiveCfg = Release|x64
{2446CB50-1882-4219-9DB0-E7F5517E6E20}.Release|x64.Build.0 = Release|x64
{2446CB50-1882-4219-9DB0-E7F5517E6E20}.Release|x86.ActiveCfg = Release|x86
{2446CB50-1882-4219-9DB0-E7F5517E6E20}.Release|x86.Build.0 = Release|x86
{BC47A6DE-7F9D-4D65-A996-69FB778C95F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BC47A6DE-7F9D-4D65-A996-69FB778C95F3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BC47A6DE-7F9D-4D65-A996-69FB778C95F3}.Debug|x64.ActiveCfg = Debug|Any CPU
{BC47A6DE-7F9D-4D65-A996-69FB778C95F3}.Debug|x64.Build.0 = Debug|Any CPU
{BC47A6DE-7F9D-4D65-A996-69FB778C95F3}.Debug|x86.ActiveCfg = Debug|x86
{BC47A6DE-7F9D-4D65-A996-69FB778C95F3}.Debug|x86.Build.0 = Debug|x86
{BC47A6DE-7F9D-4D65-A996-69FB778C95F3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BC47A6DE-7F9D-4D65-A996-69FB778C95F3}.Release|Any CPU.Build.0 = Release|Any CPU
{BC47A6DE-7F9D-4D65-A996-69FB778C95F3}.Release|x64.ActiveCfg = Release|x64
{BC47A6DE-7F9D-4D65-A996-69FB778C95F3}.Release|x64.Build.0 = Release|x64
{BC47A6DE-7F9D-4D65-A996-69FB778C95F3}.Release|x86.ActiveCfg = Release|x86
{BC47A6DE-7F9D-4D65-A996-69FB778C95F3}.Release|x86.Build.0 = Release|x86
{E3604156-7DF2-4B5F-AECA-64786B92F38C}.Debug|Any CPU.ActiveCfg = Debug|x64
{E3604156-7DF2-4B5F-AECA-64786B92F38C}.Debug|Any CPU.Build.0 = Debug|x64
{E3604156-7DF2-4B5F-AECA-64786B92F38C}.Debug|x64.ActiveCfg = Debug|x64
{E3604156-7DF2-4B5F-AECA-64786B92F38C}.Debug|x64.Build.0 = Debug|x64
{E3604156-7DF2-4B5F-AECA-64786B92F38C}.Debug|x86.ActiveCfg = Debug|Win32
{E3604156-7DF2-4B5F-AECA-64786B92F38C}.Debug|x86.Build.0 = Debug|Win32
{E3604156-7DF2-4B5F-AECA-64786B92F38C}.Release|Any CPU.ActiveCfg = Release|x64
{E3604156-7DF2-4B5F-AECA-64786B92F38C}.Release|Any CPU.Build.0 = Release|x64
{E3604156-7DF2-4B5F-AECA-64786B92F38C}.Release|x64.ActiveCfg = Release|x64
{E3604156-7DF2-4B5F-AECA-64786B92F38C}.Release|x64.Build.0 = Release|x64
{E3604156-7DF2-4B5F-AECA-64786B92F38C}.Release|x86.ActiveCfg = Release|Win32
{E3604156-7DF2-4B5F-AECA-64786B92F38C}.Release|x86.Build.0 = Release|Win32
{A5A24406-1296-457B-91A3-60E67511D807}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A5A24406-1296-457B-91A3-60E67511D807}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A5A24406-1296-457B-91A3-60E67511D807}.Debug|x64.ActiveCfg = Debug|Any CPU
{A5A24406-1296-457B-91A3-60E67511D807}.Debug|x64.Build.0 = Debug|Any CPU
{A5A24406-1296-457B-91A3-60E67511D807}.Debug|x86.ActiveCfg = Debug|Any CPU
{A5A24406-1296-457B-91A3-60E67511D807}.Debug|x86.Build.0 = Debug|Any CPU
{A5A24406-1296-457B-91A3-60E67511D807}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A5A24406-1296-457B-91A3-60E67511D807}.Release|Any CPU.Build.0 = Release|Any CPU
{A5A24406-1296-457B-91A3-60E67511D807}.Release|x64.ActiveCfg = Release|x64
{A5A24406-1296-457B-91A3-60E67511D807}.Release|x64.Build.0 = Release|x64
{A5A24406-1296-457B-91A3-60E67511D807}.Release|x86.ActiveCfg = Release|x86
{A5A24406-1296-457B-91A3-60E67511D807}.Release|x86.Build.0 = Release|x86
{85044A5C-C4A3-4C79-9AD5-6895F61F8515}.Debug|Any CPU.ActiveCfg = Debug|x64
{85044A5C-C4A3-4C79-9AD5-6895F61F8515}.Debug|Any CPU.Build.0 = Debug|x64
{85044A5C-C4A3-4C79-9AD5-6895F61F8515}.Debug|x64.ActiveCfg = Debug|x64
{85044A5C-C4A3-4C79-9AD5-6895F61F8515}.Debug|x64.Build.0 = Debug|x64
{85044A5C-C4A3-4C79-9AD5-6895F61F8515}.Debug|x86.ActiveCfg = Debug|Win32
{85044A5C-C4A3-4C79-9AD5-6895F61F8515}.Debug|x86.Build.0 = Debug|Win32
{85044A5C-C4A3-4C79-9AD5-6895F61F8515}.Release|Any CPU.ActiveCfg = Release|x64
{85044A5C-C4A3-4C79-9AD5-6895F61F8515}.Release|Any CPU.Build.0 = Release|x64
{85044A5C-C4A3-4C79-9AD5-6895F61F8515}.Release|x64.ActiveCfg = Release|x64
{85044A5C-C4A3-4C79-9AD5-6895F61F8515}.Release|x64.Build.0 = Release|x64
{85044A5C-C4A3-4C79-9AD5-6895F61F8515}.Release|x86.ActiveCfg = Release|Win32
{85044A5C-C4A3-4C79-9AD5-6895F61F8515}.Release|x86.Build.0 = Release|Win32
{7B2D3886-A213-4F99-89F7-D0D7DDAA97D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7B2D3886-A213-4F99-89F7-D0D7DDAA97D9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7B2D3886-A213-4F99-89F7-D0D7DDAA97D9}.Debug|x64.ActiveCfg = Debug|Any CPU
{7B2D3886-A213-4F99-89F7-D0D7DDAA97D9}.Debug|x64.Build.0 = Debug|Any CPU
{7B2D3886-A213-4F99-89F7-D0D7DDAA97D9}.Debug|x86.ActiveCfg = Debug|Any CPU
{7B2D3886-A213-4F99-89F7-D0D7DDAA97D9}.Debug|x86.Build.0 = Debug|Any CPU
{7B2D3886-A213-4F99-89F7-D0D7DDAA97D9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7B2D3886-A213-4F99-89F7-D0D7DDAA97D9}.Release|Any CPU.Build.0 = Release|Any CPU
{7B2D3886-A213-4F99-89F7-D0D7DDAA97D9}.Release|x64.ActiveCfg = Release|x64
{7B2D3886-A213-4F99-89F7-D0D7DDAA97D9}.Release|x64.Build.0 = Release|x64
{7B2D3886-A213-4F99-89F7-D0D7DDAA97D9}.Release|x86.ActiveCfg = Release|x86
{7B2D3886-A213-4F99-89F7-D0D7DDAA97D9}.Release|x86.Build.0 = Release|x86
{6BE1ED72-6CA9-4442-B529-C867A9D6904C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6BE1ED72-6CA9-4442-B529-C867A9D6904C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6BE1ED72-6CA9-4442-B529-C867A9D6904C}.Debug|x64.ActiveCfg = Debug|Any CPU
{6BE1ED72-6CA9-4442-B529-C867A9D6904C}.Debug|x64.Build.0 = Debug|Any CPU
{6BE1ED72-6CA9-4442-B529-C867A9D6904C}.Debug|x86.ActiveCfg = Debug|Any CPU
{6BE1ED72-6CA9-4442-B529-C867A9D6904C}.Debug|x86.Build.0 = Debug|Any CPU
{6BE1ED72-6CA9-4442-B529-C867A9D6904C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6BE1ED72-6CA9-4442-B529-C867A9D6904C}.Release|Any CPU.Build.0 = Release|Any CPU
{6BE1ED72-6CA9-4442-B529-C867A9D6904C}.Release|x64.ActiveCfg = Release|x64
{6BE1ED72-6CA9-4442-B529-C867A9D6904C}.Release|x64.Build.0 = Release|x64
{6BE1ED72-6CA9-4442-B529-C867A9D6904C}.Release|x86.ActiveCfg = Release|x86
{6BE1ED72-6CA9-4442-B529-C867A9D6904C}.Release|x86.Build.0 = Release|x86
{D5E3C871-EA87-48E7-9287-E96B8410EB18}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D5E3C871-EA87-48E7-9287-E96B8410EB18}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D5E3C871-EA87-48E7-9287-E96B8410EB18}.Debug|x64.ActiveCfg = Debug|Any CPU
{D5E3C871-EA87-48E7-9287-E96B8410EB18}.Debug|x64.Build.0 = Debug|Any CPU
{D5E3C871-EA87-48E7-9287-E96B8410EB18}.Debug|x86.ActiveCfg = Debug|Any CPU
{D5E3C871-EA87-48E7-9287-E96B8410EB18}.Debug|x86.Build.0 = Debug|Any CPU
{D5E3C871-EA87-48E7-9287-E96B8410EB18}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D5E3C871-EA87-48E7-9287-E96B8410EB18}.Release|Any CPU.Build.0 = Release|Any CPU
{D5E3C871-EA87-48E7-9287-E96B8410EB18}.Release|x64.ActiveCfg = Release|x64
{D5E3C871-EA87-48E7-9287-E96B8410EB18}.Release|x64.Build.0 = Release|x64
{D5E3C871-EA87-48E7-9287-E96B8410EB18}.Release|x86.ActiveCfg = Release|x86
{D5E3C871-EA87-48E7-9287-E96B8410EB18}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {01ED3EE8-E89A-4A27-AF68-EF2490CB6BD7}
EndGlobalSection
EndGlobal