Brute Force en Python hacia un DMG

Iniciado por AngelFire, 21 Febrero 2017, 09:59 AM

0 Miembros y 1 Visitante están viendo este tema.

AngelFire

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 (Python) [Seleccionar]
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:

Eleкtro

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:
Código (python) [Seleccionar]
# -*- 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!.