나는 file
wallet.dat 파일(비트코인이 개인 키를 저장하는 파일)을 실행하고 있으며 인식할 수 있는 헤더나 문자열이 없는 것 같지만 file
16으로 줄여도 Berkley DB 파일이라는 것을 알 수 있습니다. 바이트 .
나는 그 파일이 어떤 종류의 규칙을 적용하고 있거나 그것을 식별하기 위해 어떤 시퀀스를 검색하고 있다는 것을 알고 있습니다. 내 프로그램에서 이를 복제할 수 있도록 여기에 어떤 규칙이 적용되는지 알고 싶습니다.
답변1
파일 명령의 소스를 가져옵니다. 모든 유닉스는 아니더라도 대부분 오픈 소스를 사용합니다.이것. 이 file
명령은 magic
데이터베이스와 함께 제공됩니다.매직넘버그것이 설명하는 것. (이 데이터베이스는 라이브 시스템에도 설치되지만 컴파일된 형식입니다.) 표시되는 설명 텍스트가 포함된 파일을 찾습니다.
grep 'Berkeley DB' magic/Magdir/*
이것magic
매뉴얼 페이지파일의 형식을 설명합니다. "Berkeley DB"의 트리거 라인은 다음과 같습니다.
0 long 0x00061561 Berkeley DB
0 belong 0x00061561 Berkeley DB
12 long 0x00061561 Berkeley DB
12 belong 0x00061561 Berkeley DB
12 lelong 0x00061561 Berkeley DB
12 long 0x00053162 Berkeley DB
12 belong 0x00053162 Berkeley DB
12 lelong 0x00053162 Berkeley DB
12 long 0x00042253 Berkeley DB
12 belong 0x00042253 Berkeley DB
12 lelong 0x00042253 Berkeley DB
12 long 0x00040988 Berkeley DB
12 belong 0x00040988 Berkeley DB
12 lelong 0x00040988 Berkeley DB
첫 번째 열은 특정 바이트 시퀀스를 찾을 오프셋을 지정합니다. 세 번째 열에는 바이트 시퀀스가 포함됩니다. 두 번째 열은 바이트 시퀀스 유형을 설명합니다. long
4바이트는 플랫폼을 나타냅니다.바이트 순서; lelong
및 belong
4바이트는 각각 리틀 엔디안 및 빅 엔디안 순서를 나타냅니다.
규칙을 복사하는 대신 유틸리티를 호출할 수 있습니다 file
.POSIX에 의해 지정됨, 그러나 인식하는 형식과 출력 설명은 그렇지 않습니다. 또는 또는 함수를 연결하여 libmagic
호출 할 수 있습니다 .magic_file
magic_buffer
답변2
당신은 할 수 있습니다:
file
프로그램에서 실행file
프로그래밍 언어에 대한 기능을 제공하는 라이브러리를 사용하십시오. 예를 들어libmagic
C, pythonFile::Libmagic
등File::MMagic
의 경우입니다 .perl
python-magic
그런데 파일을 식별하는 데 사용되는 정의는 file
에서 찾을 수 있습니다 /etc/magic
. man 5 magic
파일 형식에 대한 자세한 내용은 참고자료를 참조하세요.