https://dreamhack.io/wargame/challenges/934
로그인 | Dreamhack
페르소나 굿즈 이벤트 기간 한정 구독 혜택 지금 가입하면 연간 플랜을 최대 75% 할인 된 가격으로!
dreamhack.io
리틀 엔디언과 빅엔디언의 차이를 알고, 문제를 풀면 됩니다...ㅎ
일단 문제 파일이 C언어로 주어져서 "리눅스에서 풀어야겠구나"싶어서 리눅스를 열었습니다

vi로 chall.c를 열어서 봤는데, 너무 보기 힘들어서 윈도우에서 열어봤습니다...ㅎ
< 코드 해석 >

코드의 하단을 보게되면, flag를 출력하는 조건이 명시되어 있습니다.
int_arr[0]과 int_arr[1]이 저 숫자와 같으면 되는 거니까 int_arr를 보면 될 것 같습니다.

위의 코드를 통해 문자형 리스트로 사용자에게 값을 입력받고, 그 리스트를 정수형으로 바꾼 게 int_arr인 것을 확인할 수 있었습니다.
여기서 주의해야할 점은 char arry는 1바이트씩 문자로 해석하는 반면, int arry는 4바이트를 묶어서 하나의 숫자로 해석한다는 점입니다.
그리고 대부분의 컴퓨터는 리틀 엔디언을 사용해서 값을 저장하는데, 간단히 말해 뒤부터 저장하게 됩니다.
int_arr[0]값으로 예를 들어 보겠습니다.
0x64726d68을 저장하게 되면
0x68, 0x6d, 0x72, 0x64 이렇게 저장하게 됩니다.
그리고 각 숫자를 아스키코드로 변환하면 0x68 = h, 0x6d = m, 0x72 = r, 0x64 = d가 됩니다.
이것과 마찬가지로 int_arr[1]도 리틀엔디언으로 바꾸고, 아스키코드로 변환하면 '):kc'가 됩니다.
참고로, 아스키코드로 변환하는 이유는 사용자에게 입력받는 값은 char이기 때문에, 역추적(?)한겁니다.
그래서 드림핵에서 연 VM주소를 리눅스에서 연결해서 input에 hmrd):kc를 입력하면 flag를 얻게 됩니다.


'SWUFORCE > 워게임' 카테고리의 다른 글
| whatsdifferent (0) | 2026.02.17 |
|---|---|
| [추가 공부]빅 엔디안 vs 리틀 엔디안 (0) | 2026.02.10 |
| Hefty Image (0) | 2026.02.09 |
| [Dreamhack]Exercise: SSH (0) | 2026.01.30 |
| [Dreamhack]Exercise: Welcome-Beginners (0) | 2026.01.30 |