[Reversing] Check Function Argument
2024. 11. 30.

https://dreamhack.io/wargame/challenges/671

 

Check Function Argument

Description 이 문제는 메인 함수에서 어떤 함수를 호출하는 프로그램이 주어집니다. 해당 함수는 플래그가 담긴 문자열의 주소를 인자로 받습니다. 하지만 그 문자열을 출력하지는 않습니다. 동적

dreamhack.io

드림핵 리버싱 문제

일단 파일을 다운받고 분석해보자

ida로 열어보니 elf x86-64

즉 64비트 파일이라는 의미

파일 헤더 (readelf -h 명령어)

해당 파일을 실행시켜보면

Below function takes the flag as an argument

아래의 함수는 플래그를 인수?(argument)로 사용한다고 한다.

아무래도 디버거로 까봐야될듯

no symbol table is loaded.

아마 컴파일 과정에서 따로 옵션을 준듯

일단 info file을 해서

.text 세그먼트의 위치를 파악하고, 해당 세그먼트가 시작하는 부분에 bp를 주었다.

 

우리가 알아보고자 하는 메인함수는 주로  .text 영역에 있기 때문에 .text 의 시작 즈음에 bp를 걸면 된다.

그리고 run

계속 n으로 진행하다가 

메인 진입 지점에서 s로 서브루틴으로 들어가준다.

그다음부터 계속 n(next) 명령어로 진행을 하다 보면

레지스터에 플래그가 뜬 걸 확인할 수 있다.

기드라 실습 문제라는데, 기드라로 안풀어서 그냥 이것저것 건들여보다가 풀린 느낌

ida로 디컴파일 해봐도 어느 특정 변수를 찾아 해당 변수에 저장된 값을 확인하라고 한다...

return값이 result인데, result는 아마 플래그로 추측할 수 있을 것이고, 해당 값은 qword_4040d0에도 저장되어 있다. 문제는 이 값을 동적으로 디버깅하면서 확인해야 하는것....

 

※ gdb에서 심볼이 뜨지 않을때

더보기

만약 gdb를 실행할 때, 가끔 심볼이 죽어있는 경우를 발견할 것이다.

이 경우 info file -> .text의 세그먼트 주소를 확인한 후, 시작 부분에 bp를 걸고 run을 해준다.

진행하다 보면 해당 파일의 메인 루틴으로 진입하는(call) 부분이 보일텐데, 여기서 s로 들어가서 디버깅을 진행해주면 된다.