6

如果我有一个任意的 NSData 块作为十六进制值,有没有办法确定对象在存档或序列化之前可能是什么?我不介意一些猜测和检查方法,但我需要一些正确方向的指针。

我有一个 NSData 对象,里面有一些十六进制。我应该看哪些 NSData 方法?还有其他课程可以尝试吗

不想吓跑人们回答,但我有一个游戏数据文件,它可能是使用 Cocoa Touch 类编码的。在十六进制编辑器中查看数据时,会显示乱码和用户名,这让我怀疑它是某种存档或编码对象。我已将十六进制编辑器中的十六进制复制到一个示例项目中,我正在使用该示例项目来尝试取消归档数据。

我不相信这与 3d 格式有关,文件扩展名是任意的。

这是数据。我希望它不会在翻译中丢失:

'µ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´

以及相应的十六进制:

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

如果有人愿意帮助解决这个问题,将不胜感激。

4

2 回答 2

2

如果我有一个任意的 NSData 块作为十六进制值,有没有办法确定对象在存档或序列化之前可能是什么?

并不真地。这与在不使用 UTI、扩展名、MIME 类型的情况下正确读取任意文件一样“微不足道”。当然,您的程序还需要支持读取所有这些文件/格式。

我不介意一些猜测和检查方法,但我需要一些正确方向的指针。

如果您不想要一个不可能完成的任务,您需要缩小您的问题/输入范围。

我有一个 NSData 对象,里面有一些十六进制。我应该看哪些 NSData 方法?

它只是一个length字节的数据块。它可以代表任何东西——如果你不知道它来自哪里。

还有其他课程可以尝试吗?

也许您会首先通过 NSCoder 或另一个序列化器/归档器保存所有数据,这些序列化器/归档器提供一些内省并支持您输入自己的信息(类似于 UTI 或 MIME 类型)。

编辑:

不想吓跑人们回答,但我有一个游戏数据文件,它可能是使用 Cocoa Touch 类编码的。在十六进制编辑器中查看数据时,会显示乱码和用户名,这让我怀疑它是某种存档或编码对象。我已将十六进制编辑器中的十六进制复制到一个示例项目中,我正在使用该示例项目来尝试取消归档数据。

使用这些 API,数据可以以多种方式表示。您可能在 1) 专有文件格式到 2) 密钥存档的领域内面临一些问题。

后者对于非平凡的数据表示更容易。您需要定义未归档时不可用的任何 objc 类。在这种情况下,一些示例表示将提供您将需要的数据结构的粗略轮廓(在传统实现下)。如果 unarchiver 能够打开它,它也可以是类似于 NSDictionary 的存档。这是一个比其他语言更容易的问题,因为归档通常依赖于映射到 Cocoa 中的成员的键和值。

编辑2:

该文件来自 Draw Something 目录。它被称为gamedata.i3d

(耸肩)

于 2012-04-16T04:32:16.377 回答
0

尝试使用NSKeyedUnarchiver来阅读它。仅使用 NSArray、NSDictionary 和 NSString 等标准 Foundation 容器来存储数据的情况并不少见,因此您可能会很幸运。如果涉及自定义类,这显然不起作用,但可能值得您花 15 分钟的时间来尝试。

于 2012-04-16T15:24:53.253 回答