[Reverse]
- 파일의 비밀번호를 잊었다고 한다.
- ret file에 대한 정보
- 파일을 실행하기 위해 ./ret 명령어를 입력하였으나, 권한이 금지되었다.
리눅스에서의 권한 설정 명령어 참고 사이트
리눅스 권한 설정 (chmod, chown, chgrp)
- chmod [권한] [변경할 파일 혹은 디렉토리]
- chmod u+x ret
- 권한 변경 후, ret 파일을 다시 실행해보니 파일이 잠겨있으므로 비밀번호를 입력하라고 나온다.
- 단서가 없으니 아마 정상적으로 파일을 실행하거나 하기에는 어려워 보인다.
리눅스 strings 명령어
리눅스 명령어 / strings 명령어 - 문자열만 추출하여 출력하기
- strings 명령어를 사용해서 파일 안에 있는 문자열 중, 플래그를 찾을 수 있었다.
- 이렇게 grep 명령어를 써도 된다.
[Ready Gladiator1]
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'이라는 컴퓨터 게임을 이해해야 할 것 같다. 실제로 잘 모르겠어서 해설을 구글링해봤지만, 왜 이런 구문을 써야하는지 이해가 가질 않아 며칠 째 해결되지 못한 난제로 남아있었다.
1. CoreWar란?
프로그램끼리 서로 싸우도록 한 게임
이 게임에서의 각 프로그램 목적 : 다른 프로그램들을 죽이는(종료시키는) 것
2. red코드에서의 mov 0, 1 의미
mov 0, 1
이 코드가 실행되면 현재 실행되는 명령어 위치를 바로 다음 메모리 공간에 복사하게 된다. 그 결과,
mov 0, 1
mov 0, 1
이런 상태가 된다. 이후, 두 번째 명령어를 실행하게 되고(동일한 명령어) 똑같이 'mov 0, 1' 을 복사하게 된다. 이러한 상황이 무한히 반복되게 된다.
이를 비유하자면, 메모리 공간에서 족적을 남기면서 돌아다니게 되는 것이고, 다른 프로그램이 있다면, 그 프로그램을 죽이게 된다.(덮어쓰는 것을 의미) 따라서 다른 프로그램이 존재하지 않는다면 무한루프를 돌고 있는 것과 동일한 상황이 되는 것이라고 생각하면 될 것 같다.
따라서 게임에서 이기려면 다른 방법을 사용해야 한다.
3. 적어도 한 번 이길 수 이는 red코드 찾기
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
'4-2. 2024-1 심화 스터디 > 워게임 도장 깨기' 카테고리의 다른 글
[2024.05.09] - Forensic War Game Write Up (0) | 2024.05.25 |
---|---|
[5주차] 2024.05.03 - Pwnable War Game Write Up (0) | 2024.05.10 |
[4주차] 2024.04.05 - Web War Game Write Up (0) | 2024.04.05 |
[3주차] 2024.03.29 - Pwnable War Game Write Up (0) | 2024.03.29 |
[2주차] 2024.03.14 - Reversing War Game Write Up (1) | 2024.03.22 |