"Игорь Коваль. Как написать вирус" - читать интересную книгу автора Директива "assume cs:prg,ds:prg,es:prg,ss:prg" на-
значает все сегментные регистры одному сегменту с именем PRG,а директива "org 100h" нужна для резер- вирования места для PSP . 1.6 Вирус получает управление После этого вступления начинается собственно ис- полняемая часть программы ( метка START ) : start: jmp vir ;Передача управ- ;ления вирусному ;коду ... org 110h Команда "jmp vir" передает управление вирусному коду, а директива "org 110h" указывает компилято- ру размещать все коды после метки "vir",начиная с адреса 110h .Число 110h принято для удобства рас- чета смещений при разработке вируса .Чуть позже мы разберемся, зачем понадобилась команда "jmp vir", а пока продолжим : vir: push ds ;Сохраним DS ... mov ax,ds ;регистр DS ... db 05h ;Код команды add_to_ds: dw 0 ; " ADD AX,00h " mov ds,ax ;AX -> DS ... Поскольку в зараженной программе область данных вируса будет сдвинута хотя бы на длину этой про- граммы,необходимо выполнить коррекцию регистра DS. Коррекция осуществляется прибавлением к его содер- жимому длины программы в параграфах,округленной в большую сторону .Например, длина программы состав- ляет 401 байт . Тогда она содержит 25 полных па- раграфов и еще 1 байт.Округленное число параграфов будет равно 26 .Эта величина и прибавляется к ре- гистру DS . При заражении вирус рассчитывает кор- ректирующее число и записывает его в область "add_ to_ds" .Теперь всякий раз при запуске зараженной программы оно будет использоваться вирусом для ис- правления DS . В запускающей программе DS коррек- тировать не нужно, и поэтому для нее "add_to_ds" равно нулю . 1.7 Восстанавливаем зараженную программу |
|
|