• XSS.stack #1 – первый литературный журнал от юзеров форума

C++ Dropper. Ошибка SSL

А вообще такие дропперы иммеют смысл? с дропом на диск, как быстро он поймает детекты
А какие еще предложения?
Скачивать и запускать DLL в памяти - дроппер то все равно будет на диске и будет ловить детекты.
 
Реализация tls через schannel-api, в аттаче исходник на C, размер билда msvc x64 - 7кб. Тестировался под win11, полет нормальный.
thx curl

Код:
/******************************************************************************/
/*                         Процедура рукопожатия                              */
/*                                                                            */
/* host    [in] - L"", хост                                                   */
/* port    [in] - L"", порт                                                   */
/* tls_ver [in] - TLS1_2, tls v1.2                                            */
/*              - TLS1_3, tls v1.3                                            */
/*              - TLS_DEFAULT, настройки по умолчанию                         */
/* verify  [in] - TRUE, проверять цепочку сертификатов                        */
/*              - FALSE, не проверять                                         */
/*                                                                            */
/* return       - PTLSContext, указатель на структуру TLS                     */
/*              - NULL, ошибка                                                */
/******************************************************************************/
PTLSContext tls_connect(PWCHAR host, PWCHAR port, TLS_VER tls_ver, BOOL verify);

/******************************************************************************/
/*                          Закрытие соединения                               */
/*                                                                            */
/* ptls [in] - указатель на структуру TLS                                     */
/*                                                                            */
/* return    - void                                                           */
/******************************************************************************/
void tls_close(PTLSContext ptls);

/******************************************************************************/
/*                             Отправка данных                                */
/*                                                                            */
/* ptls   [in] - указатель на структуру TLS                                   */
/* in_buf [in] - буфер                                                        */
/* in_len [in] - размер буфера                                                */
/*                                                                            */
/* return      - N, количество переданных байт                                */
/*             - N < 0, ошибка                                                */
/******************************************************************************/
int tls_send(PTLSContext ptls, PBYTE in_buf, DWORD in_len);

/******************************************************************************/
/*                            Получение данных                                */
/*                                                                            */
/* ptls    [in]  - указатель на структуру TLS                                 */
/* out_buf [out] - буфер                                                      */
/* out_len [in]  - размер буфера                                              */
/*                                                                            */
/* return        - N > 0, количество полученных байт                          */
/*               - 0, соединение разорвано / нету данных                      */
/*               - N < 0, ошибка                                              */
/******************************************************************************/
int tls_recv(PTLSContext ptls, PBYTE out_buf, DWORD out_len);

C:
int entry(void)
{
    PTLSContext ptls = NULL;

    if (!(ptls = tls_connect(L"www.google.com", L"443", TLS1_3, FALSE)))
        ExitProcess(EXIT_FAILURE);

    DWORD n;
    PBYTE b = memory_alloc(2048);

    if (!b) {
        tls_close(ptls);

        ExitProcess(EXIT_FAILURE);
    }

    n = wsprintfA(b, "GET / HTTP/1.1\r\n"
                     "Host: %s\r\n"
                     "Connection: close\r\n\r\n", "www.google.com");

    if (!tls_send(ptls, b, n)) {
        memory_free(b);
        tls_close(ptls);

        ExitProcess(EXIT_FAILURE);
    }

    while (1) {
        memset(b, 0, 2048);

        if (!(n = tls_recv(ptls, b, 2048)))
            break;

        printf(b);
    }

    memory_free(b);
    tls_close(ptls);

    ExitProcess(EXIT_SUCCESS);
}
 

Вложения

  • schannel_tls.zip
    9.9 КБ · Просмотры: 29


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх