2012-04-16 16 views
6

Si tengo un bloque arbitrario de NSData como valor hexadecimal, ¿hay alguna forma de determinar qué objeto podría haber sido antes de que se archivara o serializara? No me importan algunos métodos de adivinar y verificar, pero necesito algunos consejos en la dirección correcta.Decodificando un bloque arbitrario de NSData?

Tengo un objeto NSData con algo de hexadecimal. ¿Qué métodos de NSData debo ver? ¿Hay otras clases para probar también?

No quiero asustar a la gente para que no conteste, pero tengo un archivo de datos del juego que probablemente fue codificado usando una clase Cocoa Touch. La información, cuando se ve en un editor hexadecimal, muestra galimatías y un nombre de usuario, lo que me lleva a sospechar que se trata de un objeto archivado o codificado. He copiado el hexadecimal del editor hexadecimal en un proyecto de muestra que estoy usando para tratar de desarchivar los datos.

No creo que esto esté relacionado con el formato 3D, la extensión del archivo es arbitraria.

Aquí están los datos. Estoy esperando que no se pierda en la traducción:

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

Y el hexágono correspondiente:

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 

Si a alguien le interesa ayudar a resolver esto sería muy apreciado.

+0

+1, Pregunta única. – CodaFi

+0

Whoops, valor hexadecimal – Moshe

+0

Entonces, el bloque de datos, que está representado por una instancia 'NSData', contiene una instancia de alguna clase ObjC (" ¿qué podría haber sido el ** objeto ** ")? O podría contener algo en absoluto? –

Respuesta

2

Si tengo un bloque arbitrario de NSData como valor hexadecimal, ¿hay alguna manera de determinar qué objeto podría haber sido antes de que se archivara o serializara?

No

realmente. Eso es tan 'trivial' como leer archivos arbitrarios correctamente sin el uso de una UTI, extensión, tipo MIME. Por supuesto, su programa también debería ser compatible con la lectura de todos esos archivos/formatos.

No me importan algunos métodos de adivinar y verificar, pero necesito algunos consejos en la dirección correcta.

Debe reducir su problema/entradas, si no quiere una tarea imposiblemente difícil.

Tengo un objeto NSData con algo de hexadecimal. ¿Qué métodos de NSData debo ver?

Es solo una cantidad de datos de length bytes. Podría representar cualquier cosa, si no sabe de dónde vino.

¿Hay otras clases para probar también?

Tal vez sería empezar por el ahorro de todos sus datos a través de NSCoder u otra serializador/archivador que ofrece un poco de introspección y el apoyo para que introduzca su propia información (que sería comparable a una infección urinaria o tipo MIME).

Editar:

no quieren asustar a la gente lejos de responder, pero tengo un archivo de datos de juego que probablemente haya sido codificado usando una clase de Cocoa Touch. La información, cuando se ve en un editor hexadecimal, muestra galimatías y un nombre de usuario, lo que me lleva a sospechar que se trata de un objeto archivado o codificado. He copiado el hexadecimal del editor hexadecimal en un proyecto de muestra que estoy usando para tratar de desarchivar los datos.

Al usar estas API, los datos se pueden representar de múltiples maneras. Probablemente estés enfrentando algo dentro del dominio de 1) un formato de archivo propietario a través de 2) un archivo con clave.

Esto último es más fácil para representaciones de datos no triviales. Debería definir cualquier clase objc que no tenga disponible cuando se desarchive. En ese caso, algunas representaciones de muestra ofrecerían un bosquejo aproximado de las estructuras de datos que necesitará (en implementaciones convencionales). También podría ser un archivo similar a un NSDictionary, si el desarchivo es capaz de abrirlo. Este es un problema que es más fácil que con otras langs, ya que el archivamiento a menudo recurre a claves y valores asignados a miembros en Cocoa.

Edit2:

vino el archivo del directorio dibujar algo. Se llama gamedata.i3d

(encogimiento)

+0

Me parece que alguien más ha guardado esta información, y existen algunas (supuestas) limitaciones en los contenidos, pero en el caso general esta es la única respuesta posible. –

+0

@ IuliusCæsar aye - solo lea el ** Editar ** del OP. Counter-editing ... – justin

0

Trate de usar NSKeyedUnarchiver para leerlo. No es raro usar solo los contenedores estándar de Foundation como NSArray, NSDictionary y NSString para almacenar datos, por lo que puede tener suerte. Eso, obviamente, no funcionará si las clases personalizadas estuvieron involucradas, pero podría valer la pena 15 minutos de su tiempo para probarlo.

+0

Lo he intentado, ¿me importa publicar algún código? – Moshe

+1

Si lo ha intentado, publique su código y resultados.Pero esto es un poco largo de todos modos. No veo mucho beneficio en pasar mucho tiempo en eso. – Caleb