리눅스 파일 분석 마스터
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 사용 시나리오
- 바이너리 파일에 포함된 텍스트 문자열을 빠르게 확인할 때
- 실행 파일에서 하드코딩된 문자열을 찾아야 할 때
- 의심스러운 파일의 내용을 빠르게 스캔할 때
반응형
'개발 > Linux' 카테고리의 다른 글
리눅스 파일 보기 명령어: bzcat, xzcat, head (0) | 2025.04.21 |
---|---|
리눅스 압축 파일 내용 보기 명령어: zcat, zless, zmore 완벽 가이드 (0) | 2025.04.20 |
파일 보기 명령어: view, nl, od - 리눅스 파일 내용 확인의 다양한 방법 (0) | 2025.04.20 |
리눅스 파일 보기 명령어: head, tail, tail -f 활용 가이드 (0) | 2025.04.19 |
리눅스 파일 보기 명령어: cat, less, more 완벽 가이드 (0) | 2025.04.19 |