문제는 다음과 같다.

wget -i <http://pwnable.kr/bin/flag>

wget을 통해 먼저 문제 파일을 다운로드 받았다.

문제를 보면 알 수 있듯 패킹이 되어 있다 나와있다.

대표적인 패킹 방식으로 UPX 패킹이 있는데 확인 절차를 들어가지 않고 바로 upx 툴을 활용하여 언패킹을 시도 해봤다.

언패킹이 되는 것을 확인할 수 있으며 이를통해 upx 방식으로 패킹이 되어있다는 사실을 알 수 있다.

메인함수인데 오른쪽에 대놓고 flag 위치를 알려주는 걸 확인할 수 있다.

main 함수에서 어떠한 일이 발생하길래 대놓고 flag를 나타내주는 걸까 싶어서 IDA를 통해 디컴파일을 시켜봤다.

{
  char *dest;// [rsp+8h] [rbp-8h]puts("I will malloc() and strcpy the flag there. take it.", argv, envp);
  dest = (char *)malloc(100LL);
  strcpy(dest, flag);
  return 0;
}

디컴파일 결과다. puts 과 strcpy 함수가 있는 걸 보아 C 로 작성된 것을 유추해볼 수 있으며 puts 방식으로 문자열을 출력하고 있다.

문자열에서 malloc() 과 strcpy 를 이세상 어딘가에 있을 flag에다 사용한다고 한다.

아무쪼록 주석으로 나타내고 있는 flag 주소 0x6c2070 주소를 찾아보자.

찾아보니 fc2070h 라는 또 다른 주소를 찾을 수 있었다.