Mbox 보관 파일 뷰어
mbox 파일은 메시지를 그냥 이어 붙인 것이고, 각 메시지 앞에는 "From "으로 시작해 발신자와 asctime 형식 날짜가 붙은 줄 하나가 있을 뿐입니다. 길이 필드도 종료 표시도 없기 때문에 메시지의 끝을 알려 주는 것은 어떤 본문이든 담을 수 있는 평범한 한 줄뿐이고, mbox를 읽는 진짜 어려움은 MIME이 아니라 바로 여기에 있습니다. 작성기는 그런 줄을 이스케이프해야 하지만 방식이 제각각입니다. mboxo는 정확히 "From "으로 시작하는 줄만, mboxrd는 ">*From "까지 이스케이프해서 ">From "이 "From "으로 되돌아가게 하고, mboxcl과 mboxcl2는 아예 이스케이프하지 않고 Content-Length 헤더로 본문 길이를 적습니다. 이 뷰어는 눈앞의 파일이 셋 중 어느 쪽인지 판정합니다. 모든 메시지의 Content-Length가 다음 구분선에 정확히 맞는지, mboxrd 작성기만 만드는 ">>From " 줄이 있는지를 보고 그 방식대로 나눈 뒤, 다른 방식을 따르는 리더라면 경계를 몇 군데 다르게 그었을지도 알려 줍니다. 마지막 숫자가 핵심입니다. 보관 파일이 조용히 메일을 잃는 방식이 바로 그것이기 때문입니다. 헤더가 하나도 없는 메시지는 누군가의 본문에서 새어 나온 "From " 줄이고, 그 순간 보관 파일은 메시지 하나를 얻고 진짜 메시지는 뒷부분을 잃습니다. 메시지마다 파일 안에서의 바이트 오프셋과 길이, From_ 줄의 발신자와 날짜를 쓰여 있는 그대로, 그리고 실제로 찾게 되는 헤더(From, To, Cc, Subject, Date, Message-ID, In-Reply-To, References, Content-Type)를 RFC 2047 인코딩 워드까지 디코딩해 보여 줍니다. 멀티바이트 문자 하나가 인접한 두 인코딩 워드에 걸쳐 잘린 경우도 처리하는데, 대부분의 뷰어가 여기서 글자를 깨뜨립니다. MIME 트리는 파트별 유형과 전송 인코딩, RFC 2231 연속 파라미터까지 반영한 파일 이름, 디코딩된 크기를 나열하고 첨부 개수를 셉니다. 컬렉션 전체로는 메시지 수와 총 크기, 날짜 범위, 주요 발신자, In-Reply-To와 References로 만든 스레드 구조, 병합이 잘못됐을 때 나타나는 중복 Message-ID, 그리고 Message-ID가 아예 없는 메시지를 보고합니다. 메일 클라이언트는 아닙니다. HTML 파트는 렌더링하지 않고 소스로 보여 주며, 첨부 추출이나 DKIM 검증, S/MIME 복호화도 하지 않습니다. 한 통을 깊이 보려면 EML 뷰어가 맞고, 이 도구는 그 한 통을 둘러싼 보관 파일을 봅니다.
사용법
- .mbox 파일을 상자에 놓습니다. 업로드는 없고 이 탭에서 읽으므로 수 기가바이트짜리 Takeout 내보내기도 기기 성능만큼은 다룹니다.
- 먼저 방식 줄을 읽습니다. 본문을 이스케이프하는 방식(mboxo/mboxrd)인지 Content-Length로 길이를 적는 방식(mboxcl)인지와 그 판단 근거를 알려 줍니다.
- 진단 항목을 확인합니다. 헤더를 전혀 읽을 수 없는 메시지는 진짜 메시지를 둘로 쪼갠 이스케이프 누락이고, 다른 방식이라면 그었을 경계 수는 보관 파일이 얼마나 위태로운지를 말해 줍니다.
- 표에서 오프셋과 길이를 봅니다. 올린 파일 안의 바이트 위치라서 dd나 헥스 편집기로 해당 메시지만 잘라 내 따로 검증할 수 있습니다.
- 행 번호를 누르면 메시지 하나가 열립니다. From_ 줄과 디코딩된 헤더, 파트별 인코딩·파일 이름·디코딩 크기가 담긴 MIME 트리를 볼 수 있습니다.
자주 묻는 질문
- 받은 적도 없는 메시지가 왜 더 많이 나오나요?
- 누군가의 본문에 "From "으로 시작하는 줄이 있었는데 파일을 쓴 프로그램이 그것을 이스케이프하지 않았기 때문입니다. 리더 입장에서는 진짜 구분선과 구별할 방법이 없습니다. 둘 다 줄 맨 앞에서 "From "으로 시작하는 한 줄일 뿐입니다. 결과적으로 한 통이 둘로 쪼개지고, 뒷조각은 헤더가 하나도 없는 "메시지"가 되며 앞조각은 뒷부분을 잃습니다. 이 도구는 정확히 그 경우를 표시합니다. 헤더 블록이 빈 메시지는 진짜 메시지인 경우가 거의 없습니다. 해결은 쓰는 쪽에서 해야 하며 mboxrd 이스케이프나 Content-Length는 이를 막지만 순수한 mboxo는 대체로 막지 못합니다.
- mboxo, mboxrd, mboxcl, mboxcl2는 실제로 무엇이 다른가요?
- 메시지의 끝을 어떻게 지키는지만 다릅니다. mboxo는 정확히 "From "으로 시작하는 본문 줄 앞에 ">"를 붙이는데, 이스케이프인지 원래 인용된 줄인지 구별할 수 없어 손실이 있습니다. mboxrd는 ">*From "에 해당하는 모든 줄 앞에 ">"를 붙여서 ">From "은 "From "에서, ">>From "은 ">From "에서 왔음을 보장하므로 되돌릴 수 있습니다. mboxcl은 본문을 그대로 두고 본문 바이트 수를 Content-Length 헤더에 적으며, mboxcl2는 같은 방식이되 원래 인코딩 그대로 저장하고 어디에도 이스케이프를 넣지 않습니다. 분할 자체는 mboxo와 mboxrd가 동일하고 리더가 무엇을 되돌려야 하는지만 다릅니다. 그래서 이 도구는 Content-Length 파일에서만 경계가 달라진다고 보고합니다.
- 메시지 길이가 왜 가끔 1바이트 짧게 나오나요?
- 두 메시지 사이의 빈 줄은 어느 쪽에도 속하지 않습니다. 그것을 앞 메시지에 포함시키면 모든 본문 끝에 불필요한 줄바꿈이 하나씩 생기므로 고전적인 구현들은 그 줄을 떼어 냅니다. 단, 그 빈 줄이 LF 하나일 때만 그렇습니다. CRLF로 쓰인 파일의 빈 줄은 2바이트라서 이 규칙이 인식하지 못하고 앞 메시지에 붙은 채 남습니다. 이 도구는 조용히 개선하는 대신 그 동작을 그대로 재현하므로, 같은 파일에 대해 참조 구현이 보고하는 오프셋과 길이가 서로 맞습니다.
- 제목이 원본 파일과 다르게 보이는 이유는 무엇인가요?
- 헤더는 ASCII만 담을 수 있어서 나머지는 =?UTF-8?B?SGVsbG8=?= 나 =?ISO-8859-1?Q?Caf=E9?= 같은 RFC 2047 인코딩 워드로 감쌉니다. 이 뷰어는 그것을 디코딩하고, 문자 집합이 같은 인접 인코딩 워드는 바이트를 먼저 이어 붙인 뒤 디코딩합니다. 두 번째 단계가 생각보다 중요합니다. 인코더가 멀티바이트 문자 하나를 두 워드에 걸쳐 자를 수 있는데, 워드를 따로 디코딩하면 그 글자가 대체 문자로 바뀌기 때문입니다. 알 수 없는 문자 집합 이름(오타나 사설 x- 이름)도 치명적이지 않습니다. UTF-8로 디코딩하며 ASCII 범위는 정확하고 정말 읽을 수 없는 부분만 표시됩니다.
- HTML 파트를 왜 렌더링하지 않고 소스로 보여 주나요?
- 보관 파일은 신뢰할 수 없는 입력이기 때문입니다. HTML 본문을 이 페이지 안에서 렌더링하면 그 마크업과 스타일이 주변 페이지에 작용하고, 참조된 원격 이미지와 배경, 글꼴은 발신자가 정한 곳에서 내려받게 됩니다. 추적 픽셀이 주소가 살아 있음을 확인하는 방식이자, 웹메일 보관 파일에 저장된 XSS 페이로드가 브라우저를 만나는 방식이 바로 그것입니다. 소스로 보면 서식만 잃을 뿐 본문과 링크, 구조는 모두 그대로이고, 파트의 디코딩 크기를 보면 예쁜 쪽에 실제 내용이 있었는지도 알 수 있습니다.
- 중복 Message-ID와 Message-ID 없는 메시지는 얼마나 걱정해야 하나요?
- Message-ID는 전역적으로 고유해야 하고 메시지를 처음 처리한 시스템이 한 번만 붙입니다. 한 파일에 같은 ID가 두 번 있다면 보통 같은 메시지의 사본 둘이 합쳐진 것입니다. 백업과 실사용 폴더에서, 또는 둘 다 그 메시지를 담고 있던 폴더에서 온 경우죠. ID 기준 중복 제거는 대체로 안전하지만 바이트 길이를 먼저 확인하세요. 메일링 리스트를 거친 사본은 꼬리말이 다릅니다. Message-ID가 없는 경우는 성격이 다릅니다. 초안이나 일부 자동 발신, 스크립트가 조립한 메시지는 애초에 ID가 없었습니다. 스레드로 묶을 수도 중복 제거를 할 수도 없으니, 그 수는 ID로 동작하는 모든 도구에 보관 파일의 얼마가 보이지 않는지를 알려 줍니다.
관련 도구
EML 파일 뷰어
`.eml` 파일 드롭 → 파싱된 메시지 읽기 — 주요 헤더·plain-text/HTML 본문 파트·첨부 리스트 — 전부 브라우저 내.
Java .properties 파서
java.util.Properties.load와 똑같이 .properties 파일을 파싱하고, 구분자·이스케이프·이어붙이기에서 놀랄 만한 줄을 짚어 줍니다.
vCard (.vcf) 파일 파서/검사기
vCard 2.1·3.0·4.0 .vcf 내보내기 파일을 드롭하거나 붙여넣으면 모든 연락처를 카드 형태로 표시 ─ 이름·전화·이메일·주소·소속·URL·생일·메모·내장 사진·X- 사용자 정의 필드 모두 브라우저에서 로컬 파싱.
ZIP 내용 보기
ZIP 파일을 드롭하면 내부 파일을 풀지 않고도 목록·크기·미리보기·개별 내려받기까지 가능합니다.
ELF 바이너리 검사기
리눅스 실행 파일·.so·.o를 브라우저에서 엽니다. 아키텍처, 필요한 공유 라이브러리, 빌드 ID, PIE·NX·RELRO 적용 여부까지.
HAR 파일 인스펙터 (HTTP Archive 뷰어)
Chrome / Firefox / Safari DevTools에서 export 한 .har 파일을 드롭하면 모든 요청 — 메소드, 상태, 크기, 시간, 콘텐츠 타입 — 을 즉시 표시. 통계, 가장 느린·가장 큰 표, 필터·정렬 가능한 엔트리. 모두 브라우저 내에서 처리.