iphone - 解码任意 block NSData?

标签 iphone objective-c ios nsdata archiving

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

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

不想吓唬别人回答,但我有一个游戏数据文件,它可能是使用 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

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

最佳答案

If I have an arbitrary block of NSData as a hex value, is there a way to determine what the object might have been before it was archived or serialized?

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

I don't mind a few guess and check methods, but I need some pointers in the right direction.

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

I have an NSData object with some hex in it. What methods of NSData should I look at?

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

Are there other classes to try as well?

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

Edit:

Don't want to scare people away from answering, but I have a file of game data which was likely encoded using a Cocoa Touch class. The data, when viewed in a hex editor, shows gibberish and a username, which leads me to suspect that it's an archived or encoded object of sorts. I have copied the hex from the hex editor into a sample project which I am using to try and unarchive the data.

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

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

Edit2:

The file came from the Draw Something directory. It's called gamedata.i3d

(耸肩)

关于iphone - 解码任意 block NSData?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10168550/

相关文章:

ios - 计算依赖于异步加载的单元格宽度和图像的 UITableViewCell 的高度

ios - 从设置应用程序中查找温度单位

iphone - 从 NSDate 获取时区名称

ios - 检测照片库为空

ios - 如何使用 Objectivec 文件和 Swift 文件创建框架

ios - 收到 SUbiquity Identity DidChangeNotification 后我应该做什么?

objective-c - 是否可以对多个应用程序使用相同的应用程序ID?

ios - 如何处理弃用函数 'unarchiveObject(with:)' ?

ios - 在 imageView 数组中设置图像?

iphone - 每台服务器的最大连接数