CTF & Wargame(REVERSING)

[dreamhack] level 1 fake 문제

KWAKBUMJUN 2025. 3. 6. 18:28

main 함수 디컴파일 코드

sub_140B 함수의 반환값을 ptr에 저장

만약 ptr의 반환값이 0이라면 1을 반환

아래 함수들을 차례대로 실행(인자는 ptr)

 

해당 바이너리를 실행하면 아무 결과도 나오지 않는다. 따라서 위의 코드를 보면 flag를 생성하고 지우는 작업이 있다는 것을 유추할 수 있다.

 

그렇다면 마지막의 함수인 free에 bp를 걸고 안에 저장된 값을 확인해보자.

해당 바이너리를 PIE가 적용되어있기 때문에 bp를 걸 때 free함수의 주소를 그대로 사용하면 안되고 vmmap을 활용하여 해당 바이너리의 시작주소에 free함수의 주소를 더해준 주소에 bp를 걸어줘야 한다.

 

GDB를 활용한 분석

PIE가 적용된 모습(PIE enabled)

 

이제 vmmap으로 바이너리의 시작점을 찾아보자

시작점 :

0x555555554000

 

따라서

0x555555554000 + free 함수 시작 주소 연산을 해주면 된다.

 

0x555555554000 + 0x15B3 = 0x5555555555B3

 

주소는 0x5555555555B3이기 때문에 해당 주소에 bp를 걸어줘야 한다.

 

 

상단에

DH{SMC_R3vers1ng_chall} 

라는 flag가 뜨는 것을 확인할 수 있다.