♧ file 명령을 이용해서 파일 내용, 종류를 조사.
일반적으로 파일 종류를 알기 위해 확장자를 정해 두고 그 종류를 추측하는 방법을 사용하지만,
file 명령은 파일 내용을 읽어 특징적인 데이터(시그니처)를 찾아 그 종류를 결정.
[ 일반적인 file 명령 ] |
$ file /usr/bin/file /usr/bin/file: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped |
[ -i옵션 : MIME 미디어 타입 문자열로 표시 ] |
$ file -i /usr/bin/file /usr/bin/file: application/x-executable; charset=binary |
[ file명령이 파일 종류를 판별 하는 순서] |
① 디바이스, 디렉토리, 심볼릭 링크 등의 스페셜 파일 체크 |
위의 어떤 경우에도 해당하지 않으면 단순 바이너리 파일로 판단. |
[ magic 데이터베이스에는 시그니처 정보가 기록 ] |
||||
♧ magic 파일 경로 ⊙ /etc/magic
♧ magic 파일 내용 ( ※ 현재 집에 설치되어 있는 "Ubuntu 10.04.2 LTS"로 테스트)
♧ magic 파일의 엔트리는 4개의 필드로 구성
⊙ 여기서 레벨은 오프셋 값의 앞에 적힌 '>'을 의미. '>4'이라고 적혀 있으면, 다시 처음부터 4바이트 떨어진 위치를 읽고 비교. ⊙ 같은 수의 '>'가 나열되어 잇는 경우. 같은 방식으로 이전 레벨로부터의 오프셋 값에 해당 하는 내용을 보고 진행 ⊙ '일치한 엔트리 앞에 '>'가 하나 더 많은('>>') 엔트리가 있으면 계속해서 그 엔트리에 대한 일치처리. |
[ 앞서 살펴본 elf파일에 대한 file 명령 자신을 판별하는 순서. ] |
① 0 string \177ELF ELF 파일의 처음부터 0바이트 떨어진 위치의 문자열이 "\177ELF"와 일치하는지 확인. → 일치하므로 "ELF"라고 표시 ② >4 byte 0 invalid calss 처음부터 4바이트 떨어진 위치의 1바이트가 1임을 확인. → 일치하지 않으므로 다음 행으로 이동. ③ >4 byte 1 32-bit 처음부터 4바이트 떨어진 위치의 1바이트가 1임을 확인. → 일치하므로 "32-bit"라고 표시 ④ 이후 당분간 일치하지 않으므로 계속 진행. ⑤ >5 byte 1 LSB 처음에서부터 5바이트 떨어진 위치의 1바이트가 1임을 확인. → 일치하므로 "LSB"라고 표시. ⑥ 이 과정을 끝까지 반복. |
[ 정리 ]
file 명령을 사용하면 파일 내용으로부터 파일 종류를 판별할 수 있다.
또한 새로운 파일 형식이 생겨나도 그 파일의 고유한 시그니처를 알면
magic 파일에 엔트리를 추가하여 그 파일을 인식할 수 있도록 되어 있다.
(※ 자세한 내용은 man magic 참조)
'컴퓨터 서적 정리 > Binary Hacks' 카테고리의 다른 글
[Hack #6] 정적 라이브러리와 공유 라이브러리 (1) | 2011.07.02 |
---|---|
[Hack #5] Object file - ELF 파일 (0) | 2011.07.01 |
[Hack #4] od - 바이너리 파일 덤프 (0) | 2011.06.29 |
[Hack #2] Binary Hack 용어 정리 (1) | 2011.06.29 |
[책소개] Binary Hacks (0) | 2011.06.29 |