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!}