HxD와 함께한 며칠간의 삽질 기록: 데이터의 바다에서 빨간 글씨를 쫓다
무식하면 몸이 고생한다더니, 첫 시작부터 삐걱거림
업무를 하다 보면 가끔 정체를 알 수 없는 바이너리 파일이나 깨진 로그 파일을 들여다봐야 할 때가 있습니다. 이번에도 그랬죠. 약 4GB 정도 되는 대용량 데이터 파일인데, 특정 섹션의 헤더가 꼬였는지 일반적인 프로그램으로는 아예 읽히지도 않았습니다. 처음에는 그냥 평소 쓰던 텍스트 에디터로 어떻게든 해보려고 했습니다. ‘설마 텍스트 에디터가 죽기야 하겠어?’라는 안일한 생각이었죠. 결과는 처참했습니다. 프로그램은 응답 없음 상태로 뻗어버렸고, 제 컴퓨터 팬은 비명을 지르더군요. 아, 이건 텍스트의 영역이 아니구나. 그때서야 정신을 차리고 ‘가벼운 헥스 에디터’를 검색하기 시작했습니다.
그렇게 HxD를 만났습니다. 처음 실행했을 때의 그 군더더기 없는 인터페이스가 사실 조금 불안하기도 했습니다. 너무 단순해 보였거든요. 하지만 파일을 드래그해서 넣는 순간, 제 걱정은 기우였다는 걸 깨달았습니다. 그 무거운 4GB 파일을 마치 1KB짜리 메모장 파일 열듯 순식간에 띄워버리더군요. ‘오, 이거 물건인데?’ 싶었습니다. 화면 가득 메운 16진수 데이터들을 보니 뭔가 전문가가 된 기분도 들고, 금방 해결할 수 있을 것 같은 근거 없는 자신감이 솟구쳤습니다. 하지만 그건 정말 아주 잠깐의 착각이었을 뿐입니다.
첫 번째 실패: 오프셋의 미로와 권한의 장벽
가장 먼저 하려고 했던 건 특정 위치의 값을 강제로 수정하는 것이었습니다. 문서상으로는 ‘0x1A0’ 위치에 데이터 타입 정의가 있어야 하는데, 막상 HxD로 열어보니 그 자리에 00만 가득하더군요. ‘아, 여기서부터 꼬였구나’ 판단했습니다. 저는 곧바로 옆에 있는 정상적인 파일의 헤더 값을 복사해서 붙여넣기로 마음먹었습니다. HxD는 16진수 입력뿐만 아니라 10진수 모드도 지원해서 편하긴 하더군요. 그런데 여기서 첫 번째 막다른 길에 부딪혔습니다.
값을 수정하고 저장하려고 하니 ‘액세스가 거부되었습니다’라는 팝업이 뜨더군요. 파일이 읽기 전용도 아니었는데 말이죠. 한참을 멍하니 있다가 깨달았습니다. 제가 이 파일을 시스템 드라이브 하위 폴더에 두고 작업하고 있었고, HxD를 관리자 권한으로 실행하지 않았던 겁니다. ‘이런 기초적인 실수를…’ 혼자 중얼거리며 프로그램을 껐다 켰습니다. 그런데 다시 열어보니 제가 찾았던 오프셋 위치가 어디였는지 까먹었습니다. HxD는 마지막 작업 위치를 자동으로 기억해주지 않더군요(아니면 제가 설정을 못 찾은 걸까요). 다시 그 방대한 16진수의 바다에서 0x1A0을 찾아 헤매야 했습니다. 겨우 위치를 찾아 값을 넣고 저장을 눌렀는데, 이번엔 파일 크기가 변했다는 경고가 뜹니다. 알고 보니 제가 ‘덮어쓰기’가 아니라 ‘삽입’을 해버린 거였습니다. 바이너리 파일에서 데이터 하나가 밀린다는 게 어떤 재앙을 초래하는지 알기에, 식은땀을 흘리며 처음부터 다시 작업해야 했습니다. 이때부터 HxD의 그 빨간색 수정 표시가 저를 비웃는 것처럼 느껴지더군요.
두 번째 실패: 검색 기능에 대한 과신과 논리적 오류
헤더를 고쳤음에도 불구하고 여전히 파일은 제대로 작동하지 않았습니다. 이번에는 파일 내부에 포함된 특정 식별 문구(String)를 찾아서 그 주변 데이터를 분석해보기로 했습니다. HxD의 검색 기능은 꽤 강력해 보였습니다. 텍스트, 16진수 값, 심지어 부동 소수점까지 찾을 수 있더군요. 저는 제가 찾고자 하는 문자열인 ‘DATA_CHUNK_START’를 입력하고 검색 버튼을 눌렀습니다. ‘하나쯤은 나오겠지’라는 제 예상과 달리 검색 결과는 0건이었습니다.
그럴 리가 없는데. 분명히 이 파일은 해당 문자열을 포함하고 있어야 했습니다. 여기서 두 번째 삽질이 시작되었습니다. 혹시나 해서 ‘검색 방향’을 잘못 설정했나 싶어 위아래로 다 뒤져보고, 대소문자 구분 옵션도 만져보고, 인코딩을 ANSI에서 Unicode로 바꿔가며 수십 번을 시도했습니다. 하지만 결과는 여전히 빵점이었습니다. ‘HxD 검색 기능에 버그가 있는 거 아냐?’라는 애꿎은 도구 탓을 하려던 찰나, 문득 머릿속을 스치는 생각이 있었습니다. 이 파일은 압축되거나 암호화된 상태일 수도 있다는 사실이었죠.
결국 저는 다시 원점으로 돌아가 파일의 구조를 다시 공부해야 했습니다. 알고 보니 해당 문자열은 평문으로 저장된 게 아니라, 특정 키값으로 XOR 연산이 되어 저장되어 있었습니다. HxD가 아무리 만능 도구라지만, 제가 논리적으로 틀린 방향을 잡고 있는데 결과를 내줄 리 만무했죠. 도구의 성능이 아무리 좋아도 쓰는 사람이 데이터 구조를 모르면 그냥 숫자 놀음에 불과하다는 걸 뼈저리게 느꼈습니다. 결국 저는 HxD를 잠시 내려놓고 파이썬 스크립트를 짜서 데이터를 복호화한 뒤에야 다시 HxD로 돌아올 수 있었습니다. 이 과정에서 보낸 4시간은 제 실력에 대한 자괴감으로 가득 찬 시간이었습니다.
실제 사용 중 겪은 묘한 쾌감과 불편함의 공존
우여곡절 끝에 데이터를 복호화하고 HxD로 다시 열었을 때는 확실히 편안함이 느껴졌습니다. 수정된 부분이 빨간색으로 하이라이트 되는 기능은 정말 신의 한 수더군요. 수만 줄의 데이터 중에서 내가 어디를 건드렸는지 직관적으로 보여주니 실수가 줄었습니다. 특히 체크섬(Checksum) 확인 기능이 유용했습니다. 제가 값을 수정할 때마다 전체 파일의 무결성이 깨지는지 바로바로 확인할 수 있었거든요. CRC32나 MD5 같은 값을 따로 외부 툴을 쓰지 않고 안에서 해결할 수 있다는 건 큰 장점이었습니다.
하지만 반대로 불편한 점도 명확했습니다. 여러 파일을 동시에 열어놓고 비교하는 기능(Compare)이 있긴 한데, 이게 생각보다 투박합니다. 요즘 나오는 모던한 코드 에디터의 Diff 기능처럼 시각적으로 유려하게 보여주는 게 아니라, 단순히 다른 위치의 오프셋을 리스트로 뽑아주는 방식이라 눈이 좀 아프더군요. ‘이 부분은 그냥 다른 툴을 쓸까?’ 하다가도, 다시 파일 여는 속도를 생각하면 결국 HxD를 붙잡고 있게 됩니다. 마치 오래된 단골 국밥집 같은 느낌입니다. 인테리어는 낡았고 서빙도 투박한데, 국물 맛(파일 로딩 속도) 하나는 끝내줘서 다른 데를 못 가는 그런 느낌 말이죠.
메모리 수정이라는 위험한 유혹
작업을 하다가 문득 HxD의 ‘메인 메모리 열기’ 기능이 눈에 들어왔습니다. 실행 중인 프로세스의 RAM 데이터를 직접 들여다보고 수정할 수 있는 기능이죠. 사실 이건 제 주 업무 범위를 벗어나는 영역이었지만, 호기심을 참지 못하고 지금 띄워놓은 계산기 프로세스를 한번 열어봤습니다. 수많은 데이터가 실시간으로 변하는 모습이 화면에 찍히는데, 왠지 모를 공포감과 희열이 동시에 느껴지더군요. ‘여기서 값 하나 잘못 바꾸면 블루스크린 뜨는 거 아냐?’라는 독백이 절로 나왔습니다.
실제로 특정 주소의 값을 슬쩍 바꿔보니 계산기에 입력된 숫자가 변하는 걸 확인할 수 있었습니다. 물론 그 과정에서 계산기가 응답 없음으로 죽어버리기도 했지만요. 이런 기능은 게임 모딩이나 보안 분석을 하는 사람들에게는 정말 꿀 같은 기능이겠지만, 저 같은 일반 개발자에게는 너무 잘 들어서 무서운 면도날 같았습니다. 잘못 휘둘렀다가는 시스템 전체를 베어버릴 수도 있으니까요. 자동 백업 기능이 있어서 망정이지, 아니었으면 저는 오늘 OS를 새로 깔고 있었을지도 모릅니다. 결국 이 기능은 제 심장에 해롭다는 판단하에 얼른 닫아버렸습니다.
결론이라기엔 애매한, 하지만 확실한 변화
결국 제 작업은 어떻게 되었을까요? 완벽하게 해결되지는 않았습니다. 헤더를 고치고 데이터 오염 구간을 HxD로 도려내서 파일은 다시 열리게 만들었지만, 여전히 일부 섹션은 깨진 채로 남아있습니다. HxD가 파일을 나누고 합치는 기능을 제공해서 손상된 부분만 잘라내 보기도 했지만, 원본 데이터 자체가 사라진 걸 도구가 살려낼 수는 없으니까요.
그래도 한 가지 확실한 건, 이전처럼 무거운 툴을 붙잡고 끙끙대거나 텍스트 에디터가 죽을까 봐 조마조마해하지 않아도 된다는 점입니다. HxD는 빠르고 정확했습니다. 제가 실수해서 돌아갔을 뿐이지, 도구 자체는 자기 할 일을 묵묵히 해냈죠. 상황에 따라서 010 Editor처럼 구조체(Template)를 지원하는 유료 툴이 더 편할 때도 있을 겁니다. 데이터 구조가 복잡할 때는 HxD의 수동 작업이 고역일 수 있거든요. 하지만 ‘지금 당장 헥스 값을 확인하고 수정해야 한다’는 상황이라면 저는 주저 없이 다시 HxD를 켤 것 같습니다.
아직도 제 화면 한구석에는 수정하지 못한 빨간 글씨들이 깜빡이고 있습니다. 이 글씨들이 검은색(저장된 상태)으로 변한다고 해서 모든 문제가 끝나는 건 아니겠지만, 적어도 어둠 속에서 길을 잃은 기분은 아닙니다. 데이터 수정을 고민하는 누군가에게 이 도구는 최고의 친구가 될 수도, 혹은 저처럼 수많은 삽질의 시작점이 될 수도 있겠네요. 하지만 그 삽질조차도 결국 데이터의 본질에 다가가는 과정이 아닐까 하며 스스로를 위로해 봅니다. 물론, 다음부턴 꼭 관리자 권한으로 실행하는 것부터 잊지 말아야겠지만요.
