
hint) You may be able to find a viable warrior in beginner docs

한번이라도 승리할 수 있도록 해야한다.

아이다로 로드해서 디컴파일을 통해 파악하려 시도해보았지만, PE파일이 아니라 열리지 않는 것 같다.
우분투에서 cat명령어를 사용해서 파일 내용을 확인해보자.

;recode // 레드코드로 작성되었음을 의미
;name Imp Ex
;assert 1 // 프로그램이 현재 설정과 실제로 작동하는지 확인하는 데 사용
mov 0, 1
end
여기서 의문점이 하나 생겼다. 파일에서는 mov 0, 1 명령어를 사용하여 0의 값을 1로 바꿔준다는 점을 확인할 수 있었다. (사실, 확장자는 red로 되어있긴 하지만 어셈블리어 명령어가 보이니 해당 명령어를 동일한 기능을 하는 것으로 간과하여 생긴 문제같다.) 하지만, 이를 실행시킨 결과를 위에서도 볼 수 있듯이 warrior1이 이기지 않은 것을 확인할 수 있다. hint와 구글링을 통해 이유를 찾아보았다.
이 문제를 풀기 위해서는 'CoreWar'이라는 컴퓨터 게임을 이해해야 할 것 같다. 실제로 잘 모르겠어서 해설을 구글링해봤지만, 왜 이런 구문을 써야하는지 이해가 가질 않아 며칠 째 해결되지 못한 난제로 남아있었다.
프로그램끼리 서로 싸우도록 한 게임
이 게임에서의 각 프로그램 목적 : 다른 프로그램들을 죽이는(종료시키는) 것
mov 0, 1
이 코드가 실행되면 현재 실행되는 명령어 위치를 바로 다음 메모리 공간에 복사하게 된다. 그 결과,
mov 0, 1
mov 0, 1
이런 상태가 된다. 이후, 두 번째 명령어를 실행하게 되고(동일한 명령어) 똑같이 'mov 0, 1' 을 복사하게 된다. 이러한 상황이 무한히 반복되게 된다.
이를 비유하자면, 메모리 공간에서 족적을 남기면서 돌아다니게 되는 것이고, 다른 프로그램이 있다면, 그 프로그램을 죽이게 된다.(덮어쓰는 것을 의미) 따라서 다른 프로그램이 존재하지 않는다면 무한루프를 돌고 있는 것과 동일한 상황이 되는 것이라고 생각하면 될 것 같다.
따라서 게임에서 이기려면 다른 방법을 사용해야 한다.
ADD #4, 3
MOV 2, @2
JMP -2
DAT #0, #0
[로직]
1. 3을 더한 위치(4번 위치)에 4 더한다 <4번의 자료값이 4로 증가>
2. 여기서 2를 더한 위치(4번 위치)에 있는 내용을 2를 더한 위치(4번 위치)에 있는 값이 지시하는 주소에 복사한다. <8번 위치(4+4)에 복사>
3. 여기서 2 명령어 이전(전 1번 위치)로 돌아간다 <4번의 저장소에 다시 4를 더함>
4. 자료값 0의 저장 위치
이를 반복하면 4칸씩 건너뛰면서 'DAT #0, #0을 복사한다. 이 프로그램은 총 길이가 마지막 4번을 제외하면 3이기 때문에 메모리가 끝에서 다시 처음으로 이어져 있더라도 만약 총 크기가 4의 배수이기만 하면 자기 자신을 손상하지 않고 무한 반복하는 것이 가능하게 된다.
따라서 위 코드를 사용하게 된다면 자기 프로그램은 피해입지 않으면서 무한반복하며 다른 프로그램이 존재하면 종료시키는 것이 가능하게 되는 것이다.
공격 수행 코드)
ADD #4, 3
MOV 2, @2
JMP -2
DAT #0, #0
공격 수행 결과)

+) 이 corewar에서 이기는 방법은 여러가지 있는 것 같다. 꼭 저 코드여야하는 건 아니고, 다른 사이트에서 다른 코드를 찾아서도 해결할 수 있는 것 같다. 그 증거로 아래 코드와 사진은 core war 관련 다른 사이트에서 찾은 코드로 실행한 결과이다.
사이트: https://crypto.stanford.edu/~blynn/play/redcode.html

; recode
; name Imp Ex
; assert 1
jmp 2
dat 0
mov #12, -1
mov @-2, <5
djn -1, -3
spl @3
add #653, 2
jmz -5, -6
dat 833
end
위 코드로 공격 수행해도 똑같이 플래그 값이 출력된다.

[reference]
code : https://crypto.stanford.edu/~blynn/play/redcode.html
http://www.no-smok.net/nsmk/CoreWar
solution site : https://systemweakness.com/ctf-writeup-picoctf-2023-f0ab517e737b#747c
about core war : http://www.no-smok.net/nsmk/CoreWar