updated vmprofiler to v1.6, applied clang-format

merge-requests/1/head
_xeroxz 4 years ago
parent 7b9033a6fc
commit 7fc9c9960b

@ -1 +1 @@
Subproject commit 5129d39eb726e32a80417165ec37b597357664d4 Subproject commit e58c23c40e13528f5d9b84feb7e23b62a886ed5a

@ -38,7 +38,7 @@ namespace vm
exit( -1 ); exit( -1 );
} }
if (!vm::transform::inverse_transforms( encrypt_vinstrs_rva )) if ( !vm::transform::inverse_transforms( encrypt_vinstrs_rva ) )
{ {
std::printf( "[!] failed to inverse virtual instruction rva decrypt instructions...\n" ); std::printf( "[!] failed to inverse virtual instruction rva decrypt instructions...\n" );
exit( -1 ); exit( -1 );
@ -142,7 +142,7 @@ namespace vm
for ( auto &instr : encrypt_vinstrs_rva ) for ( auto &instr : encrypt_vinstrs_rva )
rva = vm::transform::apply( instr.operands[ 0 ].size, instr.mnemonic, rva, rva = vm::transform::apply( instr.operands[ 0 ].size, instr.mnemonic, rva,
transform::has_imm( &instr ) ? instr.operands[ 1 ].imm.value.u : 0 ); transform::has_imm( &instr ) ? instr.operands[ 1 ].imm.value.u : 0 );
std::printf( "> encrypted rva = 0x%p\n", rva ); std::printf( "> encrypted rva = 0x%p\n", rva );
return rva; return rva;

@ -7,120 +7,109 @@
#include <xtils.hpp> #include <xtils.hpp>
#include "compiler.h" #include "compiler.h"
#include "parser.tab.h"
#include "parser.h" #include "parser.h"
#include "parser.tab.h"
#include "vmasm.hpp" #include "vmasm.hpp"
extern FILE* yyin; extern FILE *yyin;
extern "C" int yywrap() extern "C" int yywrap()
{ return 1; } {
return 1;
}
void yyerror(char* msg) void yyerror( char *msg )
{ std::printf("[!] parsing failure: %s\n", msg); } {
std::printf( "[!] parsing failure: %s\n", msg );
}
int __cdecl main(int argc, const char* argv[]) int __cdecl main( int argc, const char *argv[] )
{ {
argparse::argument_parser_t argp( "vmassembler", "virtual instruction assembler" ); argparse::argument_parser_t argp( "vmassembler", "virtual instruction assembler" );
argp.add_argument() argp.add_argument()
.names({ "--input", "--in" }) .names( { "--input", "--in" } )
.description("path to a vasm file to be assembled...") .description( "path to a vasm file to be assembled..." )
.required(true); .required( true );
argp.add_argument() argp.add_argument().names( { "--vmpbin", "--bin" } ).description( "path to protected binary..." ).required( true );
.names({ "--vmpbin", "--bin" }) argp.add_argument().names( { "--vmentry", "--entry" } ).description( "rva to vm entry..." ).required( true );
.description("path to protected binary...") argp.add_argument().name( { "--output" } ).description( "output file name and path..." ).required( true );
.required(true);
argp.enable_help();
argp.add_argument() auto err = argp.parse( argc, argv );
.names({ "--vmentry", "--entry" })
.description("rva to vm entry...") if ( err )
.required(true); {
std::cout << err << std::endl;
argp.add_argument() return -1;
.name({ "--output" }) }
.description("output file name and path...")
.required(true); if ( argp.exists( "help" ) )
{
argp.enable_help(); argp.print_help();
auto err = argp.parse(argc, argv); return 0;
}
if (err)
{ //
std::cout << err << std::endl; // set yyin to the vasm file...
return -1; //
}
if ( ( yyin = fopen( argp.get< std::string >( "input" ).c_str(), "r" ) ) == nullptr )
if (argp.exists("help")) {
{ std::printf( "[!] failed to open vasm file...\n" );
argp.print_help(); return -1;
return 0; }
}
//
// // parse vasm file for all of the instructions...
// set yyin to the vasm file... //
//
yyparse();
if ((yyin = fopen(argp.get<std::string>("input").c_str(), "r")) == nullptr) std::printf( "[+] finished parsing vasm file...\n" );
{
std::printf("[!] failed to open vasm file...\n"); //
return -1; // init vm variables...
} //
// const auto module_base = reinterpret_cast< std::uintptr_t >(
// parse vasm file for all of the instructions... LoadLibraryExA( argp.get< std::string >( "vmpbin" ).c_str(), NULL, DONT_RESOLVE_DLL_REFERENCES ) );
//
const auto vm_entry_rva = std::strtoull( argp.get< std::string >( "vmentry" ).c_str(), nullptr, 16 );
yyparse(); const auto image_base = xtils::um_t::get_instance()->image_base( argp.get< std::string >( "vmpbin" ).c_str() );
std::printf("[+] finished parsing vasm file...\n");
//
// init vm variables...
//
const auto module_base =
reinterpret_cast<std::uintptr_t>(
LoadLibraryExA(argp.get<std::string>("vmpbin").c_str(),
NULL, DONT_RESOLVE_DLL_REFERENCES));
const auto vm_entry_rva = std::strtoull(
argp.get<std::string>("vmentry").c_str(), nullptr, 16);
const auto image_base =
xtils::um_t::get_instance()->image_base( argp.get< std::string >( "vmpbin" ).c_str() );
zydis_routine_t vm_entry, calc_jmp; zydis_routine_t vm_entry, calc_jmp;
std::vector< vm::handler::handler_t > vm_handlers; std::vector< vm::handler::handler_t > vm_handlers;
std::uintptr_t* vm_handler_table; std::uintptr_t *vm_handler_table;
if (!vm::util::flatten(vm_entry, module_base + vm_entry_rva)) if ( !vm::util::flatten( vm_entry, module_base + vm_entry_rva ) )
{ {
std::printf("[!] failed to flatten vm entry...\n"); std::printf( "[!] failed to flatten vm entry...\n" );
return -1; return -1;
} }
std::printf("[+] flattened vm_entry...\n"); std::printf( "[+] flattened vm_entry...\n" );
vm::util::deobfuscate(vm_entry); std::printf( "[+] deobfuscated vm_entry...\n" );
std::printf("[+] deobfuscated vm_entry...\n");
vm::util::print(vm_entry); vm::util::deobfuscate( vm_entry );
vm::util::print( vm_entry );
if (!(vm_handler_table = vm::handler::table::get(vm_entry)))
{ if ( !( vm_handler_table = vm::handler::table::get( vm_entry ) ) )
std::printf("[!] failed to obtain vm handler table...\n"); {
return -1; std::printf( "[!] failed to obtain vm handler table...\n" );
} return -1;
}
if (!vm::handler::get_all(module_base, image_base, vm_entry, vm_handler_table, vm_handlers))
{ if ( !vm::handler::get_all( module_base, image_base, vm_entry, vm_handler_table, vm_handlers ) )
std::printf("[!] failed to get all vm handlers...\n"); {
return -1; std::printf( "[!] failed to get all vm handlers...\n" );
} return -1;
}
if ( !vm::calc_jmp::get( vm_entry, calc_jmp ) ) if ( !vm::calc_jmp::get( vm_entry, calc_jmp ) )
{ {
std::printf("[!] failed to get calc_jmp...\n"); std::printf( "[!] failed to get calc_jmp...\n" );
return -1; return -1;
} }
const auto advancement = vm::calc_jmp::get_advancement( calc_jmp ); const auto advancement = vm::calc_jmp::get_advancement( calc_jmp );
@ -130,76 +119,75 @@ int __cdecl main(int argc, const char* argv[])
return -1; return -1;
} }
std::printf( "> virtual instruction pointer advances %s...\n", std::printf( "> virtual instruction pointer advances %s...\n",
advancement.value() == vmp2::exec_type_t::forward ? "forward" : "backward" ); advancement.value() == vmp2::exec_type_t::forward ? "forward" : "backward" );
vm::compiler_t compiler( { module_base, image_base }, vm::compiler_t compiler( { module_base, image_base }, advancement.value(), &vm_handlers, &calc_jmp, &vm_entry );
advancement.value(), &vm_handlers, &calc_jmp, &vm_entry );
//
// encode virtual instructions...
//
auto [ encoded_success, vinstrs ] = compiler.encode();
std::printf( "[+] finished encoding... encoded instructions below...\n" );
if ( !encoded_success )
{
std::printf( "[!] failed to encode virtual instructions...\n" );
return -1;
}
for ( auto &vinstr : *vinstrs )
{
if ( vinstr.imm_size )
std::printf( "> 0x%x - 0x%x\n", vinstr.vm_handler, vinstr.operand );
else
std::printf( "> 0x%x\n", vinstr.vm_handler );
}
// //
// encode virtual instructions... // encrypt virtual instructions...
// //
auto [encoded_success, vinstrs] = compiler.encode(); auto [ entry_rva, result_buffer ] = compiler.encrypt();
std::printf("[+] finished encoding... encoded instructions below...\n"); std::printf( "[+] finished encrypting... encrypted instructions below...\n" );
if (!encoded_success) if ( !entry_rva )
{ {
std::printf("[!] failed to encode virtual instructions...\n"); std::printf( "[!] failed to encrypt virtual instructions...\n" );
return -1; return -1;
} }
for (auto& vinstr : *vinstrs) std::printf( "> virtual instructions must be allocated at = 0x%p\n", entry_rva );
{ std::printf( "> " );
if (vinstr.imm_size) {
std::printf("> 0x%x - 0x%x\n", vinstr.vm_handler, vinstr.operand); auto idx = 0u;
else for ( auto byte : *result_buffer )
std::printf("> 0x%x\n", vinstr.vm_handler); {
} std::printf( "0x%x ", byte );
if ( ++idx == 10 )
// {
// encrypt virtual instructions... std::printf( "\n" );
// idx = 0u;
}
auto [entry_rva, result_buffer] = compiler.encrypt(); }
std::printf("[+] finished encrypting... encrypted instructions below...\n"); }
std::printf( "\n" );
if (!entry_rva)
{ //
std::printf("[!] failed to encrypt virtual instructions...\n"); // write the result to disk...
return -1; //
}
vmasm::file_header_t file_header;
std::printf("> virtual instructions must be allocated at = 0x%p\n", entry_rva); file_header.magic = VASM_MAGIC;
std::printf("> "); file_header.epoch_time = std::time( nullptr );
{ file_header.vasm_size = result_buffer->size();
auto idx = 0u; file_header.alloc_rva = ( entry_rva - image_base );
for (auto byte : *result_buffer) file_header.vasm_offset = sizeof vmasm::file_header_t;
{
std::printf("0x%x ", byte);
if (++idx == 10)
{
std::printf("\n");
idx = 0u;
}
}
}
std::printf("\n");
//
// write the result to disk...
//
vmasm::file_header_t file_header;
file_header.magic = VASM_MAGIC;
file_header.epoch_time = std::time(nullptr);
file_header.vasm_size = result_buffer->size();
file_header.alloc_rva = (entry_rva - image_base);
file_header.vasm_offset = sizeof vmasm::file_header_t;
file_header.encrypted_rva = compiler.encrypt_rva( entry_rva ); file_header.encrypted_rva = compiler.encrypt_rva( entry_rva );
std::ofstream output(argp.get<std::string>("output"), std::ios::binary); std::ofstream output( argp.get< std::string >( "output" ), std::ios::binary );
output.write(reinterpret_cast<char*>(&file_header), sizeof file_header); output.write( reinterpret_cast< char * >( &file_header ), sizeof file_header );
output.write(reinterpret_cast<char*>(result_buffer->data()), result_buffer->size()); output.write( reinterpret_cast< char * >( result_buffer->data() ), result_buffer->size() );
output.close(); output.close();
} }

@ -1,31 +1,32 @@
#include "parser.h" #include "parser.h"
parse_t::parse_t() parse_t::parse_t()
{} {
}
auto parse_t::get_instance() -> parse_t* auto parse_t::get_instance() -> parse_t *
{ {
static parse_t obj; static parse_t obj;
return &obj; return &obj;
} }
void parse_t::add_vinstr(std::string vinstr_name) void parse_t::add_vinstr( std::string vinstr_name )
{ {
_vinstr_meta data{ vinstr_name, false, 0u }; _vinstr_meta data{ vinstr_name, false, 0u };
vinstrs.push_back(data); vinstrs.push_back( data );
} }
void parse_t::add_vinstr(std::string vinstr_name, std::uintptr_t imm_val) void parse_t::add_vinstr( std::string vinstr_name, std::uintptr_t imm_val )
{ {
_vinstr_meta data{ vinstr_name, true, imm_val }; _vinstr_meta data{ vinstr_name, true, imm_val };
vinstrs.push_back(data); vinstrs.push_back( data );
} }
bool parse_t::for_each(callback_t callback) bool parse_t::for_each( callback_t callback )
{ {
for (auto& entry : vinstrs) for ( auto &entry : vinstrs )
if (!callback(&entry)) if ( !callback( &entry ) )
return false; return false;
return true; return true;
} }

@ -1,29 +1,30 @@
#pragma once #pragma once
#include <iostream>
#include <cstdint> #include <cstdint>
#include <vector>
#include <functional> #include <functional>
#include <iostream>
#include <vector>
struct _vinstr_meta struct _vinstr_meta
{ {
std::string name; std::string name;
bool has_imm; bool has_imm;
std::uintptr_t imm; std::uintptr_t imm;
}; };
using callback_t = std::function<bool(_vinstr_meta*)>; using callback_t = std::function< bool( _vinstr_meta * ) >;
// this singleton class contains all the // this singleton class contains all the
// information for parsed virtual instructions... // information for parsed virtual instructions...
class parse_t class parse_t
{ {
public: public:
static auto get_instance() -> parse_t*; static auto get_instance() -> parse_t *;
void add_vinstr(std::string vinstr_name); void add_vinstr( std::string vinstr_name );
void add_vinstr(std::string vinstr_name, std::uintptr_t imm_val); void add_vinstr( std::string vinstr_name, std::uintptr_t imm_val );
bool for_each(callback_t callback); bool for_each( callback_t callback );
private:
parse_t(); private:
std::vector<_vinstr_meta> vinstrs; parse_t();
std::vector< _vinstr_meta > vinstrs;
}; };

@ -4,19 +4,19 @@
namespace vmasm namespace vmasm
{ {
enum class version_t enum class version_t
{ {
v1 v1
}; };
struct file_header_t struct file_header_t
{ {
std::uint32_t magic; // VASM std::uint32_t magic; // VASM
version_t version; version_t version;
std::uint64_t epoch_time; std::uint64_t epoch_time;
std::uint64_t alloc_rva; std::uint64_t alloc_rva;
std::uint64_t encrypted_rva; std::uint64_t encrypted_rva;
std::uint32_t vasm_size; std::uint32_t vasm_size;
std::uint32_t vasm_offset; std::uint32_t vasm_offset;
}; };
} } // namespace vmasm

@ -142,7 +142,7 @@
<ProjectReference Include="..\dependencies\vmprofiler\dependencies\zydis\msvc\zydis\Zydis.vcxproj"> <ProjectReference Include="..\dependencies\vmprofiler\dependencies\zydis\msvc\zydis\Zydis.vcxproj">
<Project>{88a23124-5640-35a0-b890-311d7a67a7d2}</Project> <Project>{88a23124-5640-35a0-b890-311d7a67a7d2}</Project>
</ProjectReference> </ProjectReference>
<ProjectReference Include="..\dependencies\vmprofiler\src\vmprofiler.vcxproj"> <ProjectReference Include="..\dependencies\vmprofiler\vmprofiler.vcxproj">
<Project>{d0b6092a-9944-4f24-9486-4b7dae372619}</Project> <Project>{d0b6092a-9944-4f24-9486-4b7dae372619}</Project>
</ProjectReference> </ProjectReference>
</ItemGroup> </ItemGroup>

@ -5,12 +5,14 @@ VisualStudioVersion = 16.0.30907.101
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vmassembler", "src\vmassembler.vcxproj", "{6AC977FF-BD53-4A74-8452-69B3500924E8}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vmassembler", "src\vmassembler.vcxproj", "{6AC977FF-BD53-4A74-8452-69B3500924E8}"
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vmprofiler", "dependencies\vmprofiler\src\vmprofiler.vcxproj", "{D0B6092A-9944-4F24-9486-4B7DAE372619}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Zydis", "dependencies\vmprofiler\dependencies\zydis\msvc\zydis\Zydis.vcxproj", "{88A23124-5640-35A0-B890-311D7A67A7D2}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Zydis", "dependencies\vmprofiler\dependencies\zydis\msvc\zydis\Zydis.vcxproj", "{88A23124-5640-35A0-B890-311D7A67A7D2}"
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vmprofiler", "dependencies\vmprofiler\vmprofiler.vcxproj", "{D0B6092A-9944-4F24-9486-4B7DAE372619}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
DBG|x64 = DBG|x64
DBG|x86 = DBG|x86
Debug Kernel|x64 = Debug Kernel|x64 Debug Kernel|x64 = Debug Kernel|x64
Debug Kernel|x86 = Debug Kernel|x86 Debug Kernel|x86 = Debug Kernel|x86
Debug MD DLL|x64 = Debug MD DLL|x64 Debug MD DLL|x64 = Debug MD DLL|x64
@ -35,6 +37,10 @@ Global
Release|x86 = Release|x86 Release|x86 = Release|x86
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution GlobalSection(ProjectConfigurationPlatforms) = postSolution
{6AC977FF-BD53-4A74-8452-69B3500924E8}.DBG|x64.ActiveCfg = Release|x64
{6AC977FF-BD53-4A74-8452-69B3500924E8}.DBG|x64.Build.0 = Release|x64
{6AC977FF-BD53-4A74-8452-69B3500924E8}.DBG|x86.ActiveCfg = Release|x64
{6AC977FF-BD53-4A74-8452-69B3500924E8}.DBG|x86.Build.0 = Release|x64
{6AC977FF-BD53-4A74-8452-69B3500924E8}.Debug Kernel|x64.ActiveCfg = Release|x64 {6AC977FF-BD53-4A74-8452-69B3500924E8}.Debug Kernel|x64.ActiveCfg = Release|x64
{6AC977FF-BD53-4A74-8452-69B3500924E8}.Debug Kernel|x64.Build.0 = Release|x64 {6AC977FF-BD53-4A74-8452-69B3500924E8}.Debug Kernel|x64.Build.0 = Release|x64
{6AC977FF-BD53-4A74-8452-69B3500924E8}.Debug Kernel|x86.ActiveCfg = Release|x64 {6AC977FF-BD53-4A74-8452-69B3500924E8}.Debug Kernel|x86.ActiveCfg = Release|x64
@ -78,49 +84,10 @@ Global
{6AC977FF-BD53-4A74-8452-69B3500924E8}.Release|x64.ActiveCfg = Release|x64 {6AC977FF-BD53-4A74-8452-69B3500924E8}.Release|x64.ActiveCfg = Release|x64
{6AC977FF-BD53-4A74-8452-69B3500924E8}.Release|x64.Build.0 = Release|x64 {6AC977FF-BD53-4A74-8452-69B3500924E8}.Release|x64.Build.0 = Release|x64
{6AC977FF-BD53-4A74-8452-69B3500924E8}.Release|x86.ActiveCfg = Release|x64 {6AC977FF-BD53-4A74-8452-69B3500924E8}.Release|x86.ActiveCfg = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug Kernel|x64.ActiveCfg = Release|x64 {88A23124-5640-35A0-B890-311D7A67A7D2}.DBG|x64.ActiveCfg = Debug MT|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug Kernel|x64.Build.0 = Release|x64 {88A23124-5640-35A0-B890-311D7A67A7D2}.DBG|x64.Build.0 = Debug MT|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug Kernel|x86.ActiveCfg = Release|x64 {88A23124-5640-35A0-B890-311D7A67A7D2}.DBG|x86.ActiveCfg = Debug MT|Win32
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug Kernel|x86.Build.0 = Release|x64 {88A23124-5640-35A0-B890-311D7A67A7D2}.DBG|x86.Build.0 = Debug MT|Win32
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug MD DLL|x64.ActiveCfg = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug MD DLL|x64.Build.0 = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug MD DLL|x86.ActiveCfg = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug MD DLL|x86.Build.0 = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug MD|x64.ActiveCfg = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug MD|x64.Build.0 = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug MD|x86.ActiveCfg = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug MD|x86.Build.0 = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug MT DLL|x64.ActiveCfg = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug MT DLL|x64.Build.0 = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug MT DLL|x86.ActiveCfg = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug MT DLL|x86.Build.0 = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug MT|x64.ActiveCfg = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug MT|x64.Build.0 = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug MT|x86.ActiveCfg = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug MT|x86.Build.0 = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release Kernel|x64.ActiveCfg = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release Kernel|x64.Build.0 = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release Kernel|x86.ActiveCfg = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release Kernel|x86.Build.0 = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release MD DLL|x64.ActiveCfg = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release MD DLL|x64.Build.0 = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release MD DLL|x86.ActiveCfg = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release MD DLL|x86.Build.0 = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release MD|x64.ActiveCfg = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release MD|x64.Build.0 = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release MD|x86.ActiveCfg = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release MD|x86.Build.0 = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release MT DLL|x64.ActiveCfg = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release MT DLL|x64.Build.0 = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release MT DLL|x86.ActiveCfg = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release MT DLL|x86.Build.0 = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release MT|x64.ActiveCfg = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release MT|x64.Build.0 = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release MT|x86.ActiveCfg = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release MT|x86.Build.0 = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release|x64.ActiveCfg = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release|x64.Build.0 = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release|x86.ActiveCfg = Release|x64
{88A23124-5640-35A0-B890-311D7A67A7D2}.Debug Kernel|x64.ActiveCfg = Debug Kernel|x64 {88A23124-5640-35A0-B890-311D7A67A7D2}.Debug Kernel|x64.ActiveCfg = Debug Kernel|x64
{88A23124-5640-35A0-B890-311D7A67A7D2}.Debug Kernel|x64.Build.0 = Debug Kernel|x64 {88A23124-5640-35A0-B890-311D7A67A7D2}.Debug Kernel|x64.Build.0 = Debug Kernel|x64
{88A23124-5640-35A0-B890-311D7A67A7D2}.Debug Kernel|x64.Deploy.0 = Debug Kernel|x64 {88A23124-5640-35A0-B890-311D7A67A7D2}.Debug Kernel|x64.Deploy.0 = Debug Kernel|x64
@ -169,6 +136,52 @@ Global
{88A23124-5640-35A0-B890-311D7A67A7D2}.Release|x64.Build.0 = Release MD DLL|x64 {88A23124-5640-35A0-B890-311D7A67A7D2}.Release|x64.Build.0 = Release MD DLL|x64
{88A23124-5640-35A0-B890-311D7A67A7D2}.Release|x86.ActiveCfg = Release MT DLL|Win32 {88A23124-5640-35A0-B890-311D7A67A7D2}.Release|x86.ActiveCfg = Release MT DLL|Win32
{88A23124-5640-35A0-B890-311D7A67A7D2}.Release|x86.Build.0 = Release MT DLL|Win32 {88A23124-5640-35A0-B890-311D7A67A7D2}.Release|x86.Build.0 = Release MT DLL|Win32
{D0B6092A-9944-4F24-9486-4B7DAE372619}.DBG|x64.ActiveCfg = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.DBG|x64.Build.0 = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.DBG|x86.ActiveCfg = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug Kernel|x64.ActiveCfg = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug Kernel|x64.Build.0 = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug Kernel|x86.ActiveCfg = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug Kernel|x86.Build.0 = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug MD DLL|x64.ActiveCfg = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug MD DLL|x64.Build.0 = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug MD DLL|x86.ActiveCfg = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug MD DLL|x86.Build.0 = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug MD|x64.ActiveCfg = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug MD|x64.Build.0 = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug MD|x86.ActiveCfg = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug MD|x86.Build.0 = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug MT DLL|x64.ActiveCfg = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug MT DLL|x64.Build.0 = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug MT DLL|x86.ActiveCfg = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug MT DLL|x86.Build.0 = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug MT|x64.ActiveCfg = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug MT|x64.Build.0 = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug MT|x86.ActiveCfg = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Debug MT|x86.Build.0 = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release Kernel|x64.ActiveCfg = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release Kernel|x64.Build.0 = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release Kernel|x86.ActiveCfg = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release Kernel|x86.Build.0 = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release MD DLL|x64.ActiveCfg = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release MD DLL|x64.Build.0 = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release MD DLL|x86.ActiveCfg = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release MD DLL|x86.Build.0 = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release MD|x64.ActiveCfg = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release MD|x64.Build.0 = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release MD|x86.ActiveCfg = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release MD|x86.Build.0 = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release MT DLL|x64.ActiveCfg = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release MT DLL|x64.Build.0 = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release MT DLL|x86.ActiveCfg = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release MT DLL|x86.Build.0 = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release MT|x64.ActiveCfg = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release MT|x64.Build.0 = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release MT|x86.ActiveCfg = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release MT|x86.Build.0 = DBG|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release|x64.ActiveCfg = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release|x64.Build.0 = Release|x64
{D0B6092A-9944-4F24-9486-4B7DAE372619}.Release|x86.ActiveCfg = Release|x64
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

Loading…
Cancel
Save