* 세계 최초 컴퓨터 바이러스 중 하나

세계최초 컴퓨터 바이러스 얘기 중에 빠지지 않는 바이러스가 Richard Screnta 의 Elk Cloner 바이러스입니다. 1981년 8비트 애플2 컴퓨터용으로 제작되어 1982년 퍼집니다. 1986년 제작된 브레인 바이러스보다 5년 정도 빠릅니다. 하지만, 애플2는 8 비트 컴퓨터로 현재 흔히 PC라 불리는 IBM PC와는 다릅니다. 따라서, 기준에 따라 최초의 컴퓨터 바이러스는 Elk Cloner 혹은 브레인 바이러스가 되기도 합니다.

1990년 제작자가 직접 글을 남기기도 했습니다.

http://www.skrenta.com/cloner/clone-post.html


* 감염 디스크와 소스코드

제작자는 자신의 홈페이지에 감염 디스크와 소스코드를 올려두었습니다.

* 소스코드 : http://www.skrenta.com/cloner/clone-src.txt

설명하나 없는 어셈블리 코드를 보면 사실 막막합니다. 인텔 어셈블리는 알지만 6502 어셈블리는 모르니 명령어를 보고 이게 어떤 의미일까 대충 예상만 했죠. 

감염 디스크 이미지도 올라와 있어 애플 에뮬레이터에서 실행해 봤지만 다른 디스크로 감염이 안되더군요. 그렇게 지난 몇년 동안 디스크 이미지를 가지고만 있었습니다.


Elk Cloner 소스코드Elk Cloner Source Code



* 분석

어느날...
이 애플2 컴퓨터 바이러스가 생각났고 주말에 시간이 좀 나서 한번 볼까 합니다.
그렇게 토요일 오후와 일요일 동안 소스코드를 하나하나 따라가며 주석도 달기 시작합니다.
덕분에 기본적인 6502 어셈블리, 애플 2 메모리 구조, CALL-151 명령, DOS 3.3 구조도 조금씩 알게되었습니다.

Elk Cloner virus analysis Elk Cloner virus analysis




* 변조된 DOS 3.3 = 바이러스 코드

많은 자료에 이 바이러스는 부트 바이러스라고 합니다. 그래서 MS-DOS에서 부트 바이러스와 비슷한 구조가 아닐까 생각했는데 다르더군요. 제 생각에 부트 바이러스 보다 MS-DOS의 시절 도스 커널을 감염 시키는 바이러스나 요즘의 부트킷(Bootkit)의 선조격이라고 해야하지 않을까 합니다.

애플 DOS 3.3에서 INIT 명령으로 디스크를 포맷할 때 DOS 3.3도 같이 설치됩니다. MS-DOS 시절 포맷 명령에 /S를 해서 부팅 디스크를 만드는 것과 동일하다고 생각하면 됩니다.

감염 전과 감염 후 디스크 이미지를 비교하면 부트 레코드는 변한게 없습니다. 다만 DOS 3.3 코드 일부분이 패치되어 있습니다. (4C 00 9B는 JMP 9B00입니다.)



실제 바이러스 메인 코드는 DOS 3.3에서 사용하지 않는 디스크 영역에 보관된다고 합니다.

감염 전과 감염 후를 비교하면 빈영역에 바이러스 코드가 존재하는걸 알 수 있습니다.



부팅한 DOS 3.3 자체가 바이러스이기 때문에 별도의 메모리 상주를 할 필요는 없습니다.

바이러스 감염 여부는 CALL-151로 모드를 변경하고 9000L로 9000 주소를 디스어셈블해보면 됩니다.

깨끗한 DOS 3.3으로 부팅하면 9000 번지에 별다른 내용이 없습니다.
- 시스템에 따라 다를 수 있습니다.

정상 DOS 3.3


하지만, 감염된 디스크로 부팅하면 02 (바이러스 버전)과 [004C]주소에 0xFF 값을 넣는 바이러스 초반부 코드를 볼 수 있습니다.

바이러스 감염 디스크로 부팅



* DOS 3.3 메모리 변조

바이러스는 베이직 코드를 실행하는 RUN 코드를 패치하고 베이직 로드 (LOAD), 기계어 로드(BLOAD), 파일 목록보기(CATALOG)를 후킹합니다.

이외 사용자 정의 코드도 가집니다. 사용자 정의 코드를 어떻게 실행하는지는 아직 잘 모르겠네요.

CATALOG 후킹 방식을 살펴보겠습니다

우선 DOS 3.30에서 CATALOG 명령 입력 하면 0xA56E 주소 코드가 실행된다고 합니다. 바이러스는 해당 주소에 바이러스로 점프하는 코드를 넣습니다.

메모리 변조 코드를 보면 0xA56E 부터 0xA570에 0x4C, 0xB6, 0x90 코드를 넣는걸 볼 수 있습니다.


정상적인 DOS 3.3의 0xA56E 코드는 아래와 같습니다.


하지만, 감염된 시스템은 CATALOG 명령을 입력하면 0x90B6으로 점프 합니다.


0x90B6으로 가면 원래 감염 여부 확인을 하고(JSR $9074) 원래 CATALOG 명령 (LDA #$06, JSR $A2AA ...)을 그대로 수행합니다.


후킹이라고 생각한 부분에서 원본 코드 백업을 안해서 의아했는데 원래 DOS 3.3 의 코드를 아예 가지고 있더군요.
당시에는 DOS 3.3을 대부분 사용했으니 큰 무리가 없었겠죠.
 
MS-DOS 시절 특정 버전에서만 동작하는 Tenbytes 바이러스와 유사하다고 볼 수 있겠죠. 따라서, 이 바이러스는 DOS 3.3 에서만 활동하고 다른 버전이나 변형된 DOS 3.3에서는 오동작 할 수 있을 겁니다.


* 감염

소스코드를 보면 CATALOG 명령 등으로 디스크를 읽을 때 바이러스가 감염되어야 합니다. 하지만, 어떤 이유에서인지 제대로 감염되지 않네요.

아직 제가 애플 디버깅에 익숙하지 않아서 원인을 파악하지 못했습니다.

강제로 감염 시키려면 CALL-151 후 감염 시킬 디스크를 넣고 90DAG 하면 감염 루틴이 실행되고 디스크는 바이러스에 감염됩니다.

이부분을 성공했을 때 정말 눈물(?) 나더군요.
감염 디스크를 만들기 위해 몇년을 기다렸던가 !!!!!!!

* 증상

많은 분석 내용을 보면 50 번 부팅 때 마다 메시지를 출력한다고 되어 있습니다.
하지만, 분석해보면 감염된 디스크로 부팅 횟수에 따라 다른 증상이 존재합니다.

  10 회 (0x0A) : [03F2.03F3] = 0x69FF  저장
  15 회 (0x0F) : [0032] = 3F - INVERSE Mode
  20 회 (0x14) : LDA $C030 3회 - beep 음
  25 회 (0x19) : [0032] = 7F - 반짝 반짝 모드
  30 회 (0x1E) : CATALOG 명령 수행 할 때 파일 종류 (I, T, B, A) 순서 변경해 타입이 이상하게 나옴
  35 회 (0x23) : [AAB2] = 0x85
  40 회 (0x28) : AUTOSTART ROM RESET routine address 내용 변경
  45 회 (0x2D) : [00D6] = 0x80
  50 회 (0x32) : 메시지 출력
  55 회 (0x37) : [BD03] = FF RWTS main entry
  60 회 (0x3C) : [BD03] = 0x20
  65 회 (0x41) : [A180.A182] = 4C 69 FF (JMP FF69)
  70 회 (0x46) : [BD03] = 0x10
  75 회 (0x4B) : JMP $C600 (재부팅 됨)
  76 회 (0x4C) : JMP $C600 (재부팅 됨)
  77 회 (0x4D)  : JMP $C600 (재부팅 됨)
  78 회 (0x4E)  : JMP $C600 (재부팅 됨)
  79 회 (0x4F) : [B3BF] = 00 ... [B3BF]는 부팅 횟수로 이 값이 초기화됨

헉... 정말 많습니다.

주소에 데이터 넣는건 애플 레퍼런스를 참조하면 될텐데 아직 정확한 의미는 못 찾았습니다.
- 귀찮기도 하고...

15번 째 부팅하면 INVERSE MODE가 됩니다.



79번째 부팅하면 부팅 횟수 카운터가 0 이되기 때문에 80 번째 부팅하면 감염 초기와 같습니다. 따라서 95 회 때 INVERSE Mode, 대략 130 번째 부팅 때 메시지가 출력 됩니다. 50 번 부팅 할 때 마다 메시지 출력은 잘못된 분석입니다.

그런데 감염 디스크로 이런 저런 증상을 확인했는데 50번째 부팅 했을 때 메시지는 안나타나더군요.
- 어떤 행위가 있을 때 증상이 나타난다고 하는데 다음에 시간되면 한번 분석해 봐야겠습니다.
결국 CALL-151로 들어가서 92FFG로 강제 실행해서 그렇게 보고 싶었던 메시지를 봅니다.

ELK CLONERELK CLONER message



* 미해결 사항

언제 시간이 될 때 다음 사항을 확인해 보고 싶습니다.


 1. 변경되는 나머지 주소의 목적
 2. 자세한 디스크 감염 알고리즘
 3. CATALOG 명령 등으로는 감염 안되는 원인 
 4. 50 번 째 부팅 때 메시지가 출력 안되는 원인
 5. 바이러스가 만든 유저 명령 수행

- 혹시 아시는 분은 연락주셔도 됩니다 ^^


* 맺음말

1980년대 초 제작된 바이러스를 분석해 봤습니다.
오랫만에 정말 재미있게 분석해 봤네요. 역시 90년대 이전 샘플 분석이 재미있습니다.

바이러스 분석 덕분에 간단하지만 6502 어셈블리와 애플2 컴퓨터 내부도 공부했습니다.
(추가 : 최초 글 쓰고 5년 지난 2017년 현재... 명령 거의 잊어버렸네요 TT)

컴퓨터 바이러스라는 개념이 존재하기도 전에 이런 코드가 만들어 졌다니 신기하면서도 현재 악성코드에서 사용되는 기법이 이때도 사용되고 있다는걸 알 수 있었습니다.


신고
Posted by mstoned7

댓글을 달아 주세요

  1. 영상 2012.03.26 08:06 신고  댓글주소  수정/삭제  댓글쓰기

    애플2 빌려주리????ㅋ

    본체만 남아있음..ㅋ

    • mstoned7 2012.03.26 08:50 신고  댓글주소  수정/삭제

      와... 보물을 가지고 있다니 ! 몇몇 사람들은 추억으로 옛날 컴퓨터를 사기도 하더만... 난 그냥 에뮬레이터로 만족 ㅎㅎ

  2. crattack 2012.03.26 10:20 신고  댓글주소  수정/삭제  댓글쓰기

    고생 하셨을꺼 같네요.
    엄청난 내용이네요.

    감사히 잘보고 가겠습니다. ( _ _)

  3. 영상 2015.11.04 06:46 신고  댓글주소  수정/삭제  댓글쓰기

    애플6 빌려줄리????ㅋ


    본체만 남아있음..ㅋ

  4. crattack 2015.11.04 06:47 신고  댓글주소  수정/삭제  댓글쓰기

    고생 하셨을꺼 같네요.
    엄청난 내용이네요.


    감사히 잘보고 가겠습니다. ( _ _)

  5. 쿨캣 2015.11.05 06:39 신고  댓글주소  수정/삭제  댓글쓰기

    와... 보물을 가지고 있다니 ! 몇몇 사람들은 추억으로 옛날 컴퓨터를 사기도 하더만... 난 그냥 에뮬
    레이터로 만족 ㅎㅎ

  6. 쿨캣 2015.11.05 06:40 신고  댓글주소  수정/삭제  댓글쓰기

    엄청난 내용까지는 아니고.. 흥미로운 내용이긴 합니다 ㅎㅎ


문득 지금까지 어떤 나라들을 가봤는지 궁금해서 정리해봤다.
여행보다는 출장으로 다녀와서 호텔에만 있었던 적도 종종 있다.



* 년도별


- 2000 년 : 미국 올란도
- 2001 년 : 체코 프라하
- 2002 년 : 미국 뉴올리언스
- 2004 년 : 일본 도쿄
- 2007 년 : 일본 도쿄, 하코네

                오스트리아 비엔나
- 2008 년 : 네덜란드 암스테르담, 
               미국 시에틀,

               캐나다 오타와,
               독일 만하임/프랑크푸르트/하이델부르크/뮌헨/퓌센,
               스위스 루체른/인터라켄,
               프랑스 파리, 
               영국 런던/옥스포드, 
               벨기에 브뤼셀, 
               이탈리아 베니스/로마/피렌체,           
               바티칸 시국
- 2009 년 : 헝가리 부다페스트,

                중국 베이징
- 2010 년 : 일본 후쿠오카,

                핀란드 헬싱키,

                에스토니아 탈린(Tallinn)
                태국 방콕
- 2011년 : 체코 프라하

               스페인 바로셀로나
- 2012년 : 이탈리아 로마/나폴리/피렌체/베니스,바티칸 시국

               독일 뮌헨/프라이징(Freising)/뉘른베이크(Nurnberg)
               프랑스 파리/니스(Nice)
               모나코(Monaco)

- 2013년 : 슬로바키아(Slovakia) 브라티슬라바(Bratislava)

              슬로베니아 (Slovenia) 류블랴냐(Ljubljana) / Bled / 마리보르(Maribor)

              크로아티아 자그레브

              오스트리아 Vienna / Salzburg / Hallstatt

- 2014 년 : 미국 Seattle

               영국 London / Canterbury

               벨기에 Brussels / Brugge

- 2015년 : 베트남 Danang

- 2016년 : 미국 덴버(Denver)

             말레이시아(Malaysia) 쿠알라룸푸르 (Kuala Lumpur)

- 2017년 : 홍콩 (Hongkong)

         
* 국가별 (총 25 개국, 50 도시/지역)

1. 미국 (올란도, 뉴올리언스, 시에틀, 덴버)
2. 체코 (프라하)
3. 일본 (도쿄, 하코네, 후쿠오카)
4. 오스트리아 (비엔나, 짤즈버그, 할스타트)
5. 네덜란드 (암스테르담)
6. 캐나다 (오타와)
7. 독일 (만하임, 프랑크푸르트, 하이델부르크, 뮌헨, 퓌센, 프라이징, 뉘른베이크)
8. 스위스 (루체른, 인터라켄, 바셀)
9. 프랑스 (파리,니스)
10. 영국 (런던, 옥스포드, Canterbury)
11. 벨기에 (브뤼셀, Brugge)
12. 이탈리아 (베니스, 로마, 피렌체,나폴리)
13. 바티칸 시국
14. 헝가리 (부다페스트) 
15. 중국 (베이징, 홍콩)
16. 핀란드 (헬싱키)
17. 에스토니아 (탈린)
18. 태국 (방콕)
19. 스페인 (바르셀로나)
20. 모나코

21. 슬로바키아 (브라티슬라바)

22. 슬로베니아 (Ljubljana, Bled, Maribor)

23. 크로아티아 자그레브

24. 베트남 (다낭)

25. 말레이시아 쿠알라룸푸르 (Malaysia Kuala Lumpur)







신고
Posted by mstoned7

댓글을 달아 주세요

  1. mbti 2009.04.23 04:39 신고  댓글주소  수정/삭제  댓글쓰기

    제가 가본 나라(가족여행)는,
    외국은 태,중,일,싱,홍 밖에 안 되는데,
    많이 당겨오셨네요. ^^
    우리나라는 울,제,홍 가봤어요.

    • mstoned7 2009.04.23 12:07 신고  댓글주소  수정/삭제

      네.. 어쩌다보니 여러나라 가봤네요. 대부분 업무상이고 여행으로 가본 나라는 일본하고 유럽 5개국이네요. 가만 생각하면 여행으로 간 일본하고 유럽 5개국이 제일 재미있었던것 같습니다 :)

  2. 철이 2010.05.16 03:54 신고  댓글주소  수정/삭제  댓글쓰기

    많이 가보셨네요.. 전 제주도라도...비행기 타고 싶습니다.. 철저한 국내파(?) 입니다. ㅋㅋ;

    그나저나 외국 현지에서는 해당 국가의 로컬 보안 업체의 백신을 주로 많이들 쓰나요?? 국내야 뭐 무료 백신을 빼면 v3를 많이 쓰지만요

    • mstoned7 2010.05.16 12:04 신고  댓글주소  수정/삭제

      대부분 출장인데 평소에 조금씩 모아서 휴가내서 나가는 편입니다.

      자국 제품이 있는 나라는 아무래도 자국 제품이 가장 널리 사용하고 있겠죠.

  3. Deok9 2011.10.06 13:39 신고  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 ㅎ
    일전에 코드엔진 컨퍼런스 발표 때 같이한 Deok9 입니다. ^^
    갑자기 이런저런 생각이나서 들어왔습니다.

    보안도 하시면서 정말 인생즐기시는거 같아서 너무 부럽네요 ㅠ.ㅠ

    저도 나중에 외국좀. . . - 0-

  4. idea1204 2011.10.08 03:15 신고  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 보안쪽 일하시는것 같아서 궁금한것도 있고 자주오께요^^

    저 혹시 ssl rsa des 공개키 블럭암호 인증서 이런류의 방식의 현재의 암호체계를

    다른 방식으로 만들어 본다면 어떻게 하는것이 좋을까요? ^^

  5. 2016.10.27 14:15  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

옛추억을 생각하거나 과거 게임이 궁금해 윈도우 9x 게임을 윈도우 XP에서 설치하는 분들이 종종 있을 겁니다.


저도 고전 게임 좋아하는데 요즘은 윈도우 9x 게임을 VMware에 설치한 윈도우 XP에서 테스트 해봅니다. 다만 고전 게임을 하다보니 종종 잊어버리고 제가 테스트한 결과를 글로 남겨 봅니다.


윈도우 XP 가 2001년 출시되었으니 2000년까지 출시된 윈도우 95 게임에 대해 테스트 해봤습니다.



게임 설치 및 실행은 다음 순서로 합니다


1. 가상 Windows XP 

2. 가상 Windows XP에서 Windows 95/98 호환 모드

3. 가상 Windows 98 (3D 가속 기능 포함된 게임 제외)

4. 그냥 Windows XP SP3

5. 실제 Windows 98



호스트 컴퓨터 사양은 AMD Phenom 9650 2.31GHz, 3 GB RAM, 그래픽카드는 GeForce 9500 GT 이고 실제 윈도우 98 시스템은 AMD K6-300, 램 128 MB, 그래픽 카드는 부두3 (Voodoo 3)입니다.


본문에서 윈도우 XP라고 하면 모두 VMware에 설치된 상태입니다.


시스템에 따라 게임이 실행 될 수 있으니 참고자료 정도로 생각하시기 바랍니다.



* Hazard (해저드 플러스)(1998)(Pumpkin Software)


윈도우 XP에서는 프로그램 설치 중 에러가 발생합니다. setup.exe를 윈도우 98 호환 모드에서 실행해도 오류가 발생합니다. 가상 Windows 98 에서는 'Your direct-draw device doesn't initialize 640x480xhicolor.'와 같은 오류가 발생해 게임 실행을 할 수 없습니다. 결국 이 게임은 실제 윈도우 98에 설치했습니다.


* Outlaws (아웃로)(1997)(LucasGames)


Windows XP에서 실행 잘됨



* RollerCoaster Tycoon (1999)(Hasbro)


윈도우 XP에서 설치는 문제 없이 이뤄지지만 제대로 로드 되지 않는다고 알려져 있습니다. 실행 할 때 윈도우 98 호환 모드로 실행하면 됩니다.


그리고 확장팩 1.20.014 버전을 설치하면 Windows XP에서도 저장 파일 로드 가능합니다.



* Star Wars Jedi Knight : Dark Forces II (제다이 나이트 : 다크포스2)(1997)(Lucas Arts)


1998 년 쯤 립 버전으로 플레이 해보고 너무 마음에 들어 2010년 떨이 판매하는데서 구매한 게임입니다. 윈도우 XP에서 그래픽이 좀 깨졌는데 윈도우 98 호환으로 하니 잘 나오네요. 하지만, 3D 가속 기능 옵션을 선택하면 게임 화면이 깨집니다. 이건 실제 윈도우 98 시스템에서도 동일하게 발생합니다.




 게임 이름

윈도우 XP

비고

  Delta Force 2 (델타포스 2)

O

Windows XP에서 그래픽 약간 깨짐.

윈도우 98에서는 이상하게 3D 가속 안됨 (부두 3 문제 ?!)

 Drakan - Order of the Flame (드라칸)

 O

 (패치 필요) 윈도우 9x 호환 모드에서도 에러 발생.


 10 주년 패치를 설치하면 실행 가능

http://www.moddb.com/mods/drakan-10th-anniversary/downloads


 Farland Tactics I (파랜드 택틱스 I)

    O

 (패치필요)


 윈도우 9x 호환 모드에서 실행해야함. 아니면 하드디스크 용량 문제로 설치 안됨.


패치 (http://runkor.tistory.com/20)를 다운로드 하면 일본어로 나오는 문제가 해결됨. FS.EXE를 윈도우 9x 호환 모드로 실행하면 실행 가능



 Half Life (하프라이프)

 O

1.0.0.9 버전 테스트. Windows XP에서 설치 및 실행 잘됨

Hazard (해저드 플러스)

X

 XP 설치 중 에러 발생. 윈도우 98 설치

 Outlaws (아웃로)

 O

윈도우 XP에서 실행 잘 됨

 Rainbow Six (레인보우 식스)

 O

 (호환모드) 호환 모드로 가능


Rogue Spear는 Windows 98에서도 CD 넣으라고 나옴 (정품 CD야 !!!!)

  RollerCoaster Tycoon (롤러코스터 타이쿤)

 *

 

 

(패치 필요) Windows 98 호환 모드로 실행하면 됨. 하지만 제대로 세이브 파일 로드 되지 않고 종료 될 때 에러 발생.

한글판 확장팩 설치하면 Windows XP에서 파일 로드 가능


3D 가속 기능 사용하지 않으므로 vmware의 Windows 98에서 실행 가능


 Shogo - Mobile Armor Division (쇼고)

 *

(패치 필요) Windows XP 에서 설치는 되지만 호환 모드에서도 그래픽은 안 나옴. 패치가 있는 듯 (찾아보지는 않음)

인터넷에 있는 영문 패치 적용하면 한글화가 다 사라짐. 한글 패치도 있는데 못 찾음 TT


다행히 Software 렌더링으로 하면 그래픽 나옴.

 SIN (신)

X, O

(패치 필요) Windows XP에서 실행 안됨

http://www.moddb.com/games/sin/downloads/sin-patch-111에서 패치를 다운로드 받으면 실행 됨

  Star Wars Jedi Knight : Dark forces II (제다이 나이트: 다크포스 2)

  *

Windows XP에서 그래픽이 좀 깨짐. Windows 98 실행 추천

 Unreal (언리얼)

*

 (패치 필요) Windows XP에서 그래픽 깨짐. 윈도우 95/98 호환 모드로 하면 정상적으로 실행 됨. 최신 패치 존재 http://www.oldunreal.com/oldunrealpatches.html 패치 적용하면 Windows XP에서 화려한 그래픽이 나옴




   
   
   
   
   
   
   
   
   










신고
Posted by mstoned7

댓글을 달아 주세요

  1. 이동구 2014.06.19 08:40 신고  댓글주소  수정/삭제  댓글쓰기

    에물만 사용했는데, 이런방법으로도...전 코에이 게임을 해야겠습니다.

  2. 장현승 2016.09.22 21:45 신고  댓글주소  수정/삭제  댓글쓰기

    하하하.. @_@;;
    얼마전에 '삼국지5'랑 '대항해시대3' 해보고 싶어서...
    VirtualBox 에 Win98 설치하다가... 그래픽 드라이버를 못잡아서
    스트레스 제대로 받았던 기억이 나네요.. ^^;;;;

    • mstoned7 2016.09.28 08:38 신고  댓글주소  수정/삭제

      Windows 98 을 제대로 지원하지 않나보군요. 그래도 VMware 는 3D 가속만 빼고 Windows 98을 잘 지원해 줍니다. 저는 실기가 있어서 상관없지만요 ㅎ



티스토리 툴바