문제

리버싱 문제로 유니티로 만든 게임 파일을 제공해주었고, 게임 내에서 비행기를 몰고 맵 끝까지 도달하면 플래그를 획득하는 방식

풀이

문제 파일은 요렇게 생겼고 유니티 리버싱에 필요한 Assembly-CSharp.dll 파일은 제공되지 않았음

문제 파일

피지컬에 자신이 있어서 맵 끝까지 가보려고 했지만, 일정 시간이 경과하면 유도 미사일이 비행기를 격추시켜 게임 파일 변조 없이 끝까지 가는건 불가능했다 ㅎ…ㅎ;;

게임 화면

유니티 리버싱은 처음이라 검색해보던 중 Il2CppDumper라는 툴을 이용하면 게임 오브젝트들을 제어하는데 이용되는 Assembly-CSharp.dll 파일을 추출가능하다는 정보를 얻었다.

툴을 설치하고 바이너리 파일을 지정해주면 Assembly-CSharp.dll 파일을 추출할 수 있었다. 

Il2CppDumper를 이용한 파일 추출

추출한 파일들

ILSpy를 이용해 Assembly-CSharp.dll 파일을 열면 디컴파일된 코드를 볼 수 있으니 프리다를 이용해 게임 파일을 변조하면 끝!

ILSpy로 디컴파일 된 게임 코드

충돌 데미지와 미사일 스폰을 False로 변경하는 코드를 작성해서 플래그를 획득했다.

프리다 코드

플래그 획득


CTF대회에서 처음 풀어본 리버싱 문제인데 게임 리버싱 문제라서 특히 더 재밌게 풀었던것 같다.

이제 리버싱 문제도 틈틈히 풀어봐야겠다 재밌네 ㅎㅎ