> 텍스트 처리 및 검색 > strings

strings: 바이너리 파일에서 문자열 추출하기

strings 명령어는 바이너리 파일(실행 파일, 라이브러리 등)에서 사람이 읽을 수 있는 텍스트 문자열을 추출하는 도구입니다. 프로그램을 디버깅하거나, 악성코드를 분석하거나, 알 수 없는 파일의 내용을 빠르게 확인할 때 유용합니다.

개요

바이너리 파일은 컴퓨터가 직접 실행하는 0과 1의 코드로 구성되어 있어, 일반적인 텍스트 에디터로 열면 깨진 문자로 보입니다. `strings` 명령어는 이러한 바이너리 파일 내에서 4개 이상의 연속된 인쇄 가능한 문자(printable character)를 찾아내어 텍스트 형태로 추출해줍니다. 이를 통해 바이너리 파일에 포함된 에러 메시지, 파일 경로, URL, 설정 값 등 유용한 정보를 파악할 수 있습니다.

주요 특징

strings 명령어의 주요 특징은 다음과 같습니다.

  • 바이너리 파일에서 사람이 읽을 수 있는 문자열을 추출합니다.
  • 기본적으로 4개 이상의 연속된 인쇄 가능 문자를 찾습니다.
  • 다양한 문자 인코딩(ASCII, UTF-16 등)을 지원합니다.
  • 프로그램이 사용하는 라이브러리 이름이나 설정 정보를 파악할 때 유용합니다.

strings의 활용 분야

strings는 단순히 파일을 확인하는 것 이상의 다양한 분야에서 활용될 수 있습니다.

  • 악성코드 분석: 악성코드 바이너리에서 C&C 서버 주소, 파일명, API 호출 등의 정보를 추출합니다.
  • 디버깅: 실행 파일 내에 포함된 에러 메시지나 디버깅 문자열을 찾아내어 문제를 해결합니다.
  • 알 수 없는 파일 분석: 파일의 확장자가 불분명할 때, strings로 내부 텍스트를 확인하여 파일의 성격을 추정합니다.

주요 옵션

strings 명령어의 주요 옵션을 목적에 따라 그룹화했습니다.

1) 추출 옵션

2) 도움말

생성된 명령어:

명령어를 조합해 보세요.

설명:

`strings` 명령어를 실행합니다.

위 옵션들을 조합하여 AI와 함께 가상으로 명령어를 실행해 보세요.

사용 예시

strings 명령어의 다양한 사용 예시를 통해 기능을 익혀보세요.

바이너리 파일에서 기본 문자열 추출

strings /usr/bin/top

`/usr/bin/top` 바이너리 파일에서 기본 설정(4글자 이상)의 문자열을 추출합니다.

더 긴 문자열만 추출

strings -n 8 /usr/bin/top

`-n` 옵션을 사용하여 8글자 이상의 문자열만 추출합니다.

문자열과 16진수 오프셋 함께 출력

strings -t x /usr/bin/top

`-t x` 옵션으로 각 문자열이 파일 내에서 시작하는 16진수 오프셋을 함께 출력합니다. 바이너리 분석 시 유용합니다.

파이프(|)와 함께 사용

strings /usr/bin/top | grep error

`/usr/bin/top` 파일에서 `error`가 포함된 문자열만 추출하여 확인합니다.

UTF-16 인코딩 문자열 추출

strings -e l /path/to/binary

`-e` 옵션을 사용하여 UTF-16 인코딩 문자열을 추출합니다. `l`은 little-endian, `b`는 big-endian을 의미합니다.

설치

strings는 `binutils` 패키지의 일부로, 대부분의 리눅스 배포판에 기본적으로 포함되어 있습니다. 별도의 설치가 필요하지 않습니다.

Debian/Ubuntu

sudo apt update
sudo apt install -y binutils

RHEL/CentOS/Fedora

sudo dnf install -y binutils

팁 & 주의사항

strings 명령어 사용 시 유의할 점들을 정리했습니다.

  • `strings`는 바이너리 파일에서 `cat`을 실행하는 것보다 훨씬 깔끔하고 유용한 정보를 제공합니다. `cat`은 바이너리 파일 내용을 그대로 출력하여 터미널이 망가질 수 있습니다.
  • 추출된 문자열에 줄바꿈이나 공백이 포함될 수 있으므로, `grep`, `awk` 등과 함께 파이프로 연결하여 추가로 가공하면 더욱 유용하게 활용할 수 있습니다.

관련 명령어

기능적으로 유사하거나 함께 자주쓰이는 명령어들입니다.


동일 카테고리 명령어