- 1994년형 Apple PowerBook Duo 280c에 남은 짧은 오디오 녹음을 보존해야 했지만, 오디오 출력·플로피·네트워크·디스크 어댑터가 모두 막혀 팩스 전송이 우회 경로가 됨
- ResEdit의 헥스 에디터로 오디오 파일을 16진수 텍스트로 열고, Microsoft Word에 붙여 넣은 뒤 프린트 대화상자의 팩스 기능으로 보냄
- 수신은 Windows XP가 설치된 ThinkPad T60의 내장 모뎀과 팩스 앱이 맡았고, 두 노트북을 직접 전화선으로 잇는 대신 9V 배터리 기반 전화선 시뮬레이터 회로가 필요했음
- TIF 팩스 이미지를 OCR로 되돌리는 방식은 0/C, 9/4, 0/D 오인식과 누락·삽입 오류 때문에 오디오에 크랙링과 팝 노이즈를 남김
- 결국 고정폭 글자 격자를 직접 분석하는 FaxToBinary 도구를 만들어 문자 패턴을 수동 학습시켰고, 원본과 바이트 단위로 일치하는 오디오 파일을 복구함
막혀 있던 복사 경로
- 대상 기기는 1994년형 PowerBook Duo 280c였고, 내부에는 보존하려는 짧은 오디오 녹음 몇 개가 들어 있었음
- 다행히 노트북은 아직 부팅됐고, 하드드라이브를 살짝 두드리면 회전했으며, 오디오 파일은 내부 스피커로 재생 가능했음
- 일반적인 복사 방법은 하나씩 막혔음
- 오디오 잭이 없어 좋은 품질의 아날로그 복사가 어려웠음
- 내부 하드드라이브는 특이한 커넥터의 SCSI를 사용했고, 최신 시스템에서 오래된 HFS 파일 시스템을 쉽게 읽을 수 있을지도 불확실했음
- 외장 플로피 드라이브를 연결하면 컴퓨터가 동작하지 않았고, 고장 원인도 찾지 못했음
- AppleTalk 포트와 전화 잭은 있었지만 네트워킹 소프트웨어가 설치되어 있지 않았음
- HTTP는 1996년에야 확정됐고, 해당 노트북에는 당시 사용 가능했을 전화 접속용 소프트웨어도 없었음
- 대신 전화 다이얼러와 팩스 소프트웨어가 남아 있어 모뎀을 이용한 우회가 가능해짐
파일을 팩스 문서로 바꾸기
- 노트북에는 게임들과 함께 리소스 편집기 ResEdit가 설치되어 있었고, 이 도구의 헥스 에디터로 파일의 원시 내용을 16진수로 볼 수 있었음
- ResEdit는 출력 기능을 지원하지 않아, 16진수 텍스트를 다른 앱으로 옮겨야 했음
- 예시 오디오 파일은 37,928바이트였고, 각 바이트가 두 글자의 16진수로 표시되므로 텍스트 표현은 그 두 배 길이가 됨
- 한 번에 다룰 수 있는 크기에 제한이 있어 파일을 나누어 복사했고, 오프셋을 기억하기 쉬운 12288바이트, 즉 0x3000 단위로 처리함
- 클립보드로 복사한 16진수 텍스트는 Microsoft Word 문서에 그대로 붙여 넣을 수 있었고, Word는 출력 기능을 제공했음
- 파일들은 모두 100KB 미만이었고, ResEdit에서 Word로 클립보드를 통해 수동 복사하는 속도는 평균 약 316바이트/초로 추정됨
두 노트북 사이에 모의 전화선 만들기
- 수신용 컴퓨터는 내장 전화 접속 모뎀이 있는 ThinkPad T60이었고, Windows XP의 팩스 앱은 들어오는 팩스를 다중 페이지 TIF 이미지로 저장할 수 있었음
- 두 노트북을 전화 케이블로 직접 연결하는 방식은 실패함
- PowerBook은 전화를 걸었지만 ThinkPad가 받지 않았음
- “Ignore Dial Tone” 옵션도 효과가 없었음
- 실제 유선 전화망이 제공하는 전압이 모뎀 동작에 중요했고, 이 문제는 phone line simulator circuit로 해결함
- 이 회로는 흔한 전자 부품과 9V 배터리로 만들 수 있었고, 두 노트북 사이에 모의 전화선을 제공함
- 팩스 전송에는 FCC 요구로 커버 페이지가 필요했고, 커버 페이지를 추가한 뒤 전송이 진행됨
- 처음에는 래스터라이즈 후 전송 시간이 24분으로 예상됐지만, 글꼴 크기를 줄여 6페이지·7분으로 단축했고, 팩스는 14400bps로 ThinkPad에 수신됨
OCR로는 남는 오류
- ThinkPad가 받은 팩스는 TIF 이미지였고, 이를 다시 바이너리 파일로 바꾸기 위해 먼저 PDF 변환과 OCR을 시도함
- 팩스 이미지는 OCR에 유리해 보였음
- 텍스트가 컴퓨터로 생성되어 정렬과 형태가 일정했음
- 사용 문자는 0-9와 A-F의 16종류뿐이었음
- Courier라는 흔한 고정폭 글꼴을 사용했음
- OCR 결과 텍스트를 선택해 헥스 에디터에 복사하고 바이너리 파일로 저장할 수 있었음
- Audacity는 결과 파일의 오디오 형식을 unsigned 8-bit PCM, little-endian, 22050Hz, mono로 추정했고 파형도 표시함
- 재생은 대체로 괜찮았지만, 파형의 갑작스러운 딥이 OCR 전사 오류로 인한 크랙링 또는 팝 노이즈로 들렸음
- 여러 OCR 프로그램과 글꼴 크기·글꼴 변경을 시도해도 100% 정확도에는 도달하지 못함
- 0과 C, 9와 4, 0과 D를 혼동함
- 문자를 누락하거나 새 문자를 삽입하는 경우도 있었음
FaxToBinary로 바이트 단위 복구
- 팩스 이미지의 텍스트가 고정폭 글꼴로 생성됐기 때문에, 전체 문서를 일정한 간격의 문자 격자로 취급할 수 있었음
- 시작점, 문자 오프셋, 줄 간격을 맞추면 각 문자를 개별적으로 캡처하고 분석 가능했음
- 자체 도구는 왼쪽 미리보기로 크기와 오프셋 파라미터가 맞는지 확인하게 했고, 문자를 이동하거나 줄을 바꿔도 드리프트가 없으면 처리를 시작할 수 있었음
- 문자 인식은 단순한 수동 학습 방식으로 동작함
- 처음 보는 고유 패턴마다 사용자가 해당 문자가 무엇인지 지정함
- 이후 같은 모양의 문자를 만나면 이전 답을 기억해 재사용함
- 도구 소스는 FaxToBinary.zip으로 제공됨
- 약간의 수동 학습 뒤 도구가 파일을 출력했고, 오디오는 팝 노이즈 없이 부드럽게 재생됐으며 원본과 바이트 단위로 일치하는 복사본이 됨
- 파일 복구 뒤에는 해당 PowerBook에서 DOOM도 실행됨