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

19 hours ago 4

게임 FEZ의 독자적인 바이너리 세이브 파일을 대상으로, C# 코드 역컴파일부터 ImHex 패턴 작성까지 파일 형식을 분석하는 전 과정을 보여줌 매직 바이트나 형식 명세가 없는 파일은 바이트만 들여다봐서는 의미를 알기 어려우므로, 파일을 읽고 쓰는 코드를 찾아 직렬화 순서와 자료형을 역추적함 발견한 구조를 ImHex Pattern Language로 하나씩 옮기고 실제 바이트와 비교하면서, 시간과 버전, 불리언, 문자열, 목록과 중첩 객체의 의미를 확인함 고정 크기 파일, 선택적 객체, 길이 접두 문자열, 열거형처럼 바이너리 형식에서 자주 만나는 구조를 패턴으로 표현하고 검증하는 방법을 설명함 완성된 패턴은 패딩을 제외한 모든 바이트를 구조화해 탐색하고 수정할 수 있으며, 분석 결과를 실행 가능한 문서이자 파일 검증기로 남겨줌 분석 대상과 준비 대상은 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에서 관련성이 높은 파일을 조사함 FEZ.exe FezEngine.dll Common.dll ContentSerialization.dll EasyStorage.dll EasyStorage -> PCSaveDevice ...

Read Entire Article