본문 바로가기

4-2. 2024-1 심화 스터디/워게임 도장 깨기

[2주차] 2024.03.14 - Reversing War Game Write Up

CTF Cite

https://play.picoctf.org

 


#문제 1. [Ready Gladiator 0]

문제 설명을 보면 항상 패배하는 전사를 만들어야 문제가 풀리는 것으로 예상된다. launch instance를 클릭하면 nc포트가 활성화되고 imp.red라는 파일을 다운받을 수 있다. 

 

imp.red는 Redcode라는 프로그래밍 언어로 작성되었다. 

포트에 접속하고 imp.red파일을 다운받는다.

 

 

포트에 접속해보면 다음과 같이 100번 동점이 나온다. 

100판 모두 지게 만들기 위해서 imp.red 파일을 확인했다. 

;redcode
;name Imp Ex
;assert 1
mov 0, 1
end

 

여기서 mov 0,1을 삭제해 패배하게 만들 수 있다. 

 

;redcode
;name Imp Ex
;assert 1
end

 

이렇게 imp.red 파일을 수정하고 다시 포트에 접속했다. 

 

 

위의 화면과 같이 플래그를 확인할 수 있다. 

 

 


 

#문제 2. [No way out]

 

windows game을 클릭하면 실제 게임을 열 수 있다. 

 

 

게임에 보이는 깃발에 도달해야 플래그가 나올 것으로 예상된다. 하지만 일정 수준 이상 깃발에 가까이 갈 수 없게 되어 있다. 이를 통해 관련 조건을 해제하거나 변경하는 방향으로 문제를 해결해봐야 한다고 유추할 수 있다. 

 

 

문제에서 주어진 파일 중 Aeesmbly-CSharp.dll 이라는 파일을 확인했다. 리버싱 문제인 만큼 IDA 프로그램으로 파일을 살펴보았는데 유의미한 결과는 얻을 수 없었다. 

 

구글링을 통해 'dqSpy'라는 프로그램으로 코드를 변경할 수 있는 것을 확인했다. 

 

 

if (Input.GetButton("Jump") && this.canMove && this.characterController.isGrounded && !this.isClimbing)
{
this.moveDirection.y = this.jumpSpeed;
}
else
{
this.moveDirection.y = y;
}

 

확인한 파일에서 점프하는 것에 대한 코드 부분이다. 

규칙을 보면 점프를 하면 움직일 수 있고, 땅에 있어야 하며, 올라가지 못하게 된다.

 

깃발에 도달해야 플래그를 얻을 수 있는데 깃발에 도달하려면 점프를 해야하기 때문에, 

땅에 있어야 한다는 부분을 삭제한다. 

 

코드를 수정 후 다시 게임에 접속하니 다음과 같이 깃발에 접근할 수 있었고, 플래그를 확인했다.