[Reversing] baby magic square
문제 설명
4x4 마방진을 구성하되, 특정 조건을 만족해야 플래그가 출력되는 리버싱 문제입니다.
조건을 만족하면 내부에 숨겨진 암호화 데이터를 복호화하여 플래그를 획득할 수 있습니다.
문제 요약
- 사용자 입력으로 4x4 마방진을 구성
- 특정 숫자만 입력 가능하며, 중복 불가
- 행, 열, 대각선의 합이 같아야 함
- 일부 셀의 합은 특정 값을 만족해야 함
- 조건 만족 시 XOR → TEA 복호화 과정을 통해 flag 출력
풀이 요약
- 프로그램은 사용자의 숫자 입력을 받아 4x4 배열에 저장합니다.
- 모든 입력값은 특정 조건을 만족해야 하며, 아래의 규칙이 적용됩니다.
- 입력된 2차원 배열이 마방진 조건(가로, 세로, 대각선 합 일치)을 만족해야 함.
- 일부 위치 (square[2][1] + square[2][2] == 76) 및 중앙부 합 등도 추가 조건으로 존재.
- 조건이 모두 만족되면 암호화된 데이터에 XOR을 적용한 후, TEA 복호화를 통해 플래그가 출력.
조건 분석
bool check_conditions(int num, int input_numbers[], int count)
- 숫자의 일/십의 자리에 1, 2, 5, 8 중 하나가 있어야 하며
- 숫자의 역순(예: 21 → 12)이 이전에 등장한 숫자여야 함
마방진 조건
bool check_magic_square(int square[4][4])
- 가로/세로/대각선 합 동일
- sum == 167 조건 만족 필요
- 중앙 4개 원소의 합 = square[1][1] + square[1][2] + square[2][1] + square[2][2]
- square[2][1] + square[2][2] == 76 도 추가 조건
복호화 흐름 요약
- 입력값과 비교되는 정답은 암호화된 상태로 코드에 하드코딩됨
- XOR 키는 마방진에서 특정 위치 값을 기반으로 함
- XOR된 값을 TEA 알고리즘을 통해 복호화
- 복호화된 값이 플래그 문자열로 출력됨
'Study > Write-up' 카테고리의 다른 글
2023 YISF 예선 MISC Write-up (0) | 2025.07.24 |
---|---|
[Rev] abex'crackeme3 Write-up (0) | 2023.10.12 |
[Write-UP] CRYPTO/Buckeye CTF - Rivest-Shamir-Adleman (0) | 2023.10.05 |