최근 수정 시각 : 2022-06-30 14:54:58

레드코드 바이러스


1. 개요2. 레드코드 프로그래밍 언어3. 증상4. 기타

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)' 다. 둘은 경쟁하다가 랜덤하게 어느 한쪽이 승리하면서 끝나는데, 그 후에는 시스템이 다운된다. 만약 엔터를 치지 않고 그냥 재부팅을 하던가 하면 (다시 감염 파일을 실행하지 않는 이상)아무 일도 없다고 한다.

소스코드에 의하면 엉덩이 큰 가쏘는 친구에게 레드코드를 받고는 자신이 뭔가를 할 수 있을 거라고 믿는 뚱땡이고, 힘러 퓨스터는 바이러스 백신 회사를 다니며 바이러스 제작자를 증오하는 인종차별주의자라고 한다.

4. 기타

코어 워의 창시자인 D.G.존스와 A.K.듀드니는 크리퍼 바이러스에서 영감을 따왔다고 한다. 당시엔 아직 컴퓨터 바이러스가 대중화되지 않았고 정보 획득도 쉽지 않았던 시기라 둘은 크리퍼 바이러스와 그걸 제거하는 프로그램 리퍼의 존재를 일종의 도시전설이라고 여겼다는듯 하다.