본문 바로가기

Write Up

정보보호올림피아드2015 본선 Q2


리버싱 문제입니다. 문제 내용은 63빌딩을 오르면서 세 개의 키를 획득하면 올바른 최종 키가 나오게 됩니다. 실행시켜보면 

ID를 입력받습니다. 제 ID는 Player14였습니다. 입력하고 들어가서 엔터를 누르면

게임이 시작됩니다. Stage63까지 가면 키를 다 얻나 봅니다.

UPX가 걸려 있어 언패킹을 하고 IDA로 먼저 정적 분석을 합니다. 문자열을 보면 

익숙한 문자열들이 좀 보입니다. 여기서 Pass가 있는 부분으로 갑니다.

여기서 이 문자열을 사용하네요. 이제 이 함수를 올리디버거에서 동적 분석 해 보겠습니다. 

브레이크포인트를 걸고 온 뒤 분석을 해 보면

여기서 0x3F와 비교를 하는데 이는 십진수로 63입니다. 즉 저 변수가 몇 층인지를 저장하는 변수라고 볼 수 있습니다. 63과 같으면 아래 분기문에서 분기하지 않으므로 제로플래그를 수정하여 아래 호출하는 함수로 가 보겠습니다. 들어가 보면 0x402D20함수를 호출 하는데 이를 IDA에서 헥스레이로 보면 

총 세 개의 분기문이 있는 것을 볼 수 있습니다. 여기서 우리가 세 개의 키를 획득해야 한다고 했으므로 여기가 키와 관련된 부분이라 유추할 수 있습니다. 계속 반복해서 분석해 본 결과 각각의 if문이 하나의 키를 먹었을 때 실행되는 부분임을 알 수 있었고 각각의 분기문을 모두 실행시켜 주면 최종 키를 얻을 수 있습니다.

분기문을 수정하여 키를 획득했기 때문에 프로그램 상에서는 세 번째 키만 획득했다고 나오지만 실제로 나온 키는 첫 번째, 두 번째, 세 번째 키 모두 먹었을 때의 연산된 키 이므로 저 키가 최종 키 입니다.

KEY : 8Aq4Ce2Aq6Ky2Ik

'Write Up' 카테고리의 다른 글

정보보호올림피아드2015 본선 Q5  (3) 2015.10.17
정보보호올림피아드2015 본선 Q3  (0) 2015.10.17
Layer7 CTF Write-UP  (2) 2015.09.01
YISF 2015 Write-Up 예선  (0) 2015.08.12
[Just For Fun3] Reversing_AVReversing  (0) 2015.07.26