본문 바로가기
개발/Linux

리눅스 파일 분석 마스터: xxd, hexdump, strings 명령어 활용 가이드

by 낭만기사 2025. 4. 20.

리눅스 파일 분석 마스터

xxd, hexdump, strings 명령어를 활용한 파일 내용 분석 및 16진수 덤프 생성 방법

파일 분석의 중요성

리눅스 시스템에서 파일의 내용을 분석하는 것은 시스템 관리, 보안 분석, 디버깅 등 다양한 목적으로 중요합니다. 특히 바이너리 파일이나 실행 파일의 내용을 확인할 때 일반적인 텍스트 편집기로는 내용을 확인하기 어렵습니다. 이때 xxd, hexdump, strings 명령어를 사용하면 효과적으로 파일 내용을 분석할 수 있습니다.

리눅스 터미널에서 파일 분석 작업을 수행하는 모습

xxd 명령어: 16진수 덤프 생성

xxd는 파일을 16진수 형식으로 덤프하는 도구로, 바이너리 파일의 내용을 분석할 때 유용합니다.

기본 사용법

xxd [옵션] [파일명]

주요 옵션

옵션 설명
-a 자동으로 중복된 줄을 '*'로 축약
-b 2진수(binary) 형식으로 출력
-c [숫자] 한 줄에 표시할 바이트 수 지정 (기본값: 16)
-g [숫자] 그룹당 바이트 수 지정 (기본값: 2)
-i C 언어 형식의 배열로 출력
-l [길이] 처리할 바이트 수 제한
-p 평평한(plain) 16진수 덤프 (공백 없이 연속 출력)
-r 역변환 (16진수 덤프를 원본 바이너리로 변환)
-s [+][-]offset 시작 오프셋 지정

사용 예제

# 파일의 16진수 덤프 생성
xxd example.bin

# 처음 100바이트만 덤프
xxd -l 100 example.bin

# 16진수 덤프를 원본 바이너리로 변환
xxd -r hexdump.txt > recovered.bin

# C 언어 배열 형식으로 출력
xxd -i example.bin > example.h
팁: xxd는 바이너리 파일을 편집할 때도 유용합니다. xxd로 덤프한 내용을 편집한 후 xxd -r로 다시 바이너리로 변환할 수 있습니다.

hexdump 명령어: 다양한 형식의 덤프 생성

hexdump는 파일을 다양한 형식(16진수, 8진수, ASCII 등)으로 덤프할 수 있는 유틸리티입니다.

기본 사용법

hexdump [옵션] [파일명]

주요 옵션

옵션 설명
-b 1바이트 단위 8진수 출력
-c 1바이트 단위 ASCII 문자 출력
-C 표준 16진수+ASCII 출력 (가장 많이 사용)
-d 2바이트 단위 10진수 출력
-n [길이] 처리할 바이트 수 제한
-s [오프셋] 시작 오프셋 지정
-v 중복된 줄도 모두 출력
-e [형식 문자열] 사용자 정의 출력 형식 지정

사용 예제

# 표준 16진수+ASCII 형식으로 덤프
hexdump -C example.bin

# 처음 256바이트만 덤프
hexdump -C -n 256 example.bin

# 512바이트 오프셋부터 덤프 시작
hexdump -C -s 512 example.bin

# 사용자 정의 형식으로 출력
hexdump -e '16/1 "%02X " "\n"' example.bin

hexdump 명령어의 다양한 출력 형식 예시

주의: hexdump와 xxd는 유사한 기능을 제공하지만, 세부적인 옵션과 출력 형식에서 차이가 있습니다. 상황에 맞는 도구를 선택하세요.

strings 명령어: 파일에서 텍스트 문자열 추출

strings는 바이너리 파일에서 읽을 수 있는 문자열(일반적으로 4자 이상의 ASCII 문자열)을 추출하는 도구입니다.

기본 사용법

strings [옵션] [파일명]

주요 옵션

옵션 설명
-a 전체 파일을 스캔 (기본적으로 특정 섹션만 스캔)
-f 각 문자열 앞에 파일명 출력
-n [길이] 최소 문자열 길이 지정 (기본값: 4)
-t [형식] 문자열의 오프셋 출력 (o:8진수, d:10진수, x:16진수)
-e [인코딩] 문자 인코딩 지정 (s:7비트, S:8비트, b:16빅엔디안, l:16리틀엔디안)

사용 예제

# 파일에서 문자열 추출
strings example.bin

# 최소 길이 8자 이상의 문자열만 추출
strings -n 8 example.bin

# 문자열과 함께 16진수 오프셋 출력
strings -t x example.bin

# 여러 파일에서 문자열 추출 (파일명 표시)
strings -f *.bin
활용 사례: strings는 실행 파일에서 하드코딩된 메시지, 라이브러리 경로, 암호화 키 등을 찾을 때 유용합니다. 보안 분석이나 리버스 엔지니어링에서 자주 사용됩니다.

실전 활용 예시

세 명령어를 조합하여 파일을 분석하는 예제:

# 의심스러운 실행 파일 분석
strings -t x suspicious_program > strings_output.txt
xxd suspicious_program > hex_dump.txt
hexdump -C -n 1024 suspicious_program > header_dump.txt

명령어 비교 및 선택 가이드

명령어 주요 용도 장점 단점
xxd 16진수 덤프 생성 및 편집 간단한 역변환(-r) 기능 제공, C 배열 출력 지원 출력 형식이 제한적
hexdump 다양한 형식의 덤프 생성 유연한 출력 형식 지정 가능, 다양한 숫자 형식 지원 사용법이 다소 복잡
strings 파일에서 텍스트 문자열 추출 바이너리 파일에서 텍스트를 쉽게 추출 가능 비텍스트 데이터는 분석 불가

xxd 사용 시나리오

  • 바이너리 파일의 16진수 덤프가 필요할 때
  • 덤프 결과를 편집 후 다시 바이너리로 변환해야 할 때
  • C 소스 코드에 바이너리 데이터를 포함시켜야 할 때

hexdump 사용 시나리오

  • 다양한 형식(16진수, 8진수, 10진수 등)의 덤프가 필요할 때
  • 특정 오프셋의 데이터를 정밀하게 분석해야 할 때
  • 사용자 정의 출력 형식이 필요할 때

strings 사용 시나리오

  • 바이너리 파일에 포함된 텍스트 문자열을 빠르게 확인할 때
  • 실행 파일에서 하드코딩된 문자열을 찾아야 할 때
  • 의심스러운 파일의 내용을 빠르게 스캔할 때

© 2023 리눅스 파일 분석 가이드. 모든 권리 보유.

#xxd, #hexdump, #strings, #리눅스명령어, #파일분석

반응형