Autor Tema: Como recomprimir con REFLATE / How to recompress with REFLATE  (Leído 1250 veces)

Fl0ppy

  • Administrador
  • Usuario Héroe
  • *****
  • Mensajes: 7610
Como recomprimir con REFLATE / How to recompress with REFLATE
« en: 12 de Marzo de 2017, 05:33:31 pm »
Otro día y  otro tutorial  :D

En este caso se hablará del REFLATE, que principalmente es para trabajar con compresiones ZLIB/DEFLATE/ZIP


MINI-FAQ:
=======
P-¿Si ya uso el pZzlib tengo de usar este?
R-No, con el pZlib ya vas bien

P-¿Que diferéncias hay entre este y el pZlib?
R-P7zlib se ayuda de usar las librerias de REFLATE en caso de que no consiga extrar los datos adecuadamente

P-¿Y que pasa con precomp?
R-Llevo con ese programa desde sus inicios, su autor decidió de abrir el código lo cual para mi y cualquier otro que le guste trastear y hacer modificaciones o ver como funciona es ideal, si bien está algo verde en algunas cosas, el cual REFLATE lo supera

P-¿Cuando tengo de usar reflate o precomp?
R-Por norma general si ves que con precomp te da malos resultados prueba con REFLATE, si eres vago y pasas de hacer tests usa directamente REFLATE o pZlib (recomendando este último).

P-Vale ¿pero que recomiendas?
R-Ya lo he dicho, creo,  pZlib con parámetros de REFLATE

Vamos a examinar el programa

Una vez descargado (está adjunto) veremos que hay varios .exe y .bat

Quote (selected)
254,464 nz.exe
 71,680 raw2hif.exe
 25,600 rawdet.exe
  4,096 rawrest.exe
    528 reflate_c.bat
 22,528 reflate_c.exe
    303 reflate_d.bat
 22,528 reflate_d.exe

nz= nanozip

raw2hif =convierte los raw a hif previamente los descomprime, los hif son "parches" (como xdelta) para cuando se restauran lso datos sean 100% igual al original, depende de lo complejo que sea el fichero el .hif será más grande o no.

rawdet = Detector de compresiones del .raw (ficheros comprimidos)

rawrest = Para "restaurar" los datos

Después tenemos los .bat que tienen variables para comprimir y descomprimir (véase la letra c y d)

Ahora vamos a modificar el .bat para descomprimir ficheros

ORIGINAL
Spoiler for Hiden:
Quote (selected)
@echo off

cls

if not (%level%)==() set level=6

echo Recompressing file: %1

rmdir /s /q temp
mkdir temp

rawdet %1 temp\.out temp\.str temp\

echo Processing extracted deflate streams
for %%a in (temp\*.raw) do (
  raw2hif c%level% %%a temp\%%~na.unp temp\%%~na.hif
)

:goto Quit
del temp\*.raw

echo %1 > temp\.nam

nz a -cn -nt -np -r %2 temp\*.*
rem plzma c %1 %~n1.ref0 27 9999 273 8 0 0

rem del temp\*.hif
rem shar a - temp\ | plzma c - %~n1.refx 27 9999 273 8 0 0

rmdir /s /q temp


VERSION MODIFICADA que nos ahorra de usar el nanozip (recomiendo usar este código y guardarlo como .bat)
Spoiler for Hiden:
Quote (selected)
@echo off

cls

if not (%level%)==() set level=6

echo Recompressing file: %1

rmdir /s /q temp
mkdir temp

rawdet %1 temp\.out temp\.str temp\

echo Processing extracted deflate streams
for %%a in (temp\*.raw) do (
  raw2hif c%level% %%a temp\%%~na.unp temp\%%~na.hif
)

:goto Quit
del temp\*.raw

echo %1 > temp\.nam

rmdir /s /q temp

Os explico por encima que hace este .bat

if not (%level%)==() set level=6 => Variable para nivel de compresión, por defecto es 6, ya va bien así, si quremos mejorarla le podemos poner hasta level 9

rawdet %1 temp\.out temp\.str temp\ => Detecta y extrae fichero raw en un directorio tempora, el fichero .out son los datos no extraidos

for %%a in (temp\*.raw) do (
  raw2hif c%level% %%a temp\%%~na.unp temp\%%~na.hif
=> Cada %%a es un .raw, el comando seria, cada .raw que encuentres llama al programa raw2hif  con el nivel de compresión, descomprimelo a .unp y haz un parche diferencial .hif

Para que quede más claro

Quote (selected)
raw2hif c6 fichero.raw temp\fichero.unp temp\fichero.hif

Para ejecutar el .bat

Quote (selected)
reflate_c.bat datos.zip

Asi seria a grandes rasgos como extrae los datos, para recuperarlo ya directament os pongo una utilidad que hizo KPS que solo se ha de ejecutar donde estén los datos extraidos, que se llama hif2raw, es necesario que tengas los ficheros raw2hif.exe y rawrest.exe para que funcione, principalmente es un contador y usa el nivel de compresión 6

Para más info os podeis dirigir al autor del REFLATE
https://encode.ru/threads/1399-reflate-a-new-universal-deflate-recompressor/page1
Siempre que pasa igual sucede lo mismo