/*! * @file extapi.h * @brief Entry point and intialisation definitions for the extended API extension. */ #include "../../common/common.h" #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 // second stage reflective dll inject payload and not the metsrv itself when it loads extensions. #include "../../ReflectiveDLLInjection/ReflectiveLoader.c" #include "window.h" #include "service.h" // this sets the delay load hook function, see DelayLoadMetSrv.h EnableDelayLoadMetSrv(); Command customCommands[] = { // Window management and enumeration { "extapi_window_enum", { request_window_enum, { 0 }, 0 }, { EMPTY_DISPATCH_HANDLER } }, // Service management and enumeration { "extapi_service_enum", { request_service_enum, { 0 }, 0 }, { EMPTY_DISPATCH_HANDLER } }, { "extapi_service_query", { request_service_query, { 0 }, 0 }, { EMPTY_DISPATCH_HANDLER } }, // Terminator { NULL, { EMPTY_DISPATCH_HANDLER }, { EMPTY_DISPATCH_HANDLER } } }; /*! * @brief Initialize the server extension */ DWORD __declspec(dllexport) InitServerExtension(Remote *remote) { DWORD index; hMetSrv = remote->hMetSrv; for (index = 0; customCommands[index].method; index++) command_register(&customCommands[index]); return ERROR_SUCCESS; } /*! * @brief Deinitialize the server extension */ DWORD __declspec(dllexport) DeinitServerExtension(Remote *remote) { DWORD index; for (index = 0; customCommands[index].method; index++) command_deregister(&customCommands[index]); return ERROR_SUCCESS; }