바이너리 Hex 에디터 | 파일을 16진수로 보고 편집하기
파일을 드래그 앤 드롭하면 내용을 바이트 단위 16진수(hex dump)로 확인할 수 있습니다. 매직 바이트로 파일의 실제 형식을 확인하고, 바이트를 직접 편집한 뒤 다운로드할 수 있습니다. 파일은 서버로 전송되지 않습니다.
자주 사용되는 파일 시그니처(매직 넘버) 목록
| 형식 | 시작 바이트(16진수) | 오프셋 | 비고 |
|---|---|---|---|
| PNG | 89 50 4E 47 0D 0A 1A 0A | 0 | 이미지 파일. 8바이트가 모두 일치하면 PNG로 거의 확실하게 판정 가능 |
| JPEG | FF D8 FF | 0 | 이미지 파일. 4번째 바이트는 JFIF/Exif 등 변형에 따라 달라짐 |
| GIF | 47 49 46 38 39 61 / 47 49 46 38 37 61 | 0 | ASCII 문자열 "GIF89a" 또는 "GIF87a" |
| 25 50 44 46 2D | 0 | ASCII 문자열 "%PDF-" 뒤에 버전 번호가 이어짐 | |
| ZIP / docx / xlsx / jar | 50 4B 03 04 | 0 | ZIP 형식. Office Open XML 계열 및 여러 압축·아카이브 형식이 내부적으로 ZIP을 사용 |
| Windows 실행 파일(EXE/DLL) | 4D 5A | 0 | ASCII 문자열 "MZ". PE 형식에 남아 있는 MS-DOS 실행 파일 헤더의 흔적 |
| ELF 실행 파일 | 7F 45 4C 46 | 0 | Linux 등에서 사용되는 실행 파일·공유 라이브러리 형식 |
바이너리 Hex 에디터란
모든 파일은 결국 바이트의 나열에 지나지 않습니다. Hex 에디터는 이 내용을 1바이트씩 16진수로 보여 주고, 필요하다면 직접 고쳐 쓸 수 있게 해 주는 도구입니다. 특히 파일 맨 앞의 몇 바이트에는 실제 형식을 알려 주는 매직 바이트가 담긴 경우가 많아, 확장자를 그대로 믿지 않고도 파일의 진짜 정체를 확인할 수 있습니다.
이 도구는 파일을 드롭하거나 16진수를 직접 입력해 불러올 수 있습니다. 보기·편집·다운로드가 모두 브라우저 안에서만 이루어지며 내용이 서버로 전송되는 일은 없습니다. 다만 용량이 큰 파일은 처음 64KB만 처리 대상이 되며, 그 이후 부분은 다운로드 시에도 유지되지 않는 점에 유의해 주세요.
Hex 에디터 사용 방법
- 파일 불러오기 파일을 드롭하거나 16진수 문자열을 직접 붙여넣어 불러옵니다. 공백과 줄바꿈은 무시됩니다.
- 시작 바이트 확인하기 오프셋 0 부근을 위 목록과 대조해 보면 파일의 진짜 형식을 판별할 수 있습니다.
- 바이트 수정하기 16진수 셀을 클릭하면 해당 바이트를 00~FF 값으로 바꿀 수 있으며, ASCII 열도 함께 갱신됩니다.
- 편집 결과 다운로드하기 수정한 내용을 파일로 저장합니다. 원본 파일은 변경되지 않으므로 실험적인 편집도 안전하게 시도할 수 있습니다.
더 잘 활용하기 위한 팁
- 확장자가 바뀐 파일의 정체를 알고 싶다면 파일 앞부분 몇 바이트(매직 바이트)를 위 목록과 대조해 보세요. 확장자는 단순한 자기 신고에 불과하지만, 매직 바이트는 파일 형식 자체에서 비롯되므로 위조하기가 훨씬 어렵습니다.
- 16진수 직접 입력 모드에서는 다른 도구에서 복사한 바이트열(공백 구분·줄바꿈 구분 모두 가능)을 그대로 붙여넣어 불러올 수 있습니다.
- 편집 중 잘못된 셀을 클릭했다면 Esc 키를 눌러 해당 셀의 편집을 취소할 수 있으며, 바이트 값은 변경되지 않습니다.
- 바이너리 프로토콜을 디버깅할 때는 예상되는 바이트열과 실제로 주고받은 바이트열을 이 도구에서 나란히 비교하면 어긋난 부분을 쉽게 찾을 수 있습니다.
Hex 에디터 활용 시나리오
확장자를 위장한 파일 가려내기
시작 바이트를 확인하면 확장자와 실제 형식이 일치하는지 알 수 있어, 의심스러운 첨부파일을 점검할 때 유용합니다.
손상된 파일의 원인 파악하기
바이트열을 보면 헤더가 빠졌는지, 파일이 중간에서 잘렸는지를 판단할 수 있어 복구 가능성을 가늠하는 데 도움이 됩니다.
파일 형식 사양 학습하기
사양 문서와 실제 바이트열을 나란히 대조하며 읽으면 헤더 구조를 구체적으로 이해할 수 있습니다.
테스트용 손상 데이터 만들기
일부 바이트를 의도적으로 고치면 프로그램이 비정상 파일을 만났을 때 어떻게 동작하는지 검증할 수 있습니다.
바이너리 관련 용어
- 바이트
- 8비트를 한 단위로 묶은 것입니다. 16진수로는 00부터 FF까지 두 자리로 표현됩니다.
- 매직 바이트
- 파일 맨 앞에 놓여 형식을 나타내는 고유한 바이트열입니다. 파일 시그니처라고도 부릅니다.
- 오프셋
- 파일 시작점에서부터 몇 번째 바이트인지를 나타내는 위치입니다. 보통 16진수로 표기됩니다.
- 헤더
- 파일 맨 앞에 놓여 형식·크기 등의 정보를 모아 둔 부분입니다.
- ASCII 표시
- 각 바이트를 문자로 해석해 보여 주는 방식으로, 문자열이 담긴 위치를 찾는 데 도움이 됩니다.
- 엔디안
- 여러 바이트로 이루어진 숫자를 어떤 순서로 배열할지 정하는 방식입니다. 형식에 따라 상위 바이트가 먼저 오거나 나중에 옵니다.
자주 묻는 질문
FF D8 FF로 시작한다면 확장자와 무관하게 JPEG 이미지일 가능성이 큽니다.
여담이지만 ― 파일의 진짜 정체는 확장자가 아니라 바이트에 담겨 있다
Windows의 파일 확장자는 운영체제에 "이 파일을 어떤 앱으로 열 것인가"를 알려주는 힌트일 뿐, 파일의 실제 내용과는 독립된 문자열입니다. 그래서 `사진.jpg`를 `메모.txt`로 바꾼다고 해서 텍스트가 되지는 않으며, 반대로 진짜 이미지 파일의 확장자를 지워도 데이터 자체는 여전히 이미지로 남아 있습니다. 이처럼 확장자가 본질적으로 "자기 신고"에 불과하다는 점을 악용해, 실행 파일을 이미지나 문서로 위장하는 악성코드 수법은 오래전부터 알려져 있습니다.
이에 대응하기 위해 대부분의 파일 형식은 앞부분 몇 바이트에 고유 식별자(매직 바이트, 매직 넘버라고도 함)를 심어 두는 방식으로 설계되어 있습니다. 예를 들어 PNG는 사양에 따라 항상 `89 50 4E 47 0D 0A 1A 0A`라는 정확한 8바이트로 시작합니다. 즉 운영체제나 애플리케이션은 파일 이름이 아니라 실제 내용을 확인해야만 비로소 "이것이 정말 PNG인가"를 판단할 수 있습니다. 유닉스 계열의 `file` 명령어나 브라우저의 MIME 타입 판정 역시 확장자가 아니라 이러한 매직 바이트 대조를 주된 근거로 삼습니다.
매직 바이트의 설계에는 역사적인 재치도 엿보입니다. 예를 들어 PNG의 8바이트에는 의도적으로 줄바꿈 코드(0D 0A)가 포함되어 있는데, 이는 텍스트 모드로 파일이 전송될 때 줄바꿈 코드가 변환되어 손상되지는 않았는지 감지하기 위한 장치입니다. 단순한 식별자에 그치지 않고 전송 과정의 손상 감지까지 겸하도록 설계된 점에서 바이너리 포맷 설계의 깊이를 엿볼 수 있습니다.