2017-04-18 1 views
0

프로그램에서 생성 한 .dat 파일이 있습니다. 프로그램 소유자는이 파일의 구문 분석 및 편집에 반대하지 않지만 아무에게도 답변을 제공하지 않습니다.이진 비 직렬화 - 어떻게 찾을 수 있습니까, 어떤 유형의 직렬화입니까?

파일은 대부분이 방식으로 정의되는 변수로 구성되어 예를 들어,

(4 bytes - length of the var name)(var name)(1 zero byte)(4 bytes of some internal var type) 

: 그래서 대부분의 경우

:

(4 bytes - length of the var name)(var name)(4 bytes of some internal var type)(4 bytes - possibly are elements count)(X bytes of var value) 

드물게

([4 0 0 0][name])[11 0 0 0][1 0 0 0]([9 0 0 0][Alexander]) 

([8 0 0 0][names])[6 0 0 0](length [3 0 0 0])([4 0 0 0][John])([4 0 0 0][Anne])([7 0 0 0][SomeGuy]) 

나는 부스트 바이너리 직렬화를보고 시도했지만 파일에 변수 이름을 추가하지 않습니다 내가 생각 8 바이트를 사용하지 4.

+0

알아 내기 위해서는 이진 데이터 파일의 스텐실 또는 레이아웃이 있어야합니다. 단위 당 얼마나 많은 바이트 ('uint8_t' 또는'uint32_t'와 같은)를 알 수 없습니다. 또한 멀티 바이트 수량의 경우 데이터가 Little Endian 또는 Big Endian인지 여부를 알아야합니다. –

+1

[Reverse Engineering] (https://reverseengineering.stackexchange.com/) 사이트를 대신 사용해보십시오. –

+0

Thomas, Macintosh ANSI (Notepad ++)입니다. 단위당 4 바이트라고 확신합니다. 나는 배열의 길이가 4 바이트로 표현된다는 것을 알아 냈다. – user64675

답변

2

"결정하는 더 일반적인 방법이 없습니다 어떤 유형의 직렬화 "인지를 나타냅니다. 형식 작성자는 디자인 결정을 내 렸으며 최종 형식으로 도착했습니다. 그것은 문자 적으로 무엇이든 수 있습니다. 당신은 교훈있는 추측을 할 수 있지만 ("리버스 엔지니어링"), 확실히 알 수있는 유일한 방법은 작성자로부터 사양을 얻는 것입니다. 사용자가이 형식으로 저장된 파일을 조작하는 것을 신경 쓰지 않는다고 주장하지만,이 사양을 제공하는 것을 거부하면 이것이 사실인지, 궁극적으로 추측을해야 할지도 모른다고 생각하게됩니다.

+0

Avorion 게임의 .dat 파일입니다. 이 파일을 변경하는 공식 포럼에 이미 일부 유틸리티를 게시했습니다. 나는 다운로드를 받았으며 금지 또는 "다시하지 마세요"와 같은 단어가 없습니다. – user64675

+1

@ user64675 포럼에서 종료되지 않는 것이 승인을 의미하지는 않습니다. 그것은 당신이 당신의 행동에 충분한주의를 기울이지 않았 음을 의미 할 수도 있고, 실제로 그것이 괜찮다는 것을 의미 할 수도 있습니다. 제품이 출시 된 라이센스를 확인해야합니다. – bolov

0

BoundaryImposition의 대답을 추가하려면 "모든"형식을 처리 할 수있는 역 직렬화 프레임 워크가 없습니다. 형식은 라이브러리가 알고 있고 구현해야합니다. 따라서 직접 구현해야합니다.