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?
import time
import os
import random
def gen_all_hex():
i = 0
while i < 16**72:
yield "{:072X}".format(i)
#i += 1
i += random.randint(1, 1)
time.sleep(.1) # Wait 100ms
for s in gen_all_hex():
print (s)
os.system('%s %s' % ('dmg.exe extract 058-07911-219.dmg 058-07911-219d.dmg -k', s))
#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:
Cita de: AngelFire en 21 Febrero 2017, 09:59 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:
# -*- coding: UTF-8 -*-
import os, random as rand, subprocess as sp, sys, time
def gen_all_hex():
i = 0
while i < 16**72:
yield "{:072X}".format(i)
#i += 1
i += rand.randint(1, 1)
time.sleep(.1) # Wait 100ms
for s in gen_all_hex():
print (s)
proc = sp.Popen('%s %s' % ('dmg.exe extract 058-07911-219.dmg 058-07911-219d.dmg -k', s), stdout=sp.PIPE)
stdout = proc.communicate()[0]
ret = proc.returncode
if ret == 0:
print 'Successful extraction!'
break
sys.exit(0)
¡Saludos!.