요즘들어 사람이랑 대화하는 것 보다, ChatGPT랑 대화를 많이하는 것 같은데요. 그래서 심심해서 CTF 문제좀 내달라고 해봤습니다. (제가 여태까지 ChatGPT를 사용해서 공부한 내용을 비롯하고 제 수준에 맞게 문제를 제작합니다.)

문제 설명

프로그램 또한 다운로드가 가능합니다.

바로 정적 분석을 통해 플래그 값을 찾아보도록 하겠습니다.
풀이
ida를 통해 파일을 열어서 main 함수부터 디컴파일러를 통해 알아봅시다. 너무 쉽게 풀었습니다.
int __fastcall main(...)
_-fastcall 은 함수의 호출 규약 중 하나로, 특정한 CPU 레지스터를 사용해
인자를 전달하는 방식이다.
int argc
- 프로그램 실행 시 전달된 인자의 개수를 나타낸다
- 최소한 프로그램 이름이 항상 포함되므로 argc는 최소 1이 된다.
ex)
./mystery_binary test123
위처럼 실행하면 argc == 2
첫 번째는 프로그램 이름, 두 번째는 "test123"
const char **argv
명령어 실행 시 전달된 인자 목록을 문자열 배열 형태로 저장
argv[0] : 실행된 프로그램의 경로
argv[1] : 첫 번째 입력값


strcmp 함수를 통해서 "wh1t3h4t_s3c" 라는 문자열이 존재할 경우에 플래그 값을 얻을 수 있는 것을 알 수가 있습니다.
문자열이 똑같으면 strcmp 함수는 0을 반환하므로 앞에 !(논리 NOT 연산자)를 넣어서 조건문을 true로 하여 플래그 값을 얻을 수 있습니다.