chon

[Dreamhack] randzzz Write up 본문

Reversing/Dreamhack Write up

[Dreamhack] randzzz Write up

chon29 2025. 11. 20. 21:49

[ 문제 링크 | https://dreamhack.io/wargame/challenges/932 ]

 

로그인 | Dreamhack

 

dreamhack.io

 

[ 문제 설명 ]

드림핵 워게임 revering LEVEL 2

 

[ 문제 풀이 ]

IDA 구조

 

분석을 위해 먼저 IDA에서 main 함수를 확인했다.  
초반 실행 흐름은 여러 번 sleep을 수행한 뒤 rand() 를 연속으로 호출하는 형태였다.  
강조된 부분을 보면 rand()가 입력을 받기 전에 이미 세 번 호출되며,  
입력 직후 네 번째 rand()가 조건문에서 사용되는 구조임을 알 수 있다.

이때 srand()로 시드를 초기화하지 않기 때문에 rand()는 항상 동일한 난수열을 반환하게 되고,  
결국 조건문에서 사용하는 rand() % 10의 값 매번 같은 값이 된다.  
이 점이 문제를 푸는 핵심 단서였다.

 

 

IDA로 바이너리를 열어보면 main 함수에서 사용자 입력을 받고, 이어서 두 개의 조건문(if)이 실행되는 구조라는 것을 바로 확인할 수 있다.

 

구조 파악

  • rand()는 시드가 없어서 고정된 난수열을 생성함
  • 올바른 숫자만 입력하면 두 if문이 모두 True
  • 앞부분(28B)과 뒷부분(36B)의 암호화 데이터를 순서대로 복호화
  • 블록 내부의 암호화된 배열(v4, v6)은 get_flag() 함수를 통해 복호화되어 v8 버퍼에 차례대로 이어 붙여 전체 flag를 복원

조건 파악

프로그램은 시작하자마자 sleep(1)을 호출하고, 이어서 seconds = rand() + 1; 값을 기반으로 다시 sleep을 하기 때문에 프로그램을 실행하면 잠을 잔다. 분석 편의를 위해선 sleep을 1초로 고정하거나 패치하는 게 좋다.

그리고 if문 2개가 맞아야? get_flag를 준다고 합니다. 레츠고~~!!!

 

1. ida 세팅

이미지 베이스 확인~!

저는 보통 VA로 맞춰주는데요?

리버싱에서 VA는 Virtual Address(가상 주소)의 약자로 이는 컴퓨터 프로그램이 실행될 때 CPU가 사용하는 메모리 주소를 의미합니다.

 

info proc mappings

해당 명령어를 사용하면 해당 명령어를 사용하면 현재 프로세스가 사용 중인 메모리 영역을 상세하게 보여줘요.

* pwndbg 글자가 초록색일 때 명령어 사용!

 

Rebase program!!!!우

pwndbg에서의 main 주소를 IDA에서 Rebase해줘요.

 

VA = IMAGE BASE + RVA(Relative Virtual Address, 상대 가상 주소)

주소를 넣고 OK를 누르면 세팅 완료!!!

 

1번째 if문의 구조

[ pwndbg 명령어 ]
b *0x주소 : 중단점 설정
bc : breakpoint clear 중단점 초기화
r : f9
n : f8
c : 프로그램 끝까지 진행
set $레지스터=값 : 레지스터에 값 설정

 

b *0x5555555552f6 → 중단점을 걸고 인자를 1초로 바꿔줘야 함!

딸레(딸러-레지스터), 주별(주소-별)

set $eax=11초만 자도록 설정 후 n 명령어로 계속 진행 scanf부분에서 아무 값(전 3 입력했어요)이나 입력 후 계속 진행

 

5 -3을 볼 수 있는데 제가 입력한 값 3과 5를 비교하는 걸 볼 수 있는데 이때 첫 번째 if문의 rand값은 5임을 알 수 있다.

 

5인지 확인하고 넘어가기!

 

2번째 if문의 구조

cmp전인 mov에서 seconds를 볼 수 있는데 이 주소를 중단점 걸어준다.

b *0x0000555555555407 → 여기서도 값을 받는데 일단 아무값(2를 입력)이나 넣으면 1번째 if문과 같은 구조로 3 - 2로 출력되는데 이 때 두 번째 if문의 값은 3인 걸 알 수 있다.

set *0x7fffffffdd24=3  → 3으로 값을 설정하면 두 if문이 모두 True가 되었으므로 Flag값을 알 수 있다. 

 

[ Flag ]

 

'Reversing > Dreamhack Write up' 카테고리의 다른 글

[Dreamhack] Recover  (0) 2026.01.16
[Dreamhack] Happy New Year!  (0) 2026.01.14
[Dreamhack] Simple Crack Me Write up  (0) 2025.12.14
[Dreamhack] rev-basic-4 Write up  (1) 2025.11.18
[Dreamhack] rev-basic-3 Write up  (0) 2025.11.02