CTF & Wargame(REVERSING)

[dreamhack] 비기너 문제 simple-operation

KWAKBUMJUN 2025. 3. 6. 03:23

바이너리 실행 화면

해당 문제를 다운받고 바이너리를 실행하면 random number을 출력하고 input?이라는 문구와 함께 입력란이 나온다. 아무거나 입력해보면 result라는 문구가 출력되고 특정한 문자가 출력되며 try again이라고 출력된다. 따라서 알맞는 입력값을 찾는 것이 이 문제의 목표인것 같다.

또한 해당 문제 폴더에 flag를 확인해보면 DH{sample}이라고 출력되는 것을 봐선, flag 파일에 flag가 저장되는것 같다.

 

IDA 분석

main 함수 디컴파일 코드

flag 파일을 실행하고 해당 파일을 읽고 buf에 저장한 뒤에 파일 종료

사용자에게 특정한 값 입력받음

v11에 입력 받은 문자열(v7)과 v6와 xor 연산하여 저장

7번 반복하여 s1의 i번째 배열에 s[7-i] 저장 --> a0b4c1d7를 반대로

** s1과 7d1c4b0a가 같으면 Congrats! 출력하고 flag 출력 **

 

해결 방법 : 어떤 값을 입력하면 s1과 7d1c4b0a과 같아지는지 알아내면 됨

 

역연산

<핵심 연산>

v11(결괏값) = v6(랜덤한 숫자) ^ v7(사용자 입력값)

v7 = v6 ^ v11

v7의 값이 배열 s에 저장됨

s1[i] = s[7-i]

 

<역연산 코딩 아이디어>

랜덤으로 출력되는 값을 받아옴

v7 = v6(받아온 값) ^ v1(결괏값)

v7 = v6 ^ 7d1c4b0a

 

<풀이>

random number : 0x351dcb8d 

0x351dcb8d ^ 0x7d1c4b0a 계산

= 1208057991를 입력

 

flag 획득

 

flag : DH{cc0017076ad93f32c8aaa21bea38af5588d95d2cdc9cf48760381cc84df4668e}