ImHex로 미지의 파일 형식 리버스 엔지니어링하기

1 month ago 21

FEZ의 독자적인 바이너리 세이브 파일을 대상으로 C# 코드 역컴파일부터 ImHex Pattern Language를 이용한 전체 필드 해석까지 단계별로 진행함 평문 문자열이 보여도 매직 바이트나 형식 정보가 없다면 바이트만으로 의미를 판단하기 어려워, 파일을 읽고 쓰는 함수를 찾아 직렬화 순서와 자료형을 역추적해야 함 PCSaveDevice.Save()와 SaveFileOperations.Write()를 따라가며 FILETIME, 버전, 불리언, 문자열, 목록, 열거형, 중첩 구조체가 기록되는 순서를 확인해 같은 구조를 패턴으로 구현함 선택적 객체는 유효성 불리언, 문자열은 7비트 인코딩 길이, 목록은 항목 수와 배열로 모델링하고 [[format]], [[transform]], std::assert로 표시와 검증을 개선함 완성된 패턴은 패딩을 제외한 모든 바이트를 구조화해 탐색·수정할 수 있으며, 형식 확인 → 처리 코드 탐색 → 구성 요소 분석 → 패턴 작성·검증이라는 일반적인 작업 흐름에도 적용할 수 있음 분석 대상과 준비 대상은 2012년 출시된 게임 FEZ의 완전한 사용자 정의 바이너리 세이브 파일이며, 코드에는 비밀 요소와 엔드게임에 관한 스포일러가 포함될 수 있음 Steam에서 제공되는 2016년 12월 2일자 최신 정식 릴리스를 실행해 세이브를 생성했으며, Linux에서는 /home/werwolv/.local/share/FEZ/SaveSlot2에서 파일을 찾음 Windows의 저장 경로는 다름 파일에는 DOT_LOCKED_DOOR_A 같은 평문 문자열과 반복 패턴이 보여 압축되거나 암호화되지 않은 상태임을 알 수 있음 시작 부분에 형식을 식별하는 매직 문자열이 없고 ImHex도 자동 판별하지 못해, 바이트만 살펴봐서는 각 데이터의 의미를 파악하기 어려움 사용한 일부 기능은 ImHex 정식 릴리스에 포함되지 않았으며, v1.38.1 이하에서 문제가 생기면 Nightly 빌드나 ImHex Web을 사용할 수 있음 FEZ 바이너리에서 저장 코드 찾기 설치 폴더의 System.Core.dll, mscorlib.dll 등을 통해 게임이 C#으로 작성됐음을 확인할 수 있으며, JetBrains Rider로 바이너리를 원본과 유사한 코드로 역컴파일할 수 있음 Steam의 Manage -> Browse local files로 설치 위치를 열고 Assembly Explorer에서 관련성이 높은 파일을 조사함 ...

Read Entire Article