1. 개요
1998년 스페인에서 만들어진 컴퓨터 바이러스. 제작자는 29A라는 바이러스/웜 제작 그룹 소속의 윈터뮤트(Wintermute).레드코드(RedCode)라는 이름은 원래 '코어 워(Core War)'라는 어셈블리어 프로그래밍 게임에서 유래했다. 코어 워는 1984년 D.G.존스와 A.K.듀드니라는 2명의 프로그래머가 만든 프로그래밍 게임으로, 가상의 컴퓨터를 하나 두고 그 컴퓨터의 제어권을 얻기 위해, 두 개의 프로그램이 서로를 파괴하려 싸운다는 구도의 게임이다.
이 게임의 구조는 다음과 같다.
- 2개의 전투 프로그램이 메모리의 임의의 위치에 로드된다.
- 각 프로그램은 번갈아가며 자기 차례마다 1개의 명령을 실행한다.
- 한 프로그램이 반대쪽 프로그램을 종료시키면 승리한다.
2. 레드코드 프로그래밍 언어
이 게임에서 사용된 언어가 바로 레드코드라는 추상적인 어셈블리계 프로그래밍 언어다. 초창기 버전은 8개의 명령어만을 가지고 있었지만 이후 ICWS-86이라는 룰에서 10개로 늘어났고, ICWS-88이라는 룰에서 11개로 확장되었고 현재는 20개의 명령어가 있다. 레드코드에서 사용되는 명령은 다음과 같다.명령어 | 설명 |
DAT | 실행될 경우 자기 자신을 종료한다. |
MOV | A필드의 내용을 B필드로 복사한다. |
ADD | A필드의 내용을 B필드에 추가한다. |
SUB | A필드의 내용을 B필드에서 제거한다. |
MUL | A필드의 내용을 B필드에 곱한다. |
DIV | A필드의 내용을 B필드로 나눈다. 0으로 나누기가 될 경우 프로그램이 종료된다. |
MOD | A필드의 내용을 B필드로 나누며 나머지만 남긴다. 0으로 나누기가 될 경우 프로그램이 종료된다. |
JMP | A필드의 지정된 위치로 이동한다. |
JMZ | B필드가 0일 경우 A필드로 이동한다. |
JMN | B필드가 0이 아닐 경우 A필드로 이동한다. |
DJN | B필드 값을 감소시킨다. B필드가 0이 아닐 경우 A필드로 이동한다. |
SEQ | A필드와 B필드 값이 동일 할 경우 다음 명령을 무시한다. |
SNE | A필드와 B필드 값이 동일하지 않을 경우 다음 명령을 무시한다. |
SLT | A필드가 B필드보다 작을 경우 다음 명령을 무시한다. |
SPL | A필드의 특정 위치에서 새 프로세스를 시작한다. |
NOP | 아무것도 안 한다. |
STP | A필드의 내용을 B필드에서 지정한 메모리에 복사한다. |
LDP | A필드에서 지정한 메모리의 내용을 B필드에 복사한다. |
STS | A필드의 문자를 STDOUT에 쓴다. |
LDS | STDIN에서 문자를 읽어 A필드에 저장한다. |
레드코드 바이러스의 이름과 증상은 레드코드 프로그래밍 언어에서 따온 것이다. 다만 이름과 설정만 따왔을 뿐, 실제로 코어 워를 하는 건 아니다.
3. 증상
실행 장면
감염 파일이 1월 1일에 실행될 경우 증상이 발생하는데, 우선 화면에 커다란 격자를 하나 그린다. 그리고 격자의 랜덤 위치에 두 개의 파란색과 녹색 사각형이 있으며 엔터를 누를 경우 사각형들이 움직이며 격자를 채워나간다. 이 모습이 코어 워에서 두 프로그램이 서로를 종료하기 위해 싸우는 모습을 도식화한 것.
항상 두 플레이어(?)이름은 '엉덩이 큰 가쏘(Big Butt Gasso)'와 힘러 퓨스터(Himmler Fewster)' 다. 둘은 경쟁하다가 랜덤하게 어느 한쪽이 승리하면서 끝나는데, 그 후에는 시스템이 다운된다. 만약 엔터를 치지 않고 그냥 재부팅을 하던가 하면 (다시 감염 파일을 실행하지 않는 이상)아무 일도 없다고 한다.
소스코드에 의하면 엉덩이 큰 가쏘는 친구에게 레드코드를 받고는 자신이 뭔가를 할 수 있을 거라고 믿는 뚱땡이고, 힘러 퓨스터는 바이러스 백신 회사를 다니며 바이러스 제작자를 증오하는 인종차별주의자라고 한다.