[Reversing] baby magic square

 

문제 설명
4x4 마방진을 구성하되, 특정 조건을 만족해야 플래그가 출력되는 리버싱 문제입니다.
조건을 만족하면 내부에 숨겨진 암호화 데이터를 복호화하여 플래그를 획득할 수 있습니다.

[위키피디아에서 가지고 온 사진]

 

 

 

 문제 요약

  • 사용자 입력으로 4x4 마방진을 구성
  • 특정 숫자만 입력 가능하며, 중복 불가
  • 행, 열, 대각선의 합이 같아야 함
  • 일부 셀의 합은 특정 값을 만족해야 함
  • 조건 만족 시 XOR → TEA 복호화 과정을 통해 flag 출력

풀이 요약

  1. 프로그램은 사용자의 숫자 입력을 받아 4x4 배열에 저장합니다.
  2. 모든 입력값은 특정 조건을 만족해야 하며, 아래의 규칙이 적용됩니다.
  3. 입력된 2차원 배열이 마방진 조건(가로, 세로, 대각선 합 일치)을 만족해야 함.
  4. 일부 위치 (square[2][1] + square[2][2] == 76) 및 중앙부 합 등도 추가 조건으로 존재.
  5. 조건이 모두 만족되면 암호화된 데이터에 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 알고리즘을 통해 복호화
  • 복호화된 값이 플래그 문자열로 출력됨

 

nomal.zip
0.01MB

'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

+ Recent posts