diff --git a/dependencies/vmprofiler b/dependencies/vmprofiler index e58c23c..a419fa4 160000 --- a/dependencies/vmprofiler +++ b/dependencies/vmprofiler @@ -1 +1 @@ -Subproject commit e58c23c40e13528f5d9b84feb7e23b62a886ed5a +Subproject commit a419fa4633f98e2f819b1119dc0884154e207482 diff --git a/src/compiler.cpp b/src/compiler.cpp index f4501e1..fb44ddf 100644 --- a/src/compiler.cpp +++ b/src/compiler.cpp @@ -2,17 +2,13 @@ namespace vm { - compiler_t::compiler_t( base_data_t base_data, vmp2::exec_type_t exec_type, - std::vector< vm::handler::handler_t > *vm_handlers, zydis_routine_t *calc_jmp, - zydis_routine_t *vm_entry ) - : module_base( base_data.module_base ), image_base( base_data.image_base ), exec_type( exec_type ), - vm_handlers( vm_handlers ), calc_jmp( calc_jmp ), vm_entry( vm_entry ) + compiler_t::compiler_t( vm::ctx_t *vmctx ) : vmctx( vmctx ) { if ( !parse_t::get_instance()->for_each( [ & ]( _vinstr_meta *vinstr ) -> bool { std::printf( "> vinstr name = %s, has imm = %d, imm = 0x%p\n", vinstr->name.c_str(), vinstr->has_imm, vinstr->imm ); - for ( auto &vm_handler : *vm_handlers ) + for ( auto &vm_handler : vmctx->vm_handlers ) if ( vm_handler.profile && vm_handler.profile->name == vinstr->name ) return true; @@ -26,13 +22,13 @@ namespace vm exit( -1 ); } - if ( !vm::handler::get_operand_transforms( *calc_jmp, calc_jmp_transforms ) ) + if ( !vm::handler::get_operand_transforms( vmctx->calc_jmp, calc_jmp_transforms ) ) { std::printf( "[!] failed to extract calc_jmp transformations...\n" ); exit( -1 ); } - if ( !vm::instrs::get_rva_decrypt( *vm_entry, encrypt_vinstrs_rva ) ) + if ( !vm::instrs::get_rva_decrypt( vmctx->vm_entry, encrypt_vinstrs_rva ) ) { std::printf( "[!] failed to extract virtual instruction rva decryption instructions...\n" ); exit( -1 ); @@ -48,12 +44,12 @@ namespace vm std::pair< bool, std::vector< vinstr_data > * > compiler_t::encode() { parse_t::get_instance()->for_each( [ & ]( _vinstr_meta *vinstr ) -> bool { - for ( auto itr = vm_handlers->begin(); itr != vm_handlers->end(); ++itr ) + for ( auto itr = vmctx->vm_handlers.begin(); itr != vmctx->vm_handlers.end(); ++itr ) { if ( itr->profile && itr->profile->name == vinstr->name ) { vinstrs.push_back( - { ( std::uint8_t )( itr - vm_handlers->begin() ), vinstr->imm, itr->profile->imm_size } ); + { ( std::uint8_t )( itr - vmctx->vm_handlers.begin() ), vinstr->imm, itr->profile->imm_size } ); break; } } @@ -65,16 +61,12 @@ namespace vm std::pair< std::uint64_t, std::vector< std::uint8_t > * > compiler_t::encrypt() { - const auto end_of_module = NT_HEADER( module_base )->OptionalHeader.SizeOfImage + image_base; - - // - // init decryption key... - // + const auto end_of_module = vmctx->image_size + vmctx->image_base; // decryption key starts off as the image // base address of the virtual instructions... std::uintptr_t decrypt_key = end_of_module, start_addr; - if ( exec_type == vmp2::exec_type_t::backward ) + if ( vmctx->exec_type == vmp2::exec_type_t::backward ) { std::for_each( vinstrs.begin(), vinstrs.end(), [ & ]( const vinstr_data &vinstr ) { ( ++decrypt_key ) += vinstr.imm_size ? vinstr.imm_size / 8 : 0; @@ -82,17 +74,11 @@ namespace vm } start_addr = decrypt_key; - // // invert the encoded virtual instructions operands if vip advances backward... - // - - if ( exec_type == vmp2::exec_type_t::backward ) + if ( vmctx->exec_type == vmp2::exec_type_t::backward ) std::reverse( vinstrs.begin(), vinstrs.end() ); - // // loop over the instructions and encrypt them... - // - for ( auto &vinstr : vinstrs ) { std::printf( "> decrypt key = 0x%p\n", decrypt_key ); @@ -107,15 +93,13 @@ namespace vm continue; } - auto transforms = vm_handlers->at( vm_handler_idx ).transforms; + auto transforms = vmctx->vm_handlers.at( vm_handler_idx ).transforms; + std::tie( vinstr.operand, decrypt_key ) = vm::instrs::encrypt_operand( transforms, vinstr.operand, decrypt_key ); - // // operands must be backwards if VIP advances backward... - // - - if ( exec_type == vmp2::exec_type_t::backward ) + if ( vmctx->exec_type == vmp2::exec_type_t::backward ) { for ( auto idx = 0u; idx < vinstr.imm_size / 8; ++idx ) result_buffer.push_back( reinterpret_cast< std::uint8_t * >( &vinstr.operand )[ idx ] ); diff --git a/src/compiler.h b/src/compiler.h index d36bf40..7b07856 100644 --- a/src/compiler.h +++ b/src/compiler.h @@ -26,22 +26,16 @@ namespace vm class compiler_t { public: - explicit compiler_t( base_data_t base_data, vmp2::exec_type_t exec_type, - std::vector< vm::handler::handler_t > *vm_handlers, zydis_routine_t *calc_jmp, - zydis_routine_t *vm_entry ); - + explicit compiler_t( vm::ctx_t* vmctx ); std::pair< bool, std::vector< vinstr_data > * > encode(); std::pair< std::uint64_t, std::vector< std::uint8_t > * > encrypt(); std::uint64_t encrypt_rva( std::uint64_t rva ); private: + vm::ctx_t *vmctx; transform::map_t calc_jmp_transforms; - zydis_routine_t *calc_jmp, *vm_entry; - std::vector< vm::handler::handler_t > *vm_handlers; - vmp2::exec_type_t exec_type; std::vector< vinstr_data > vinstrs; std::vector< std::uint8_t > result_buffer; std::vector< zydis_decoded_instr_t > encrypt_vinstrs_rva; - std::uintptr_t image_base, module_base; }; } // namespace vm \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 3307118..74eb15e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -76,53 +76,18 @@ int __cdecl main( int argc, const char *argv[] ) 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() ); + const auto image_size = NT_HEADER( module_base )->OptionalHeader.SizeOfImage; + vm::ctx_t vmctx( module_base, image_base, image_size, vm_entry_rva ); - zydis_routine_t vm_entry, calc_jmp; - std::vector< vm::handler::handler_t > vm_handlers; - std::uintptr_t *vm_handler_table; - - if ( !vm::util::flatten( vm_entry, module_base + vm_entry_rva ) ) - { - std::printf( "[!] failed to flatten vm entry...\n" ); - return -1; - } - - std::printf( "[+] flattened vm_entry...\n" ); - std::printf( "[+] deobfuscated vm_entry...\n" ); - - vm::util::deobfuscate( vm_entry ); - vm::util::print( vm_entry ); - - if ( !( vm_handler_table = vm::handler::table::get( vm_entry ) ) ) - { - 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 ( !vmctx.init() ) { - std::printf( "[!] failed to get all vm handlers...\n" ); + std::printf( "> failed to init vmctx... make sure all arguments are valid\n" + "and that the binary you are providing is unpacked and protected\n" + "by VMProtect 2...\n" ); return -1; } - if ( !vm::calc_jmp::get( vm_entry, calc_jmp ) ) - { - std::printf( "[!] failed to get calc_jmp...\n" ); - return -1; - } - - const auto advancement = vm::calc_jmp::get_advancement( calc_jmp ); - - if ( !advancement.has_value() ) - { - std::printf( "[!] failed to determine advancement direction...\n" ); - return -1; - } - - std::printf( "> virtual instruction pointer advances %s...\n", - advancement.value() == vmp2::exec_type_t::forward ? "forward" : "backward" ); - - vm::compiler_t compiler( { module_base, image_base }, advancement.value(), &vm_handlers, &calc_jmp, &vm_entry ); + vm::compiler_t compiler( &vmctx ); // // encode virtual instructions... diff --git a/src/test.vasm b/src/test.vasm new file mode 100644 index 0000000..d11cf46 --- /dev/null +++ b/src/test.vasm @@ -0,0 +1,11 @@ +SREGQ 0x0 +SREGQ 0x10 +SREGQ 0x20 +LCONSTQ 0x10 +LCONSTQ 0x10 +ADDQ +SREGQ 0x0 +SREGQ 0x10 +LREGQ 0x20 +LREGQ 0x10 +LREGQ 0x0 \ No newline at end of file diff --git a/src/test.vmasm b/src/test.vmasm new file mode 100644 index 0000000..d36a5e0 Binary files /dev/null and b/src/test.vmasm differ diff --git a/src/vmassembler.vcxproj b/src/vmassembler.vcxproj index 342d846..182b488 100644 --- a/src/vmassembler.vcxproj +++ b/src/vmassembler.vcxproj @@ -49,7 +49,9 @@ Console true true - true + DebugFull + true + true diff --git a/src/vmptest8.vmp.exe b/src/vmptest8.vmp.exe new file mode 100644 index 0000000..525e969 Binary files /dev/null and b/src/vmptest8.vmp.exe differ diff --git a/vmassembler.sln b/vmassembler.sln index 51b2621..0866bb4 100644 --- a/vmassembler.sln +++ b/vmassembler.sln @@ -13,26 +13,6 @@ Global GlobalSection(SolutionConfigurationPlatforms) = preSolution DBG|x64 = DBG|x64 DBG|x86 = DBG|x86 - Debug Kernel|x64 = Debug Kernel|x64 - Debug Kernel|x86 = Debug Kernel|x86 - Debug MD DLL|x64 = Debug MD DLL|x64 - Debug MD DLL|x86 = Debug MD DLL|x86 - Debug MD|x64 = Debug MD|x64 - Debug MD|x86 = Debug MD|x86 - Debug MT DLL|x64 = Debug MT DLL|x64 - Debug MT DLL|x86 = Debug MT DLL|x86 - Debug MT|x64 = Debug MT|x64 - Debug MT|x86 = Debug MT|x86 - Release Kernel|x64 = Release Kernel|x64 - Release Kernel|x86 = Release Kernel|x86 - Release MD DLL|x64 = Release MD DLL|x64 - Release MD DLL|x86 = Release MD DLL|x86 - Release MD|x64 = Release MD|x64 - Release MD|x86 = Release MD|x86 - Release MT DLL|x64 = Release MT DLL|x64 - Release MT DLL|x86 = Release MT DLL|x86 - Release MT|x64 = Release MT|x64 - Release MT|x86 = Release MT|x86 Release|x64 = Release|x64 Release|x86 = Release|x86 EndGlobalSection @@ -41,46 +21,6 @@ Global {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.Build.0 = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Debug Kernel|x86.ActiveCfg = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Debug Kernel|x86.Build.0 = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Debug MD DLL|x64.ActiveCfg = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Debug MD DLL|x64.Build.0 = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Debug MD DLL|x86.ActiveCfg = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Debug MD DLL|x86.Build.0 = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Debug MD|x64.ActiveCfg = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Debug MD|x64.Build.0 = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Debug MD|x86.ActiveCfg = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Debug MD|x86.Build.0 = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Debug MT DLL|x64.ActiveCfg = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Debug MT DLL|x64.Build.0 = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Debug MT DLL|x86.ActiveCfg = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Debug MT DLL|x86.Build.0 = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Debug MT|x64.ActiveCfg = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Debug MT|x64.Build.0 = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Debug MT|x86.ActiveCfg = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Debug MT|x86.Build.0 = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Release Kernel|x64.ActiveCfg = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Release Kernel|x64.Build.0 = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Release Kernel|x86.ActiveCfg = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Release Kernel|x86.Build.0 = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Release MD DLL|x64.ActiveCfg = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Release MD DLL|x64.Build.0 = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Release MD DLL|x86.ActiveCfg = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Release MD DLL|x86.Build.0 = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Release MD|x64.ActiveCfg = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Release MD|x64.Build.0 = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Release MD|x86.ActiveCfg = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Release MD|x86.Build.0 = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Release MT DLL|x64.ActiveCfg = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Release MT DLL|x64.Build.0 = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Release MT DLL|x86.ActiveCfg = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Release MT DLL|x86.Build.0 = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Release MT|x64.ActiveCfg = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Release MT|x64.Build.0 = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Release MT|x86.ActiveCfg = Release|x64 - {6AC977FF-BD53-4A74-8452-69B3500924E8}.Release MT|x86.Build.0 = 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|x86.ActiveCfg = Release|x64 @@ -88,50 +28,6 @@ Global {88A23124-5640-35A0-B890-311D7A67A7D2}.DBG|x64.Build.0 = Debug MT|x64 {88A23124-5640-35A0-B890-311D7A67A7D2}.DBG|x86.ActiveCfg = Debug MT|Win32 {88A23124-5640-35A0-B890-311D7A67A7D2}.DBG|x86.Build.0 = Debug MT|Win32 - {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.Deploy.0 = Debug Kernel|x64 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Debug Kernel|x86.ActiveCfg = Debug Kernel|Win32 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Debug Kernel|x86.Build.0 = Debug Kernel|Win32 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Debug Kernel|x86.Deploy.0 = Debug Kernel|Win32 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Debug MD DLL|x64.ActiveCfg = Debug MD DLL|x64 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Debug MD DLL|x64.Build.0 = Debug MD DLL|x64 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Debug MD DLL|x86.ActiveCfg = Debug MD DLL|Win32 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Debug MD DLL|x86.Build.0 = Debug MD DLL|Win32 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Debug MD|x64.ActiveCfg = Debug MD|x64 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Debug MD|x64.Build.0 = Debug MD|x64 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Debug MD|x86.ActiveCfg = Debug MD|Win32 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Debug MD|x86.Build.0 = Debug MD|Win32 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Debug MT DLL|x64.ActiveCfg = Debug MT DLL|x64 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Debug MT DLL|x64.Build.0 = Debug MT DLL|x64 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Debug MT DLL|x86.ActiveCfg = Debug MT DLL|Win32 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Debug MT DLL|x86.Build.0 = Debug MT DLL|Win32 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Debug MT|x64.ActiveCfg = Debug MT|x64 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Debug MT|x64.Build.0 = Debug MT|x64 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Debug MT|x86.ActiveCfg = Debug MT|Win32 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Debug MT|x86.Build.0 = Debug MT|Win32 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Release Kernel|x64.ActiveCfg = Release Kernel|x64 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Release Kernel|x64.Build.0 = Release Kernel|x64 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Release Kernel|x64.Deploy.0 = Release Kernel|x64 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Release Kernel|x86.ActiveCfg = Release Kernel|Win32 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Release Kernel|x86.Build.0 = Release Kernel|Win32 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Release Kernel|x86.Deploy.0 = Release Kernel|Win32 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Release MD DLL|x64.ActiveCfg = Release MD DLL|x64 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Release MD DLL|x64.Build.0 = Release MD DLL|x64 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Release MD DLL|x86.ActiveCfg = Release MD DLL|Win32 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Release MD DLL|x86.Build.0 = Release MD DLL|Win32 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Release MD|x64.ActiveCfg = Release MD|x64 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Release MD|x64.Build.0 = Release MD|x64 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Release MD|x86.ActiveCfg = Release MD|Win32 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Release MD|x86.Build.0 = Release MD|Win32 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Release MT DLL|x64.ActiveCfg = Release MT DLL|x64 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Release MT DLL|x64.Build.0 = Release MT DLL|x64 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Release MT DLL|x86.ActiveCfg = Release MT DLL|Win32 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Release MT DLL|x86.Build.0 = Release MT DLL|Win32 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Release MT|x64.ActiveCfg = Release MT|x64 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Release MT|x64.Build.0 = Release MT|x64 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Release MT|x86.ActiveCfg = Release MT|Win32 - {88A23124-5640-35A0-B890-311D7A67A7D2}.Release MT|x86.Build.0 = Release MT|Win32 {88A23124-5640-35A0-B890-311D7A67A7D2}.Release|x64.ActiveCfg = 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 @@ -139,46 +35,6 @@ Global {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