본문 바로가기
Wargame/HackCTF Writeup

HackCTF - Handray(reversing) Writeup

by Ate1es 2021. 8. 18.

ELF 파일이 하나 주어집니다.

 

리눅스에서 실행해보면 flag ~~~ 라고 한 줄이 출력된 후 실행이 종료됩니다.

IDA로 열어서 구조 파악을 먼저 했습니다.

 

제가 본 화면은 위의 loc_40058D에 해당하는 부분이 실행되어져 출력된 것 같았습니다.

 

아래 Textview로 확인해보면, 빨간색 줄에 분기문 [ cmp ] 명령이 있고, 

 

cmp [rbp+var_4], 0 --> [rbp - 4] 주소에 있는 값이 0이 아니면,

jnz short loc_40058D --> 40058D로 점프해라

라고 해석할 수 있습니다.

40058D 주소로 점프하면 아까 출력되었던 flag ~~~가 기다리고 있기 때문에, 점프가 안되게 

 

[rbp - 4] 의 값을 0으로 만들어주겠습니다.

 

우선 위 사진의 빨간 줄(분기문)에 BP를 걸고 실행합니다.

gdb 명령어 : < b *0x400535

gdb 명령어 : < run >

프로그램은 BP(분기문)에 멈추게 되고, 그 때에 [rbp-4] 의 값을 확인해보면 

gdb 명령어 : < x/16bx $rbp -4 >

0x7fffffffe19c 주소에 0x01이라는 값이 들어가 있는 것을 확인할 수 있습니다.

 

이제 해당 주소의 메모리 값을 0x00으로 변경하고, 다시 실행시키면 점프하지 않고 실행되면서 Flag가 출력됩니다.

gdb 명령어 : < set *(int*)0x7fffffff319c = 0x00 >

gdb 명령어 : < c >

 

HackCTF{HotToHanDleC0ldT0H000ld!}