Autor Tema: Compresión/descompresión ZLIB  (Leído 1836 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado pakolmo

  • Webmasters
  • Master Control Program
  • *****
  • Mensajes: 2754
  • Registrado: 16 Ene, 2015
  • es España
  • Sexo: Masculino
    • Ver Perfil
Compresión/descompresión ZLIB
« en: Abril 04, 2019, 18:38:22 pm »
Hola.

¿Alguien me puede ayudar a desencriptar/encriptar un archivo en ZLIB?

https://www.dropbox.com/s/752gjfmge2dl4u2/TEXTDB.ENG?dl=0

Desconectado Guardiola

  • Moderador Global
  • HAL9000
  • *****
  • Mensajes: 2277
  • Registrado: 20 Feb, 2006
  • es España
  • Sexo: Masculino
    • Ver Perfil
Re:Compresión/descompresión ZLIB
« Respuesta #1 en: Abril 04, 2019, 22:30:30 pm »
pero ese archivo tiene extensión .ENG ...


Mis aportes ► ◄ Mis aportes WikiMis videos → Amiga-1 | Amiga-2 | Amiga-3 | Portables Amiga

Desconectado pakolmo

  • Webmasters
  • Master Control Program
  • *****
  • Mensajes: 2754
  • Registrado: 16 Ene, 2015
  • es España
  • Sexo: Masculino
    • Ver Perfil
Re:Compresión/descompresión ZLIB
« Respuesta #2 en: Abril 04, 2019, 22:33:23 pm »
Es un archivo comprimido en ZLIB (que contiene la traducción en inglés de un juego) y lo que quiero es primero descomprimir y luego comprimir de nuevo.

Desconectado gatuno

  • Deep Blue
  • ****
  • Mensajes: 979
  • Registrado: 11 Abr, 2018
  • gs South Georgia and the South Sandwich Islan
  • eterno aprendiz
    • Ver Perfil
Re:Compresión/descompresión ZLIB
« Respuesta #3 en: Abril 05, 2019, 00:00:49 am »
Aqui lo tienes descomprimido http://www.mediafire.com/file/134xc307cqgh0iq/decompressed/file

Pero claro, vas a necesitar un editor hexadecimal, como no sabemos que estructura tiene el archivo lo unico que he hecho es tomar el flujo de datos comprimido con zlib y descomprimirlo haciendo uso de la funcion deflate() de zlib. He compilado el ejemplo de uso que dan en la pagina oficial https://www.zlib.net/zpipe.c y es lo que hay, de un binario generas otro binario.

Lo que quieras te lo puedo volver a comprimir, es instantaneo, pero claro no se hasta que punto te es funcional traducir asi. Lo ideal seria llegar a saber la estructura de datos que usa el archivito de marras y hacer una herramienta que fuera como un notepad que descomprimiera/comprimiera, pero claro, eso requiere tiempo... No obstante te dejo el archivo descomprimido en crudo, como ya te digo es instantaneo.
« Última modificación: Abril 05, 2019, 00:17:58 am por gatuno »



Desconectado pakolmo

  • Webmasters
  • Master Control Program
  • *****
  • Mensajes: 2754
  • Registrado: 16 Ene, 2015
  • es España
  • Sexo: Masculino
    • Ver Perfil
Re:Compresión/descompresión ZLIB
« Respuesta #4 en: Abril 05, 2019, 04:08:39 am »
Muchas gracias gatuno.

Yo había llegado a obtener un archivo idéntico con un script de Quickbms.

Lo que he descubierto del archivo original encriptado es que hacia el final empieza a contener como 9 archivos de sonido OGG sin encriptar. Por lo que detecto que el TEXTDB.ENG que tengo es erroneo y que la exportación que he hecho de un resource.res está mal hecha.

¿Sería mucho pedir un programa extractor/importador del archivo resource.res?

El juego en cuestión es Detective Hayseed - Hollywood.

SkaZZ me ha hecho un programa muy chulo para editar el TEXTDB.ENG desencriptado, que yo diría que funciona bien, pero el juego no acaba de pillar el nuevo TEXTDB.ENG cuando lo encripto con otro script de Quickbms.

El juego lo puedes encontrar aquí:


Desconectado gatuno

  • Deep Blue
  • ****
  • Mensajes: 979
  • Registrado: 11 Abr, 2018
  • gs South Georgia and the South Sandwich Islan
  • eterno aprendiz
    • Ver Perfil
Re:Compresión/descompresión ZLIB
« Respuesta #5 en: Abril 06, 2019, 12:44:04 pm »
Hola pakolmo, el archivo TEXTDB.ENG que adjuntaste tiene bytes de mas que no pertenecen al flujo de datos zlib. El bloque zlib ocupa exactamente 120990 bytes a contar desde el byte numero 1333278155 del archivo resources.res. Si extraes un byte menos el bloque zlib no puede descomprimirse ya que esta sin finalizar. Si extraes un byte mas puede descomprimirse pero en el TEXTDB.ENG tienes bytes de mas.

Tienes 3 bloques zlib hacia el final del archivo resources.res. El primero con frases en ingles, el segundo en aleman y el ultimo con nombres de archivos ogg. Mira, esto es el resources.res los numeros de arriba son los bytes que ocupa exactamente cada bloque zlib, los de abajo el byte donde empieza donde marca la flecha ^, espero que el ascii se entienda, si no pregunta.

Código: [Seleccionar]
    |<-----120990----->|                   |<-----132942----->|                   |<---117501---->|
|...|stream zlib ingles|...................|stream zlib aleman|...................|stream zlib ogg|
    ^-1333278155       ^-1333278155+120990 ^-1483101395       ^-1483101395+132942 ^-1500699435    ^-1500699435+117501

Aqui un problema que tenemos es que si descomprimimos el stream zlib digamos aleman, y lo volvemos a comprimir, aunque no hayamos cambiado nada a mi me ocupa algo mas que el stream zlib original. Entonces habria que asegurarse de no machacar nada.

Entonces lo que pienso que habria que hacer es, si por ejemplo vas a traducir en el zlib aleman (ya que ocupa mas y te daria mas chance de meter frases mas largas), quedarse con el principio del resources.res, desde el primer byte hasta 1483101395 (¿o 1483101395-1? bueno, habria que verlo, que incluya justo hasta el byte inmediatamente anterior al bloque zlib). Luego otro trozo desde 1483101395+132942 hasta el final del archivo. Y entonces vas traduciendo. Y lo comprimes con zlib. Y habria que pegar el primer trozo+tu trozo traducido comprimido con zlib+el final del archivo.

A ver si hago alguna prueba y veo si el juego traga.

Tambien comentar que si descomprimimos los dos primeros streams zlib y los pasamos por la herramienta binwalk, segun esta aparentemente estan cifrados con "mcrypt 2.2 encrypted data, algorithm: blowfish-448, mode: CBC, keymode: 8bit". Para el tercero binwalk no dice nada.

Te adjunto los tres zlib comprimidos bien extraidos con el tamaño exacto y los tres zlib descomprimidos por si quieres echarle un vistazo.

https://www.mediafire.com/file/e435ka692m7wm46/pakolmo.7z/file

PD resources.res tiene nada mas y nada menos que 27.720 streams zlib :P



Desconectado gatuno

  • Deep Blue
  • ****
  • Mensajes: 979
  • Registrado: 11 Abr, 2018
  • gs South Georgia and the South Sandwich Islan
  • eterno aprendiz
    • Ver Perfil
Re:Compresión/descompresión ZLIB
« Respuesta #6 en: Abril 09, 2019, 10:55:20 am »
Pues hice una prueba modificando una frase y no traga. El juego no inicia. No he mirado mas.

No se si lo tienes ya resuelto.



Desconectado pakolmo

  • Webmasters
  • Master Control Program
  • *****
  • Mensajes: 2754
  • Registrado: 16 Ene, 2015
  • es España
  • Sexo: Masculino
    • Ver Perfil
Re:Compresión/descompresión ZLIB
« Respuesta #7 en: Abril 09, 2019, 15:23:09 pm »
No me había dado cuenta de tu explicación del otro día. Lo acabo de ver.

Lo único que se puede hacer es dejar el archivo final TEXTDB del mismo tamaño que el original, comprimirlo con un script llamado raw zlib y volverlo a importar con el mismo script que exporté los archivos.

Por otro lado, el juego puede pillar un archivo resource.gra como parche, aunque no he sabido generar un archivo pequeño que sirva.

Desconectado pakolmo

  • Webmasters
  • Master Control Program
  • *****
  • Mensajes: 2754
  • Registrado: 16 Ene, 2015
  • es España
  • Sexo: Masculino
    • Ver Perfil
Re:Compresión/descompresión ZLIB
« Respuesta #8 en: Abril 09, 2019, 16:40:45 pm »
No te preocupes más.

Es lo que comentaba. Reducir frases, ampliar otras y rellenar con espacios hasta conseguir un Textdb idéntico de tamaño. Compactar con todo el final lleno de ceros. E importar.

Todo ello con los scripts quickbms de ALuigi y la herramienta traductora de skaZZ que cambia punteros.

Lo de generar un mini resource.gra tipo parche no funciona.

Es lo único que se puede hacer y ya me sirve.

Desconectado gatuno

  • Deep Blue
  • ****
  • Mensajes: 979
  • Registrado: 11 Abr, 2018
  • gs South Georgia and the South Sandwich Islan
  • eterno aprendiz
    • Ver Perfil
Re:Compresión/descompresión ZLIB
« Respuesta #9 en: Abril 09, 2019, 22:29:36 pm »
Genial, animo con la traduccion y si necesitas algo silba. :)



Desconectado pakolmo

  • Webmasters
  • Master Control Program
  • *****
  • Mensajes: 2754
  • Registrado: 16 Ene, 2015
  • es España
  • Sexo: Masculino
    • Ver Perfil
Re:Compresión/descompresión ZLIB
« Respuesta #10 en: Abril 11, 2019, 00:58:23 am »
Alguien se anima a mirarme las 4 fuentes de letra del juego?

Son fuentes que contienen todos los carácteres checos, alemán e inglés. Incluye "á,é,í,ó,ú", el problema es que no incluye "¡ ni ¿"

La fuente principal es la "PISMOLAME.FNT"
Y si se consigue modificar, solo me serviría una fuente de exactamente mismo tamaño que la original.

https://www.dropbox.com/s/x0btoghxmkdrwtd/fuentes.7z?dl=0

EDITO: De momento tengo manualmente la "¡", me faltaría el "¿"
« Última modificación: Abril 11, 2019, 01:33:25 am por pakolmo »

Desconectado pakolmo

  • Webmasters
  • Master Control Program
  • *****
  • Mensajes: 2754
  • Registrado: 16 Ene, 2015
  • es España
  • Sexo: Masculino
    • Ver Perfil
Re:Compresión/descompresión ZLIB
« Respuesta #11 en: Abril 11, 2019, 12:02:27 pm »
Más menos que más pero he sacado algo parecido al “¿”...

Desconectado SkaZZ

  • HAL9000
  • ****
  • Mensajes: 2018
  • Registrado: 21 Nov, 2004
  • es España
  • Sexo: Masculino
  • ZzZzzZz... Dark Souls... ZzZzzZz...
    • Ver Perfil
Re:Compresión/descompresión ZLIB
« Respuesta #12 en: Abril 12, 2019, 18:43:18 pm »
¿Te sabes el formato de archivo o podrías darme alguna pista?



      //////       Hora de abandonware llegó, coge a tus
     (o   O)       amigos y vámonos. Con Kendo el friki y
       (_)         SkaZz el chiflado, lo pasaremos guay.
--oooO-----Oooo--  ¡Hora de abandonware!

Desconectado pakolmo

  • Webmasters
  • Master Control Program
  • *****
  • Mensajes: 2754
  • Registrado: 16 Ene, 2015
  • es España
  • Sexo: Masculino
    • Ver Perfil
Re:Compresión/descompresión ZLIB
« Respuesta #13 en: Abril 12, 2019, 21:19:06 pm »
Fuente PISMOMALE.FNT

La primera parte del archivo de una "?" es esta:


3F 00 00 00 FD FF FF FF 20 00 00 00 2B 45 02 00

3F 00 00 00     -> El "?" + 00 00 00 (común)
FD FF FF FF 20 -> común, + 20
00 00 00         -> común
2B 45 02 00    -> Puntero en el mismo archivo (02452B)

Si nos vamos a 02452B.

(cabecera)
20 00 4B 00 20 00 4B 00 20 00 4B 00 00 00 00 00 00 00 80 3F 02 00 CD CD 00 00 00 00 00 00 00 00 00 00 01 00 C1 C1 C1 C1 C1 C1 C1 C1 C1 C1 C1 C1 C1 C1 C1 C1 C1 09 44 00 00 02 01 00 02 02 00 02 03 00 02 82 03 01 03 45 03 00 03 03 00 00 02 00 00 01 00 00 00 00 00 C1 06 43 00 00 00 01 00 03 02 00 03 8A 03 01 03

(cuerpo)
43 03 00 02 02 00 00 01 00 00 C1 05 42 01 00 03 03 01 01 8F 03 01 03
42 02 01 00 00 00 01 C1 03 42 00 00 03 03 01 00 92 03 01 03

42 03 01 02 01 00 01 C1 02 41 01 00 03 87 03 01 03
43 53 51 53 9F 9F 9F DF DF DF 82 FF FF FF 44 EF EF EF BF BF BF 7F 7F 7F 23 21 23 86 03 01 03

41 02 00 01 C1 01 41 01 00 01 85 03 01 03
43 13 11 13 7F 7F 7F EF EF EF 89 FF FF FF 42 BF BF BF 33 31 33 85 03 01 03

41 02 00 01 C1 42 00 00 01 03 01 02 84 03 01 03
42 73 71 73 EF EF EF 8D FF FF FF 41 8F 8F 8F 85 03 01 03
etc...

(final)
42 03 01 00 01 00 00 C1 08 46 00 00 03 01 00 03 02 00 03 03 00 00 02 00 00 01 00 00 C1 C1 C1 C1 C1 C1 C1 C1 C1 C1 C1 C1 C1 C0


Como ves la pista está en el 03 01 03

Va en bloques de 2 para dibujar algo.



Desconectado pakolmo

  • Webmasters
  • Master Control Program
  • *****
  • Mensajes: 2754
  • Registrado: 16 Ene, 2015
  • es España
  • Sexo: Masculino
    • Ver Perfil
Re:Compresión/descompresión ZLIB
« Respuesta #14 en: Abril 13, 2019, 05:45:21 am »
Un nuevo descubrimiento:

En la cabecera:
C1 C1 C1 C1 C1 C1 C1 C1 C1 C1 C1 C1 C1 C1 C1 C1 C1

Cuantos más C1 la letra se dibuja más hacia abajo.

SkaZZ, déjalo, ya tengo mi "¿" que da bastante el pego. Muchas gracias!!! ;D

« Última modificación: Abril 13, 2019, 07:28:49 am por pakolmo »