개요
바이너리 파일은 컴퓨터가 직접 실행하는 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` 등과 함께 파이프로 연결하여 추가로 가공하면 더욱 유용하게 활용할 수 있습니다.