2010-12-22 2 views
5

다른 닫힌 응용 프로그램에서 생성 된 파일을 모방 한 이진 파일을 생성하기 위해 작은 유틸리티를 작성하려고합니다. 저는 16 진수 편집기를 사용하여 형식을 해독했습니다. 형식/인코딩이 무엇인지 이해하려고 노력 중이므로 C++ 또는 C#을 사용하여 제작할 수 있습니다.이 이진 파일 형식을 이해하는 데 도움이됩니다.

파일은 처음 4 바이트 : 01 00 다음에 FF FE로 시작합니다. 내 이해는 파일이 작은 엔디안에 대한 바이트 순서 표시 다음에 SOH로 시작한다는 것입니다. 이 4 바이트가 지나면 프로그램은 GUI의 각 문자열 필드에 BSTR을 쓰는 것으로 나타납니다.

C#을 사용하여 FF FE로 시작하는 유니 코드 파일을 만들었지 만 SOH 문자를 먼저 삽입하는 방법을 모르겠습니다.

누군가가 파일 형식이나 인코딩에 대한 통찰력을 제공 할 수 있으며 파일이 SOH 문자로 시작하는 이유는 언제나 감사 할 것입니다.

미리 감사드립니다.

+0

폐쇄 형 소프트웨어가하는 일에 대한 힌트를 제공해 줄 수 있습니까? 적어도 어떤 산업이나 노력 영역이 관련되어 있다고 말할 수 있습니까? –

+0

파일은 백업을 복원하는 데 사용되는 파일을 생성하는 동안 객체 지향 및 SQL 데이터베이스의 백업을 자동화하는 GUI에 의해 생성됩니다. 인수를 사용하여 동일한 파일을 생성 할 수있는 실행 파일을 생성하여 백업을 자동화하고 GUI에서 스크립트 된 백업을 복원 할 수있는 파일을 생성하려고합니다. 라이센스를 무시하거나 판매 할 것을 시도하지 않습니다. 그것은 수동으로 백업을 실행하지 못하게하는 앱용입니다. 이 파일의 크기는 1k입니다. – Rob

답변

3

처음 4 바이트를 쓰는 데 문제가 있으면이 작업을 수행 할 것입니다.

using (var stream = new FileStream("myfile.bin", FileMode.Create)) 
{ 
    using (var binaryWriter = new BinaryWriter(stream)) 
    { 
     binaryWriter.Write((byte)1); 
     binaryWriter.Write((byte)0); 
     binaryWriter.Write((byte)0xFF); 
     binaryWriter.Write((byte)0xFE); 
     binaryWriter.Write(Encoding.Unicode.GetBytes("string")); 
    } 
} 

이 출력됩니다 다음 파일

01 00 FF FE 73 00 74 00 72 00 69 00 6e 00 67 00 ....s.t.r.i.n.g. 

편집 : 문자열을 작성하기위한 추가 마크 H의 제안.

+0

와우! 고맙습니다! 내가 더 빨리 도움을 청했으면 좋겠다. 동일한 작성자를 사용하여 BSTR 데이터 형식을 작성하는 방법을 알고 있습니까? – Rob

+1

'binaryWriter.Write (Encoding.Unicode.GetBytes ("string")); ' –

+0

도움을 주셔서 감사합니다. 귀하의 도움으로 불과 몇 시간 만에 응용 프로그램을 만들 수있었습니다. 진심으로 감사드립니다! – Rob

3

바이너리 파일 형식을 리버스 엔지니어링하는 것은 어려운 작업이 될 수 있습니다. 표면적으로, 나는 이것을 분명하고 잘 알려진 파일 형식으로 인식하지 못한다. 그러나 거기에는 수천 명이있다. 그래서 누가 알 수있다.

:

Legal issues 제외하고, 당신이 이러한 노력에 대한 접근 방식에 대해 이야기 다음 리소스 중 일부를 보면 제안