Fragen zu CRC

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Ande
User
Beiträge: 24
Registriert: Donnerstag 24. März 2011, 18:36

Hey,

ich bin in einer Datei, die ich mit meinem eigenen Converter konvertieren will, auf CRC Prüfsummen gestoßen.
Ich würde diese Prüfsummen gerne auch selbst generieren, dazu müsste ich aber wissen, welchen Algorithmus die Entwickler des Dateiformats benutzt haben.

Was ich weiß:
Das Objekt in dieser Datei, auf das die Prüfsumme verweist.
Die Prüfsumme des Verweises(ich bin mir nicht sicher ob es der Name, das Chunk des Namens oder vll das ganze Chunk des Objekts ist).
Die Prüfsumme ist wahrscheinlich 4 bytes lang(könnte auch 8 bytes lang sein, das Ende wäre dann aber mit 4x00 'gepaddet').

Gibt es irgendeinen anderen Weg, den Algorithmus rauszufinden, außer schon bestehende Algorithmen auszuprobieren(z.B. mit crcmod)?
Die Länge der Prüfsumme müsste die in Frage kommenden Algorithmen ja schon auf '32er' einschränken(wie crc32/adler32 etc). Gibt es noch andere Attribute die die Auswahl einschränken können?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo,

da gibt es eigentlich zwei einfache Möglichkeiten: du schaust in die Dokumentation zum Dateiformat, dort steht wahrscheinlich drin, welche Prüfsumme verwendet wird. Die zweite Möglichkeit wäre, einfach direkt bei den Entwicklern zu fragen. Mit etwas Glück bekommst du so auch gleich den entsprechenden Code.

Es sind auch mehr Antworten zu erwarten, wenn du verraten würdest, was für einen Konverter du schreibst und vorallem, um was für ein Dateiformat es sich überhaupt handelt. Die meisten hier im Forum haben ihre Kristallkugel wahrscheinlich gerade irgendwo in einem Osternest verlegt ;-)

Sebastian
Das Leben ist wie ein Tennisball.
Benutzeravatar
Ande
User
Beiträge: 24
Registriert: Donnerstag 24. März 2011, 18:36

Es gibt keine 'offizielle' Dokumentation des Dateiformats, es gibt nur eine unoffizielle(hier) und die wurde zu sehr großen Teilen von mir selbst erstellt.
Das Studio, das dieses Format benutzt hat, wurde vor 4 Jahren oder so geschlossen, also wirds leider nix aus den zwei einfachen Wegen...

Ich dachte, dass ich nen Link zur unoffizielen Dokumentation im Post hatte, war wohl nicht so. Dann also hier:
.MSH Format

Die CRC wird jeweils aus dem NAME chunk berechnet(bzw aus dem ASCII string im NAME chunk). Ich bin mir nicht sicher, ob die 00er die manchmal angehängt werden auch mitbenutzt werden.

Der Konverter ist hauptsächlich ein Exporter von Autodesk Softimage nach .msh, vor allem für das müsste ich wissen welcher Algorithmus benutzt wurde, für den anderen Weg nicht unbedingt.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Ok, das ist natürlich ganz schön ärgerlich. Wie sieht es denn mit Tools aus, die dieses Format verwenden? Dort könnte man es auch noch probieren. Da du die Doku allerdings mit erstellst hast, hast du das wahrscheinlich schon in Betracht gezogen.

Als letzte Idee bleibt mir nur noch, dass du einige Wert-Hash-Paare extrahierst und postest. Vielleicht fühlt sich der eine oder andere ein wenig herausgefordert und probiert ein wenig herum.
Das Leben ist wie ein Tennisball.
Benutzeravatar
Ande
User
Beiträge: 24
Registriert: Donnerstag 24. März 2011, 18:36

Die einzigen Tools, die diese Bereiche(CRCs werden nur bei Animationen benutzt) des Formats 'berührt' haben, sind die Tools der Entwickler. Und davon sind die meisten soweit ich weiß in C(und das kann man soweit ich weiß nicht dekompilieren). Die paar Programme, die wohl in python(es liegt irgendwo nen python lib zip) geschrieben sind machen nix mit den .msh Dateien. Hier ist ne Liste(das erste ist der Name, dann kommt der ganze NAME chunk in hex, dann die CRC):

Code: Alles auswählen

Skeleton                                               SKL2 & BLN2
nameCRC         | hex from NAME chunk                | crc        |
----------------+------------------------------------+------------+
DummyRoot       | 0x44756D6D79526F6F74000000         | 0xB8E94644 |
bone_root       | 0x626F6E655F726F6F74000000         | 0x2672E216 |
bone_a_spine    | 0x626F6E655F615F7370696E6500000000 | 0x8923E55D |
bone_b_spine    | 0x626F6E655F625F7370696E6500000000 | 0xBA9B1C8C |
bone_ribcage    | 0x626F6E655F7269626361676500000000 | 0x7210B5E5 |
bone_l_clavicle | 0x626F6E655F6C5F636C617669636C6500 | 0x307D751A |
bone_l_upperarm | 0x626F6E655F6C5F757070657261726D00 | 0x6B892C07 |
bone_l_forearm  | 0x626F6E655F6C5F666F726561726D0000 | 0x9C23518E |
bone_l_hand     | 0x626F6E655F6C5F68616E6400         | 0x311DECB7 |
bone_r_clavicle | 0x626F6E655F725F636C617669636C6500 | 0x9704D62C |
bone_r_upperarm | 0x626F6E655F725F757070657261726D00 | 0xCCF08F31 |
bone_r_forearm  | 0x626F6E655F725F666F726561726D0000 | 0x4EFDD73D |
bone_r_hand     | 0x626F6E655F725F68616E6400         | 0xD6931D82 |
hp_weapons      | 0x68705F776561706F6E730000         | 0x9900962B |
bone_neck       | 0x626F6E655F6E65636B000000         | 0x8AB2AFD2 |
bone_head       | 0x626F6E655F68656164000000         | 0xE4F5FD8A |
bone_pelvis     | 0x626F6E655F70656C76697300         | 0x7678E4E6 |
bone_r_thigh    | 0x626F6E655F725F746869676800000000 | 0x96F6EFF6 |
bone_r_calf     | 0x626F6E655F725F63616C6600         | 0xD31CF0B2 |
bone_r_foot     | 0x626F6E655F725F666F6F7400         | 0x86FA062F |
bone_r_toe      | 0x626F6E655F725F746F650000         | 0x74E85B5A |
bone_l_thigh    | 0x626F6E655F6C5F746869676800000000 | 0x6D1796C4 |
bone_l_calf     | 0x626F6E655F6C5F63616C6600         | 0x34920187 |
bone_l_foot     | 0x626F6E655F6C5F666F6F7400         | 0x6174F71A |
bone_l_toe      | 0x626F6E655F6C5F746F650000         | 0xE7AD8E2A |
Wäre nett wenn jemand nen bisschen rumprobieren würde. Ich werde mich inzwischen auch nen bisschen umschauen.
Antworten