Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: AngelFire en 21 Febrero 2017, 09:59 am



Título: Brute Force en Python hacia un DMG
Publicado por: AngelFire en 21 Febrero 2017, 09:59 am
Buenas, sin saber mucho de python se me ha ocurrido hacer este script para sacar la key de un fichero .dmg (058-07911-219.dmg) contenido en un fichero .ipsw (iPad2,1_9.0_13A344_Restore.ipsw). Algo que según tengo entendido por la cantidad combinaciones es imposible de romper en la actualidad ya que hablamos de una longitud de 72 caracteres en formato hexadecimal. Por lo cual he tomado un random en el incremento del conteo para poder jugar con el factor suerte que no esta de nuestro lado  ;D si nos vamos a probabilidades.
 
Evidentemente la key de ese fichero no se obtuvo mediante fuerza bruta.

La duda:
¿Si por casualidad de la vida se generará la key valida de 72 caracteres en formato hexdecimal (f44e1a776ad2f2f2d8ecc2befee610ea4536a37713a83db0396835c74c1b2af3343fd433), como notificar o detener el script?

Código
  1. import time
  2. import os
  3. import random
  4.  
  5. def gen_all_hex():
  6.    i = 0
  7.    while i < 16**72:
  8.        yield "{:072X}".format(i)
  9.        #i += 1
  10.        i += random.randint(1, 1)
  11.        time.sleep(.1) # Wait 100ms
  12.  
  13.  
  14. for s in gen_all_hex():
  15.    print (s)
  16.    os.system('%s %s' % ('dmg.exe extract 058-07911-219.dmg 058-07911-219d.dmg -k', s))
  17.    #os.system('dmg.exe extract 058-07911-219.dmg 058-07911-219d.dmg -k f44e1a776ad2f2f2d8ecc2befee610ea4536a37713a83db0396835c74c1b2af3343fd433')

Para mas información sobre lo que intento con mi absurdo script pueden referirse a https://www.theiphonewiki.com/wiki/Firmware_Keys/9.x

Gracias por leer y cualquier comentario o contribución es bienvenida. :rolleyes:


Título: Re: Brute Force en Python hacia un DMG
Publicado por: Eleкtro en 22 Febrero 2017, 05:07 am
¿Si por casualidad de la vida se generará la key valida de 72 caracteres en formato hexdecimal (f44e1a776ad2f2f2d8ecc2befee610ea4536a37713a83db0396835c74c1b2af3343fd433), como notificar o detener el script?

Hola.

Desconozco de donde sale ese misterioso proceso "dmg.exe", pero en el hipotético caso de que haya sido desarrollado profesionálmente entonces el proceso debería terminar su ejecución devolviendo un código de salida (0, 1, etc) correspondiente al estado exitoso o no de la extracción. Asumiendo esto, entonces puedes resolver el problema por ejemplo haciendo uso del módulo subprocess para evaluar el código de salida de dicho proceso y terminar el ciclo en caso de que el código de salida sea satisfactorio (dicho código de salida suele ser un cero, pero dependiendo del programador puede especificar un código específico, distinto)...

Ejemplo:
Código
  1. # -*- coding: UTF-8 -*-
  2.  
  3. import os, random as rand, subprocess as sp, sys, time
  4.  
  5. def gen_all_hex():
  6.  i = 0
  7.  while i < 16**72:
  8.    yield "{:072X}".format(i)
  9.    #i += 1
  10.    i += rand.randint(1, 1)
  11.    time.sleep(.1) # Wait 100ms
  12.  
  13. for s in gen_all_hex():
  14.  print (s)
  15.  proc   = sp.Popen('%s %s' % ('dmg.exe extract 058-07911-219.dmg 058-07911-219d.dmg -k', s), stdout=sp.PIPE)
  16.  stdout = proc.communicate()[0]
  17.  ret    = proc.returncode
  18.  if ret == 0:
  19.    print 'Successful extraction!'
  20.    break
  21.  
  22. sys.exit(0)

¡Saludos!.