Создаем вирус и антивирус. Игорь Гульев

Чтение книги онлайн.

Читать онлайн книгу Создаем вирус и антивирус - Игорь Гульев страница 24

Создаем вирус и антивирус - Игорь Гульев

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

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

      ;Очередь сообщений

      msg_loop:

      ;Прочитаем следующее сообщение из очереди

      push L 0

      push L 0

      push L 0

      push offset msg

      call GetMessage

      ;Если функция GetMessage вернула нулевое значение, то завершаем

      ;обработку сообщений и выходим из процесса

      cmp ax,0

      je end_loop

      ;Преобразуем виртуальные коды клавиш в сообщения клавиатуры

      push offset msg

      call TranslateMessage

      ;Передаем это сообщение назад в Windows

      push offset msg

      call DispatchMessage

      ;Переходим к следующему сообщению

      jmp msg_loop

      ;Выход из процесса

      end_loop:

      push [msg.msWPARAM]

      call ExitProcess

      ;Обработка сообщений окна. Win32 требует сохранения регистров

      ;EBX, EDI, ESI. Запишем эти регистры после ”uses” в строке ”proc”.

      ;Это позволит Ассемблеру сохранить их

      WndProc proc uses ebx edi esi, hwnd:DWORD, wmsg:DWORD, wparam:

      DWORD, lparam:DWORD

      LOCAL theDC:DWORD

      ;Проверим, какое сообщение получили, и перейдем к обработке

      cmp [wmsg],WM_DESTROY

      je wmdestroy

      cmp [wmsg],WM_RBUTTONDOWN

      je wmrbuttondown

      cmp [wmsg],WM_SIZE

      je wmsize

      cmp [wmsg],WM_CREATE

      je wmcreate

      cmp [wmsg],WM_LBUTTONDOWN

      je wmlbuttondown

      cmp [wmsg],WM_PAINT

      je wmpaint

      cmp [wmsg],WM_GETMINMAXINFO

      je wmgetminmaxinfo

      ;Данная программа не обрабатывает это сообщение.

      ;Передадим его Windows,

      ;чтобы оно было обработано по умолчанию

      jmp defwndproc

      ;Сообщение WM_PAINT (перерисовать содержимое окна)

      wmpaint:

      ;Подготовим окно для перерисовки

      push offset lppaint

      push [hwnd]

      call BeginPaint

      mov [theDC], eax

      ;Переведем в ASCII−формат значение mbx_count, которое

      ;показывает, сколько раз была нажата левая кнопка мыши

      mov eax,[mbx_count]

      mov edi, offset s_num

      call HexWrite32

      ;Вывод строки в окно

      push L MSG_L ;Длина строки

      push offset szPaint ;Строка

      push L 5 ;Y

      push L 5 ;X

      push [theDC] ;DC

      call TextOut

      ;Обозначим завершение перерисовки окна

      push offset lppaint

      push [hwnd]

      call EndPaint

      ;Выходим из обработки сообщения

      mov eax, 0

      jmp finish

      ;Сообщение WM_CREATE (создание окна)

      wmcreate:

      ;Выходим из обработки сообщения

      mov eax, 0

      jmp

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