elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Ingeniería Inversa (Moderadores: karmany, .:UND3R:., MCKSys Argentina)
| | |-+  Ayuda para identificar algoritmo de compresion zlib
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda para identificar algoritmo de compresion zlib  (Leído 2,094 veces)
_TTFH_3500

Desconectado Desconectado

Mensajes: 123



Ver Perfil
Ayuda para identificar algoritmo de compresion zlib
« en: 24 Diciembre 2021, 16:26 pm »

Hola, tengo un archivo que fue comprimido con zlib y estoy tratando de averiguar el método que fue utilizado para comprimirlo.

Este archivo en particular usa un nivel 9 de compresión, y por lo que pude descifrar la entrada se divide en bloques de 8KiB, y se hace Z_SYNC_FLUSH luego de comprimir cada bloque, pero cada 8 bloques el algoritmo parece hacer otra cosa.

Este es el código que escribí para descomprimir y comprimir el archivo.
Para descomprimir funciona bien, pero solo comprime correctamente los primeros 7 bloques del archivo.
Código
  1. import sys
  2. import zlib
  3.  
  4. # python3 zlib-flate.py -d output.bin input.bin
  5. # python3 zlib-flate.py -9 input.bin output_test.bin
  6.  
  7. def usage():
  8. print("Usage:")
  9. print(f"python3 {sys.argv[0]} -[1-9,d] input.bin output.bin")
  10. exit()
  11.  
  12. def main():
  13. argc = len(sys.argv)
  14. if argc != 4:
  15. usage()
  16. try:
  17. if sys.argv[1] == "-d":
  18. # Decompress file
  19. with open(sys.argv[2], "rb") as input_file, open(sys.argv[3], "wb") as output_file:
  20. data = input_file.read()
  21. comp_obj = zlib.decompressobj()
  22. data_plain = comp_obj.decompress(data)
  23. output_file.write(data_plain)
  24. else:
  25. # Compress file
  26. level = -int(sys.argv[1])
  27. if level < 1 or level > 9:
  28. print("Invalid compression level")
  29. with open(sys.argv[2], "rb") as input_file, open(sys.argv[3], "wb") as output_file, open("output.bin", "rb") as test_file:
  30. comp_obj = zlib.compressobj(level)
  31. data = input_file.read(8 * 1024) # Read block of 8KiB
  32. i = 1
  33. while data != b"":
  34. data_zip = comp_obj.compress(data)
  35. data_zip += comp_obj.flush(zlib.Z_SYNC_FLUSH)
  36.  
  37. # Check if compressed data differs
  38. lenght = len(data_zip)
  39. data_test = test_file.read(lenght)
  40. if data_zip == data_test:
  41. print(f"Block #{i}: correctly compressed")
  42. else:
  43. print(f"Block #{i}: invalid data")
  44. exit()
  45.  
  46. output_file.write(data_zip)
  47. data = input_file.read(8 * 1024)
  48. i = i + 1
  49. print("File compressed correctly!")
  50. except (IOError, ValueError) as error:
  51. print("Invalid parameters")
  52.  
  53. main()
  54.  

Archivo comprimido con zlib:
https://mega.nz/file/8a5C1SyQ#xqy9nCycTrWfrnwuvWa39xd128s9huSFuf8kOr6kK8Q

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con algoritmo de compresion
Programación Visual Basic
Daedalus 2 1,943 Último mensaje 14 Abril 2006, 01:31 am
por Cicklow
Python - Algoritmo de compresión
Scripting
h0oke 3 10,442 Último mensaje 28 Diciembre 2021, 17:33 pm
por luu_cuuesta
Cracked SmartFTP - aPLib compresion (Algoritmo).
Ingeniería Inversa
Иōҳ 0 3,892 Último mensaje 9 Abril 2011, 19:27 pm
por Иōҳ
Algoritmo compresión sin perdida.
Programación General
m0rf 7 5,344 Último mensaje 26 Enero 2012, 00:36 am
por [Case]
[RETO] Algoritmo de compresión
Programación General
fary 7 3,424 Último mensaje 17 Febrero 2015, 23:19 pm
por fary
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines