https://dreamhack.io/wargame/challenges/934
사용자에게 문자열을 입력받아 메모리에 저장하는 프로그램입니다. 저장된 값이 특정 값과 일치하면 플래그를 출력합니다. 알맞은 문자열을 입력하여 플래그를 획득하세요! 플래그는 flag 파일에 있습니다.
플래그의 형식은 DH{...} 입니다.
if(int_arr[0] == 0x64726d68 && int_arr[1] == 0x636b3a29){
puts("Nice!");
puts(flag);
}
int_arr[0] 과 int_arr[1]이 각각 0x64726d68, 0x636b3a29 이면 플래그를 얻을 수 있는걸 알아냈습니다.
0x%x 을 통해 16진수로 변환된 문자임을 알 수 있습니다)

주어진 문자는 drmh 과 ck:) 임을 알 수 있습니다.
drmhck:) 을 입력하였습니다. 하지만 문제는 풀리지 않았습니다. 

+) 문자열 순서가 바껴야 됐던 이유
코드에 제시된 16진수를 변환한 순서 그대로 입력하였는데 왜 문자열을 뒤집어서 입력한게 정답이 되는지 의문이 들어 알아보았습니다.
코드에서 제시된 정수 리터럴(예: 0x64726d68)을 아스키코드로 그대로 읽으면 "drmh"가 됩니다. 그런데 실제로 프로그램이 실행되는 환경(x86/x86-64 CPU)은 기본적으로 리틀엔디언 방식을 사용합니다. 리틀엔디언은 하위 바이트부터 메모리에 저장하는 방식이기 때문에, 메모리에 적힌 바이트 순서를 그대로 읽으면 우리가 기대한 문자열과 반대 순서인 "hmrd"가 됩니다. 따라서 입력할 때는 이 엔디언 차이를 고려해서 순서를 뒤집어야 합니다.
0x%x가 정수를 16진수 소문자로 변환하는 형식 지정자 임을 알게 되었습니다.int_arr[0] == 0x64726d68 and int_arr[1] == 0x636b3a29. "drmhck:)", but it did not work. %x in C format specifiers converts integers to hexadecimal strings.