2012-04-16 6 views
6

Wenn ich einen beliebigen Block von NSData als Hexadezimalwert habe, gibt es eine Möglichkeit zu bestimmen, was das Objekt gewesen sein könnte, bevor es archiviert oder serialisiert wurde? Ich habe nichts gegen einige Methoden zum Raten und Prüfen, aber ich brauche ein paar Hinweise in die richtige Richtung.Einen beliebigen Block von NSData dekodieren?

Ich habe ein NSData-Objekt mit einigen Hex darin. Welche Methoden von NSData sollte ich betrachten? Gibt es noch andere Klassen, die man ausprobieren kann?

Ich möchte die Leute nicht davor abschrecken zu antworten, aber ich habe eine Datei mit Spieldaten, die wahrscheinlich mit einer Cocoa Touch-Klasse kodiert wurde. Die Daten zeigen, wenn sie in einem Hex-Editor angezeigt werden, Kauderwelsch und einen Benutzernamen an, was mich vermuten lässt, dass es sich um ein archiviertes oder codiertes Objekt handelt. Ich habe das Hex vom Hex-Editor in ein Beispielprojekt kopiert, mit dem ich versuche, die Daten zu entpacken.

Ich glaube nicht, dass dies auf das 3D-Format bezogen ist, ist die Dateierweiterung beliebig.

Hier sind die Daten. Ich hoffe, dass es nicht in der Übersetzung verloren gehen:

'µköXN[ÎÀü÷h/F9ó9Vìñ°ceE¸z¶=Hmoshbermú«ó¼Ppù#ÝVÔ=4â®L,K;Êç;ASÀ&Ë÷ëÓ%È;Úf¬G}tmQ;µéüø_87´y©ã©!߶óQòAçÛl©âSG4S½3ýJת9äô¡wxiD²M¼ÏB]39øþ:óñ7ª¾÷躣È3Ï¢ÍEFÍ¢ª»r]BmÁ'Ò+åygÞÅQ?luó>÷ú¼è6¸|}[¼[¶Ñ¦g!\OÎÒJSE..pSß&_ÈEäø)6òëó¨¼2¶ð°æà`ï7Ë=Ã¥:cƧ=L4qG-"µ(ÐÝïß ÓãXkÀ4fzæ·p\ññT<tu¥Æ©;Ìn4£³Ï¢ÌFåG´ 

und die entsprechenden hex:

27 B5 6B F6 01 00 00 00 58 4E 5B CE C0 FC F7 68 2F 46 86 87 83 39 F3 39 9E 56 EC F1 B0 63 9E 65 45 B8 7A B6 3D 07 99 48 6D 6F 73 68 62 65 72 6D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 86 FA 03 0E AB F3 BC 0B 50 70 F9 23 DD 87 56 03 D4 3D 34 90 E2 AE 4C 2C 94 9E 8E 15 4B 0C 83 8C 3B 03 CA E7 3B 1B 41 53 C0 26 04 CB F7 EB D3 25 C8 3B DA 66 8A AC 47 7D 8A 7F 74 6D 51 3B B5 19 E9 FC F8 5F 38 37 B4 11 0C 79 A9 12 E3 A9 21 DF B6 F3 51 F2 41 E7 DB 85 02 9F 6C A9 E2 53 47 1F 34 86 53 BD 33 FD 4A D7 AA 39 C3 A4 F4 A1 77 78 69 44 B2 4D BC CF 42 5D 33 39 F8 FE 97 3A 81 F3 F1 10 37 AA BE 86 91 F7 1F E8 83 BA A3 C8 33 CF 1D A2 CD 45 7F 46 1F CD A2 AA BB 1A 72 5D 42 02 6D C1 0F 27 D2 2B E5 0B 79 67 DE C5 1A 51 3F 14 6C 75 F3 3E F7 FA BC E8 36 8E B8 7C 02 1C 7D 01 00 92 8C 19 5B BC 5B B6 D1 A6 67 7F 21 5C 84 13 4F CE 0C D2 4A 53 19 82 45 1B 2E 2E 96 70 53 DF 26 5F C8 1C 45 8F E4 F8 29 36 F2 EB 9D 95 F3 A8 BC 32 B6 F0 B0 E6 91 98 1A E0 99 60 EF 37 CB 3D C3 A5 3A 63 0C C6 A7 3D 4C 34 71 47 2D 22 B5 28 D0 DD EF DF 09 D3 E3 58 6B C0 17 34 66 7A E6 B7 70 5C F1 F1 54 3C 74 94 75 A5 C6 15 A9 9E 14 3B CC 15 10 83 6E 34 A3 B3 CF 0F A2 9C CC 8E 46 8C E5 00 00 47 B4 17 05 00 00 00 00 

Wenn jemand kümmert sich dabei zu helfen, herauszufinden, wäre es sehr geschätzt werden.

+0

+1, einzigartige Frage. – CodaFi

+0

Whoops, Hexwert. – Moshe

+0

So enthält der Datenblock, der durch eine 'NSData'-Instanz repräsentiert wird, eine Instanz einer ObjC-Klasse ("was das ** Objekt ** hätte sein können")? Oder könnte es überhaupt etwas enthalten? –

Antwort

2

Wenn ich einen beliebigen Block von NSData als Hexadezimalwert habe, gibt es eine Möglichkeit zu bestimmen, was das Objekt gewesen sein könnte, bevor es archiviert oder serialisiert wurde?

Nicht wirklich. Das ist ungefähr so ​​"trivial" wie das Lesen beliebiger Dateien ohne die Verwendung eines UTI, einer Erweiterung, eines MIME-Typs. Natürlich müsste Ihr Programm auch das Lesen all dieser Dateien/Formate unterstützen.

ich nicht ein paar Vermutung und überprüfen Methoden dagegen, aber ich brauche einige Hinweise in die richtige Richtung.

Sie müssen Ihre Probleme/Eingaben einschränken, wenn Sie keine unmöglich schwierige Aufgabe haben möchten.

Ich habe ein NSData-Objekt mit einigen Hex darin. Welche Methoden von NSData sollte ich betrachten?

Es ist nur ein Datenblob von length Bytes. Es könnte alles darstellen - wenn Sie nicht wissen, wo es herkommt.

Gibt es noch andere Klassen?

Vielleicht möchten Sie durch Speichern Sie alle Ihre Daten über NSCoder oder einem anderen Serializer/Archivierungs beginnen, die eine gewisse Selbstbeobachtung und Unterstützung bietet, damit Sie Ihre eigenen Informationen einzugeben (die zu einer Harnwegsinfektion oder MIME-Typ vergleichbar wäre).

Edit:

Ich will nicht Leute verscheuchen von der Beantwortung, aber ich habe eine Datei von Spieldaten, die wahrscheinlich eine Cocoa Touch-Klasse codiert wurde mit. Die Daten zeigen, wenn sie in einem Hex-Editor angezeigt werden, Kauderwelsch und einen Benutzernamen an, was mich vermuten lässt, dass es sich um ein archiviertes oder codiertes Objekt handelt. Ich habe das Hex vom Hex-Editor in ein Beispielprojekt kopiert, mit dem ich versuche, die Daten zu entpacken.

Mithilfe dieser APIs können die Daten auf verschiedene Arten dargestellt werden. Sie sind wahrscheinlich etwas in der Domäne von 1) einem proprietären Dateiformat durch 2) ein verschlüsseltes Archiv konfrontiert.

Letzteres ist einfacher für nicht-triviale Datendarstellungen. Sie müssten alle Objc-Klassen definieren, die bei der Archivierung nicht verfügbar sind. In diesem Fall würden einige Beispieldarstellungen einen groben Überblick über die Datenstrukturen bieten, die Sie benötigen (bei herkömmlichen Implementierungen). Es könnte auch ein Archiv ähnlich einem NSDictionary sein, wenn der Unarchiver es öffnen kann. Dies ist ein Problem, das einfacher ist als bei anderen Sprachen, da die Archivierung oft auf Schlüssel und Werte zurückgreift, die den Mitgliedern in Cocoa zugeordnet sind.

Edit2:

Die Datei stammt aus dem Draw Something Verzeichnis. Es

(Achselzucken)

+0

Klingt für mich wie jemand anderes diese Daten gespeichert, und es gibt ein paar (vermuteten) Beschränkungen für den Inhalt, aber im allgemeinen Fall ist dies die einzig mögliche Antwort. –

+0

@ IuliusCæsar aye - lesen Sie einfach die OPs ** Bearbeiten **. Counter-editing ... – justin

0

Versuchen Sie es mit NSKeyedUnarchiver es lesen gamedata.i3d genannt. Es ist nicht ungewöhnlich, nur die Standard-Foundation-Container wie NSArray, NSDictionary und NSString zum Speichern von Daten zu verwenden, damit Sie Glück haben. Das wird natürlich nicht funktionieren, wenn benutzerdefinierte Klassen beteiligt sind, aber es könnte 15 Minuten Ihrer Zeit wert sein, es zu versuchen.

+0

Ich habe versucht, etwas Code zu posten? – Moshe

+1

Wenn Sie es versucht haben, geben Sie Ihren Code und Ihre Ergebnisse ein.Aber das ist sowieso ein langer Schuss. Ich sehe keinen großen Nutzen darin, viel Zeit damit zu verbringen. – Caleb