Advertisement
TrackMaze

brute_file_carving

Apr 3rd, 2013
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.70 KB | None | 0 0
  1. #autor: @kr1shn4murt1
  2. #fecha: Nov 20 - 2012
  3. #!/usr/bin/env python
  4. #-*-coding:utf-8-*-
  5.  
  6. import binascii #Para manipular el contenido binario y hexadecimal del archivo
  7. import time     #Para controlar cuanto demora la ejecucion del script
  8.  
  9. horaInicio= time.time()
  10. print '\n \t Hora de inicio del script: ',time.ctime(horaInicio)
  11.  
  12. imagen = 'Test_Image.jpg' """Imagen de prueba que se descompondra en bytes para luego ser reensamblada
  13.              por partes"""
  14.  
  15. with open(imagen, 'rb') as f:
  16.     lecturaImagen = f.read() """Lectura imagen es la correcta representacion del contenido hexadecimal
  17.                  al imprimir solo imprime algunos caracteres, no todos"""
  18.  
  19.  
  20. lecturaHex = (binascii.hexlify(lecturaImagen)) """lecturaHex es la representacion humanamente visible
  21.                         del codigo hexadecimal al copiarlo de manera exacta a
  22.                         un archivo ejm una imagen no queda bien la imagen, hay
  23.                         que hacerle una transformacion antes"""
  24.  
  25. hexSecundario=binascii.a2b_hex(lecturaHex) """Asi se transforma para generar el archivo con el codigo
  26.                        hexadecimal"""
  27.  
  28. print "\n \t Hex reconstruido: ",hexSecundario,"\n"
  29.  
  30. print "\t Tamano del codigo hex a hacerle carving: ",len(lecturaHex),"\n"
  31. print "\t Tuplas del codigo hex + el footer \n"
  32.  
  33. footerArchivo="ffd9" #en el caso de ffd9 es una imagen jpg
  34.  
  35. j=1
  36.  
  37.  
  38. numeroBytes=32  """Numero de unidades de bytes en los que se quiere descomponer el archivo, un numero
  39.         mas pequenho requerira mas tiempo de procesamiento, si es una imagen muy pequenha de
  40.         aprox 4,2 KB usar 1, si la imagen es grande, 1 MB o más usar un numero grande cómo un
  41.         millon por que dependiendo del numero que usen se creará de manera proporcional el
  42.         mismo numero de imagenes en la carpeta desde donde lo ejecuten"""
  43.  
  44. numeroBytes=numeroBytes*2
  45. data = lecturaHex                  
  46. for i,item in enumerate(data[::numeroBytes]): """Este bloque divide el codigo hexadecimal en el número
  47.                         de bytes escogido para luego insertar despues de cada
  48.                         uno de ellos el footer del tipo de archivo deseado para
  49.                         intentar la recuperacion o carving del archivo mediante
  50.                             fuerza bruta"""
  51.    
  52.     tupla=str(data[:(i*numeroBytes)+numeroBytes:])
  53.     tupla+=footerArchivo
  54.     print "Tupla numero: ",j
  55.     print 'Valores: ',tupla,'\n'
  56.     j+=1
  57.  
  58.     nombreImagenGenerada="imagen"+str(j)+".jpg"
  59.     imagenes=open(nombreImagenGenerada,'wb')
  60.     imagenes.write(binascii.a2b_hex(tupla))
  61.     imagenes.close()
  62. print '\n \t Numero total de tuplas',j
  63.  
  64. horaFin= time.time()
  65. print '\n\t Hora de inicio del script: ',time.ctime(horaInicio)
  66. print '\t Hora de finalizacion del script: ',time.ctime(horaFin)
  67. tiempoEjecucion= horaFin-horaInicio
  68. print '\n \t La ejecucion tomo %s segundos\n\n'%str(tiempoEjecucion)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement