Este es el código del script:
Código: Seleccionar todo
#! /usr/bin/env python
import re
# Extract and backup the old ICON0.PNG
x = open("EBOOT.PBP","r").read(512000).encode("hex")
y = open("icon0_old.png","w")
r = re.compile("504e47(.*?)49454e44ae426082")
m = r.search(x)
icon = "89" + m.group()
y.write(icon.decode("hex"))
y.close()
# Replace ICON0.PNG with the new one
x = open("EBOOT.PBP","rb").read().encode("hex")
r = re.compile("504e47(.*?)49454e44ae426082")
m = r.search(x)
icon_old = "89" + m.group()
icon_new = open("icon0.png","rb").read().encode("hex")
x = x.replace(icon_old, icon_new)
open("EBOOT.PBP","wb").write(x.decode("hex"))
acontinuación una breve explicación de su funcionamiento.
Extracción
Código: Seleccionar todo
import re
Código: Seleccionar todo
x = open("EBOOT.PBP","r").read(512000).encode("hex")
Código: Seleccionar todo
y = open("icon0_old.png","w")
Código: Seleccionar todo
r = re.compile("504e47(.*?)49454e44ae426082")
Código: Seleccionar todo
m = r.search(x)
Código: Seleccionar todo
icon = "89" + m.group()
Código: Seleccionar todo
y.write(icon.decode("hex"))
Reemplazo
Código: Seleccionar todo
x = open("EBOOT.PBP","rb").read().encode("hex")
Código: Seleccionar todo
r = re.compile("504e47(.*?)49454e44ae426082")
m = r.search(x)
icon_old = "89" + m.group()
Código: Seleccionar todo
icon_new = open("icon0.png","rb").read().encode("hex")
Código: Seleccionar todo
x = x.replace(icon_old, icon_new)
Código: Seleccionar todo
open("EBOOT.PBP","wb").write(x.decode("hex"))
No ha sido tan dificil y en general se puede aplicar la misma regla a otros archivos del eboot, como el ELF. Por si no lo sabíais los pbp no es mas que una concatenación de archivos y usa metadatos para saber donde empieza y acaba un archivo, en este caso los metadatos son 504e47 para el comienzo y 49454e44ae426082 para el final.