2009-10-13 6 views
5

나는 이진 파일 (불행히도 text/JSON이 아님)로 직렬화 된 일부 파일을 처리하라는 요청을 받았지만 프로그램이나 파일을 만든 프로그래머에 대한 액세스 권한이 없으므로 해당 구조에 대해 전혀 알지 못한다. 필드 순서 등. Thrift 라이브러리를 사용하여 이진 파일을 열고 분석하여 필드 유형, 값, 중첩 등의 목록을 가져 오는 방법이 있습니까?어떻게 이진 중고품 파일을 리버스 엔지니어링 할 수 있습니까?

+0

나는 당신이 http://incubator.apache.org/thrift/에 대해 이야기하고 있다고 가정하고 있습니다. 당신이 사용하고있는 언어를 올리거나 태그를 붙이고 싶을 수도 있습니다. – TrueWill

답변

7

슬리 프의 바이너리 프로토콜은 데이터의 태깅을 전혀하지 않는 것으로 보입니다. 디코딩하려면 .thrift 파일을 가지고 있다고 가정하여 다음 4 바이트를 정수로 가정하고 실제로는 플로트의 처음 절반이 아님을 알 수 있습니다. 따라서 기본적으로 16 진수 편집기 (또는 그에 상응하는 파일)의 파일을보고 정확한 패턴을 기반으로 필드를 추론하려고합니다.

는 거의 도움이 비트가 있습니다

각 파일에 버전, 프로토콜 식별자의 캐릭터 라인, 및 일련 번호로 시작합니다. 지도는 키 및 값 유형 (정수 코드로 처음 두 바이트)과 요소 수를 4 바이트 정수로 더한 6 바이트로 시작됩니다. 유형 코드는 표준으로 표시됩니다 (정의의 표준 위치는 Thrift 소스의 TProtocol.h 인 것처럼 보입니다. 예를 들어 부울 값은 유형 코드 2로 지정되고, UTF-8 문자열은 유형 코드 16으로 지정됩니다) . 문자열에는 4 바이트 정수 길이 필드 접두사가 붙으며 목록에는 유형 (1 바이트)과 4 바이트 길이 접두어가 붙습니다. 모든 정수 필드는 빅 엔디안으로 저장되고 부동 소수점은 IEEE 형식으로 저장되므로 (적어도 두 배로 쉽게 찾을 수 있어야 함)

Thrift의 TBinaryProtocol * 파일에는 몇 가지 추가 정보가 있습니다. 더하기 측면에는 여러 가지 구현이 있으므로 가장 편한 언어로 구현 된 구현을 읽을 수 있습니다.

미안하지만, 아마도 이것이 도움이되지는 않지만 실제로 이것은 Thrift 바이너리 형식이 제공하는 모든 정보입니다. 명확하게 바이너리 형식은 이미 정확한 프로토콜 스펙을 알고 있다는 의도로 설계되었으며, 목표는 맹목적으로 해독하기 쉽도록하기보다는 배선 공간을 최소화하는 것이 었습니다.