[Dreamhack] Rev-basic-2 Writeup
Rev-basic-2 Writeup
Rev-basic-2 문제는 입력된 문자열을 배열 형태로 저장된 값들과 비교하는 구조를 가지고 있다.
Rev-basic-1에서 한 글자씩 비교하는 방식이었다면, 이번 문제는 배열 인덱싱과 반복 구조를 조금 더 복잡하게 다루고 있어서 한 단계 심화된 형태라고 볼 수 있다.
문제 파일
- File Download: Rev-basic-2
1. 프로그램 실행 화면
프로그램을 실행하면 Rev-basic 시리즈와 같은 형태로 입력을 받는 화면이 먼저 나타난다.
1
2
C:\Users\cryptonite7777>chall2.exe
input :
입력된 값을 내부 배열과 비교하여 조건을 모두 만족시키면 Correct를 출력한다.
2. Main 함수 흐름
메인 함수에서 입력된 문자열을 버퍼에 저장한 뒤, sub 함수로 넘겨 검증하는 구조는 동일하다.
rev-basic 시리즈의 공통된 흐름으로 볼 수 있다.
3. 비교 로직 분석
아래 이미지는 sub 함수 내부의 핵심 비교 과정이다.
코드를 자세히 보면 배열 기반 반복 구조라는 것을 확인할 수 있다.
루프 변수를 증가시키며 배열의 특정 인덱스로 접근하고,
입력된 문자열의 각 문자를 가져와 배열에 저장된 값과 비교하는 방식으로 동작한다.
입력 문자열은 1바이트씩 가져오며,
배열은 4바이트 단위로 정렬되어 있기 때문에 인덱스 계산 시 i * 4 형태로 접근하는 흐름을 보게 된다.
이 계산 방식만 이해하면 전체 비교 구조는 어렵지 않게 따라갈 수 있다.
4. 비교 배열 분석
배열에 저장된 값을 따라가다 보면 최종적으로 어떤 문자열이 필요한지 확인할 수 있다.
문자 단위로 비교되지만 배열 구조를 그대로 따라가면 다음과 같은 플래그 형태가 구성된다.
1
Comp4re_the_arr4y
FLAG
1
DH{Comp4re_the_arr4y}
마무리
Rev-basic-2 문제는 배열 기반 문자열 비교 흐름을 이해하는 데 도움이 되는 문제다.
루프 구조, 인덱스 계산, 배열 접근 방식 등을 자연스럽게 익힐 수 있으며
이후 더 복잡한 문자열 변환 문제를 분석할 때 기반이 되는 개념들이다.
Rev-basic-0과 1을 기반으로 차근차근 접근하면 무리 없이 해결할 수 있는 문제다.

