Hexter

Mac에서 바이너리 파일을 여는 방법과 읽는 방법

쓸모 있는 확장자가 없거나 macOS가 인식하지 못하는 파일이 있습니다. .bin, 펌웨어 덤프, 오래된 게임 세이브, 어떤 기기가 내보낸 무언가 같은 것들입니다. 더블 클릭하면 아무 일도 없거나, TextEdit에서 깨진 문자의 벽으로 열립니다. 여러분은 짐작에 기대지 않고, 파일 자체를 위험에 빠뜨리지 않으면서 Mac에서 바이너리 파일을 여는 방법을 알고 싶어 합니다.

더블 클릭이 안 되는 이유

macOS는 확장자를 기준으로, 그게 안 되면 타입을 추측해 파일을 어떻게 열지 결정합니다. 바이너리 파일, 즉 텍스트가 아니라 원시 데이터를 저장하는 파일에는 시스템이 인식하는 표준 확장자가 없으므로, macOS는 열기를 거부하거나 가장 가깝다고 여기는 앱에 넘깁니다. 보통 그게 TextEdit인데, TextEdit는 바이트를 텍스트로 디코딩하려 하다가 대부분 읽을 수 없는 기호에 이따금 진짜 단어가 삐져나오는 모습을 보여줍니다.

잡음 속에 읽을 수 있는 단어가 섞여 보이는 그 효과는 착각이 아닙니다. 바이너리 파일에는 주변 데이터가 정말로 바이너리인데도 임베드된 텍스트(파일 경로, 라벨, 버전 문자열)가 종종 들어 있습니다. TextEdit는 그 전부를 텍스트로 렌더링하는데, 그래서 절반은 깨지고 절반은 익숙한 모습이 나옵니다. 실제로 쓸모 있는 무언가를 보여주는 게 아니며, 실수로 TextEdit에서 저장하면 파일을 손상시킬 수 있습니다.

실제로 필요한 것: 16진수 뷰

바이너리 파일은 그저 바이트의 나열이고, 각 바이트는 0부터 255까지의 숫자입니다. 그것을 안전하게 들여다보는 표준적인 방법이 16진수 뷰입니다. 각 바이트를 두 글자짜리 16진수 값(00부터 FF)으로 표시하고, 오프셋 열(파일에서 지금 어디인지)과 텍스트 열(같은 바이트를 ASCII로 해석한 것, 읽을 수 있는 부분에 한해) 옆에 줄지어 배열합니다. 그것이 바로 16진수 편집기가 제공하는 것이며, 포맷을 짐작하지 않고 실제 내용을 보여주는 유일한 뷰입니다.

거기 도달하는 세 가지 방법

터미널에서 xxdhexdump 사용. macOS에는 둘 다 들어 있습니다. xxd yourfile.bin | less를 실행하면 Terminal 안에서 스크롤 가능한 16진수 덤프를 얻습니다. 빠르고 언제나 쓸 수 있지만, 읽기 전용이고 검색도, 오프셋 이동도, 원시 16진수 이상의 해석도 없습니다. 잠깐 훑어보기에는 괜찮지만 그 이상은 불편합니다.

TextEdit나 다른 텍스트 편집기. 하지 마세요. 앞서 말했듯 바이트를 텍스트로 디코딩하는데, 이는 바이너리 데이터에는 잘못된 렌즈이며, 저장되기라도 하면 파일을 조용히 손상시킬 실제 위험이 있습니다.

전용 16진수 편집기. 5초짜리 훑어보기 이상을 한다면 이것이 올바른 도구입니다. 큰 파일을 스크롤하고, 특정 바이트 패턴을 검색하고, 알려진 오프셋으로 이동하고, 어떤 바이트 덩어리가 실제로 무엇을 나타내는지(숫자, 날짜, 색, 다른 인코딩의 문자열) 확인하는 작업 말입니다. Hexter는 바로 이를 위해 만들어졌습니다. 모든 파일을 기본적으로 읽기 전용으로 열기 때문에, 낯선 바이너리 파일을 들여다봐도 그것을 바꿀 위험이 없습니다. Hexter는 파일 전체를 메모리에 불러오지 않고 필요할 때 바이트를 읽으므로, 크기와 상관없이 파일이 즉시 열립니다.

단계별로

  1. 파일을 엽니다. Hexter로 드래그하거나 파일 > 열기를 사용하세요. 파일 타입을 먼저 짐작할 필요가 없습니다. Hexter는 무엇이든 원시 바이트로 엽니다.
  2. 배치를 읽습니다. 왼쪽 오프셋 열은 파일에서 지금 어디인지 알려줍니다. 가운데 16진수 그리드는 각 바이트를 두 개의 16진수 문자로 보여줍니다. 오른쪽 텍스트 창은 같은 바이트를 ASCII로 보여주는데, 파일에서 실제 텍스트인 부분에 한합니다.
  3. 특정 오프셋으로 이동하려면, 어디를 봐야 할지 이미 안다면 스크롤하지 말고 ⌘J를 사용하세요.
  4. 바이트를 선택해 검사합니다. 범위를 선택하면 그 데이터를 여러 숫자 타입(8, 16, 32, 64비트 정수, 부호 있음 또는 없음, 두 가지 바이트 순서 중 하나)으로 해석한 결과를 인스펙터 사이드바에서 보여줍니다. 네 바이트가 파일 크기인지, 타임스탬프인지, 아니면 다른 무엇인지 알아내는 방법이 이것입니다.
  5. 검색은, 수동으로 스크롤하는 대신 특정 문자열이나 바이트 시퀀스를 찾을 때 ⌘F로 하세요.
  6. 정말로 무언가를 바꿔야 할 때만 편집을 켜세요. Hexter는 편집을 명시적으로 켜기 전까지 파일을 읽기 전용으로 유지하며, 그때조차 변경 내용은 저장을 선택하기 전까지 되돌릴 수 있는 패치 레이어에 담깁니다. 그냥 들여다보는 동안 하는 어떤 일도 원본 파일에 닿을 수 없습니다.

만약 그 파일이 Hexter가 구조적으로 인식하는 포맷(PNG, ZIP, Mach-O, WAV, SQLite)으로 밝혀지면, 분석 탭이 실제 구조(청크 경계, 헤더, 필드)를 원시 바이트와 함께 파싱해 주므로, 단순한 16진수 이상을 얻게 됩니다.

이것이 전체 작업 흐름입니다. 열고, 세 개의 열을 읽고, 필요한 곳으로 이동하거나 검색하고, 특정 바이트 구간이 실제로 무엇을 의미하는지 알아야 할 때 선택 항목을 검사합니다. 짐작할 것이 없고, 여러분이 그러라고 하기 전까지는 위험에 처하는 것이 아무것도 없습니다.