Romxhacking Romxhacking
- Nasío pa'jakear -
 
 F.A.Q.F.A.Q.   BuscarBuscar   Lista de MiembrosLista de Miembros   Grupos de UsuariosGrupos de Usuarios   RegístreseRegístrese 
 PerfilPerfil   Identifíquese para revisar sus mensajesIdentifíquese para revisar sus mensajes   ConectarseConectarse 


Menú principal
Portal
Foros
F.A.Q.
Buscar
Lista de miembros
Grupos de usuarios
Perfil

Usuario
Nombre de Usuario:

Contraseña:

 Recordarme



He olvidado mi contraseña

¿Aún no tiene su cuenta?
Puede registrarse Aquí, es GRATIS.


Anuncio del administrador
No pretendemos solucionar todos los problemas ni ser referencia de nada, simplemente nos reunimos aquí para charlar de nuestras cosas.
NO SE RESPONDERÁ A NADA POR PRIVADO, QUE EL FORO ESTÁ PARA ALGO

Información parches IPS
Ir a página 1, 2  Siguiente
 
Publicar Nuevo Tema   Responder al Tema    Romxhacking -> Dudas y Preguntas
Ver tema anterior :: Ver siguiente tema  
Autor Mensaje
Leeg



Sexo: Sexo:Hombre
Registrado: 20 Mar 2014
Edad: 26
Mensajes: 377
Estado: Offline
MensajePublicado: Tue Nov 11, 2014 7:22 pm    Título del mensaje: Información parches IPS Responder citando

¡Hola!

Estoy tratando de hacer un parcheador con interfaz y me preguntaba dónde puedo encontrar información sobre la estructura que siguen los parches IPS o... si me va a ser mejor y más fácil diseñar yo solo la interfaz y hacer que se ejecute en segundo plano un parcheador IPS de otra persona en consola...

Gracias ;D
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
CUE
Administrador
Administrador


Sexo: Sexo:Hombre
Registrado: 24 Jan 2011
Mensajes: 5435
Estado: Offline
MensajePublicado: Tue Nov 11, 2014 8:27 pm    Título del mensaje: Responder citando

Entiendo que lo que quieres es aplicar un parche IPS y no crearlo, así que allá va el rollo.

Un parche IPS se compone de:
- 5 bytes con la signatura "PATCH"
- chunks (me jode llamarlos registros)
- 3 bytes con la signatura "EOF"

Cada chunk tiene:
- 3 bytes con el offset <--- esto limita el parcheo a 16 megas, desde 0x000000 hasta 0xFFFFFF
- 2 bytes con la longitud a cambiar
- X bytes a sustituir

Si la longitud es 0 entonces se trata de un dato comprimido (es una simple RLE) y el registro completo sería:
- 3 bytes con el offset
- 2 bytes con el valor 0
- 2 bytes con la longitud
- 1 byte con el valor a repetir

Hay programas que no controlan bien los 3 bytes del offset, y cuando se encuentra el "EOF" final se cree que es el offset 0x464F5E y la lía parda.

Con eso ya deberías ser capaz de crear una simple rutinita para aplicar cualquier parche.
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
Leeg



Sexo: Sexo:Hombre
Registrado: 20 Mar 2014
Edad: 26
Mensajes: 377
Estado: Offline
MensajePublicado: Tue Nov 11, 2014 9:04 pm    Título del mensaje: Responder citando

¡Muchas gracias!

A ver si me sale, porque parece difícil, he encontrado un código fuente para parchear en PHP y me ha dado miedito XD Yo voy a probar con C#.
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
CUE
Administrador
Administrador


Sexo: Sexo:Hombre
Registrado: 24 Jan 2011
Mensajes: 5435
Estado: Offline
MensajePublicado: Wed Nov 12, 2014 5:30 pm    Título del mensaje: Responder citando

Es muy simple. Lo único a tener en cuenta es el "EOF". Puede darse el caso de que un offset tenga el valor 0x464F5E, que no sería un "EOF" real, así que sólo se debe terminar el proceso cuando aparece el "EOF" y no haya más información en el fichero IPS. Más o menos sería así:
Código:
read (IPS, SIGNATURA)
if SIGNATURA != "PATCH" error
while 1 {
  read (IPS, OFFSET)
  if OFFSET == "EOF" exit // <--- sólo si eran los 3 últimos bytes
  seek (FILE, OFFSET)
  read (IPS, LEN)
  if LEN != 0 {
    while (LEN--) {
      read (IPS, CH)
      write (FILE, CH)
    }
  } else {
    read (IPS, LEN)
    read (IPS, CH)
    while (LEN--) {
      write (FILE, CH)
    }
  }
}
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
Leeg



Sexo: Sexo:Hombre
Registrado: 20 Mar 2014
Edad: 26
Mensajes: 377
Estado: Offline
MensajePublicado: Wed Nov 12, 2014 6:28 pm    Título del mensaje: Responder citando

¡Gracias por la información!

Al final creo que lo voy a hacer para xdelta en vez de IPS, porque son parches universales que me valdrán para todo, los IPS están muy limitados de tamaño... Originalmente la idea era hacer esto para el parche de Shining Force II de mi compañero de blog, pero hemos decidido convertir ese parche a xdelta mejor, así lo que programe servirá para todos los parches que saquemos, que es más razonable, creo.
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
Leeg



Sexo: Sexo:Hombre
Registrado: 20 Mar 2014
Edad: 26
Mensajes: 377
Estado: Offline
MensajePublicado: Fri Nov 14, 2014 5:43 pm    Título del mensaje: Responder citando

Una pregunta muy estúpida, porque estoy programando esto y algo no me cuadra...

¿Xdelta3 no puede aplicar parches sobre un mismo archivo? Es decir, ¿es necesario que se cree siempre un nuevo archivo? ¿No se puede aplicar el parche sobre el original?
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
CUE
Administrador
Administrador


Sexo: Sexo:Hombre
Registrado: 24 Jan 2011
Mensajes: 5435
Estado: Offline
MensajePublicado: Fri Nov 14, 2014 5:58 pm    Título del mensaje: Responder citando

Es que no tiene sentido que se aplique el parche al mismo fichero. Con un ejemplo un poco tonto se ve mejor.

Imagina que donde originalmente hay una 'A' ahora quieres poner 'EO'. Eso te cambiaría el byte 'A' original por 'E' y el siguiente por 'O', pero no es eso lo que queremos. Se podría hacer si hacemos una copia del original, que sería con la que se trabajaría, pero hay que hacer la copia y luego borrarla, que es más trabajo que crear el fichero final.

También puedes verlo al revés. Cambiar un 'EO' por 'A', con lo que el fichero final debe ser de menor tamaño, y tendríamos que hacer más trabajo que creando el fichero final.
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
Leeg



Sexo: Sexo:Hombre
Registrado: 20 Mar 2014
Edad: 26
Mensajes: 377
Estado: Offline
MensajePublicado: Fri Nov 14, 2014 6:21 pm    Título del mensaje: Responder citando

¡Muchas gracias!

Es que había programado por mi cuenta que se creara una copia de seguridad de la ROM antes de ser parcheada... pero si xdelta3 no permite aplicar el parche sobre la propia ROM de origen, mi copia de seguridad no me sirve de nada, porque se tiene que acabar creando forzosamente otra ROM distinta.
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
Leeg



Sexo: Sexo:Hombre
Registrado: 20 Mar 2014
Edad: 26
Mensajes: 377
Estado: Offline
MensajePublicado: Sat Nov 15, 2014 12:16 pm    Título del mensaje: Responder citando

Pues ya lo he acabado, lo he subido a github por si alguien quiere reciclarlo ya que cambiar el diseño con Visual Studio sin tocar el código es fácil (siempre teniendo en cuenta que esto es la primera vez que toco C# y el código tiene que estar horrible).

https://github.com/Artuvazro/patcherxd3
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
CUE
Administrador
Administrador


Sexo: Sexo:Hombre
Registrado: 24 Jan 2011
Mensajes: 5435
Estado: Offline
MensajePublicado: Sat Nov 15, 2014 12:57 pm    Título del mensaje: Responder citando

Yo voy a hacer de abogado del diablo, que es la forma fina de decir que hoy no tengo nada mejor que hacer que meterme contigo un poco, sobre todo con dos aspectos que no están muy bien vistos Twisted Evil Twisted Evil Twisted Evil

¿Por qué el parcheador debe funcionar exclusivamente en máquinas de 64 bits? Debe ser una utilidad tan simple como el parche, que pueda usarse por cualquier usuario independientemente del equipo que tenga.

¿Por qué se deben ocultar los programas de terceros? En tu caso estás usando XDELTA3, que tiene ciertas condiciones para su distribución y las ignoras.
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
Leeg



Sexo: Sexo:Hombre
Registrado: 20 Mar 2014
Edad: 26
Mensajes: 377
Estado: Offline
MensajePublicado: Sat Nov 15, 2014 1:24 pm    Título del mensaje: Responder citando

Me gusta el feedback, y si es destructivo mejor XD

Lo de los 64 bits no lo entiendo, si en el compilador puse any CPU y preferencia de 32 bits :S déjame que lo revise...




Edito: Vale, que lo que es para 64bits es el exe de xdelta3, se me ha colado. Lo cambio.

Respecto a lo de la licencia, estuve mirando antes de hacer nada las condiciones de distribución de xdelta aquí: (pero no está muy bien redactado y no me ha quedado claro del todo... viendo los comentarios parece que no soy el único)
https://code.google.com/p/xdelta/wiki/LicensingXdelta

"You may use and distribute the Xdelta executable (i.e., the command-line program) without an excemption to the GPL"

Supuestamente puedes usarlo y distribuirlo si el programa donde lo metes tiene una licencia GPL, ¿no? Lo que he subido yo a GIT no tiene licencia alguna así que entiendo que también es válido, pero corrígeme si me equivoco que no quiero líos después XD

Edito: Le pondré que tiene licencia GPL también por si las moscas.
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
CUE
Administrador
Administrador


Sexo: Sexo:Hombre
Registrado: 24 Jan 2011
Mensajes: 5435
Estado: Offline
MensajePublicado: Sat Nov 15, 2014 4:24 pm    Título del mensaje: Responder citando

El problema con XDELTA es que no estás distribuyendo el ejecutable, lo pones "oculto" para que no se vea, que es lo que viola con nocturnidad y alevosía la licencia (es lo que pasa por ir escrita con minifalda, que va provocando, y luego pasa lo que pasa).

Muchos lo hacen así y no es la forma correcta, aunque tampoco es que vayan a ir a por ti a cortarte las pelotas con una motosierra por eso. Para evitarme líos, yo siempre he optado por un simple fichero batch acompañando al ejecutable, y si alguien quiere añadir el GUI que existe por ahí es libre de hacerlo. Así me quito el marrón de encima y, además, sudo lo menos posible, que hay que ver lo cara que está la energía últimamente.

Supongo que también es cuestión de cada uno. Yo, al igual que me gusta que respeten mi trabajo, procuro respetar el de los demás.

La norma general, no escrita, es que para ROM de juegos de consolas antiguas, las mal llamadas "clásicas", se use un simple IPS porque el juego no pasa de 16 megas, que es la razón de ser de la limitación de los IPS. Más que nada es porque existen emuladores, que es donde se usarán normalmente, que permiten cargar el juego original y aplicar el parche al vuelo. Otra razón es que así se pueden aplicar varios parches al mismo juego, que es otra de las ventajas de los IPS al no controlar CRC ni checksums. Para cosas más gordas, como ROM de consolas modernas o ISO, se usa normalmente XDELTA o PPF.

En tu caso a lo mejor deberías echar un vistazo a IPSEXE15, que transforma el IPS en un ejecutable, pudiendo incluso añadir la comprobación de CRC, añadir una descripción y poder mirar un "readme.txt", todo ello ocupando una mierdecilla. Un ejemplo:
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
Leeg



Sexo: Sexo:Hombre
Registrado: 20 Mar 2014
Edad: 26
Mensajes: 377
Estado: Offline
MensajePublicado: Sat Nov 15, 2014 4:31 pm    Título del mensaje: Responder citando

Gracias por la información y el programilla ese.

Respecto a lo otro, si libero el código fuente donde el exe no va oculto, (que ya lo he hecho) y lo pongo al mismo nivel de licencia que xdelta3 (que ya lo he hecho también), debería estar todo "guay" ¿no?

Otra opción es enviarle un correo al autor, cosa que no me importa nada hacer y preguntarle.

De todas formas, eso de que vaya oculto o no, si pudieras enlazarme a algún lado donde se explique te lo agradecería, porque yo he estado leyendo y no he visto nada de eso :S
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
CUE
Administrador
Administrador


Sexo: Sexo:Hombre
Registrado: 24 Jan 2011
Mensajes: 5435
Estado: Offline
MensajePublicado: Sat Nov 15, 2014 4:41 pm    Título del mensaje: Responder citando

A mí me da que te estás liando. Si lo que quieres es liberar el código de una tool para aplicar parches, vale, pero si lo que quieres es publicar un parcheador para un juego, ¿qué sentido tiene el código fuente? No le va a interesar a nadie, y lo que más te van a pedir es que les pases el juego ya parcheado (si es que los traductores sois mala gente, que hacéis trabajar a los demás en vez de subir todo hecho ya a mega, panda de vagos).

Lo de "oculto" o no está claro, al menos para mí. La licencia dice que puedes distribuir el ejecutable, pero tú no lo haces, estás usándolo de forma oculta, sin que la gente se entere, y eso no se puede considerar "distribuir", es un simple "uso".
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
Leeg



Sexo: Sexo:Hombre
Registrado: 20 Mar 2014
Edad: 26
Mensajes: 377
Estado: Offline
MensajePublicado: Sat Nov 15, 2014 4:48 pm    Título del mensaje: Responder citando

Liberar el código fuente del programa es obligatorio según las restricciones del autor, por eso lo hago:

Cita:
You may use and distribute the Xdelta executable (i.e., the command-line program) without an excemption to the GPL. If your program integrates directly with Xdelta at the API level, if you "link" directly to the Xdelta API, you must either distribute your source according to the terms of the GPL


El fin último es usarlo como parcheador, claro, pero liberar el código es un requisito según eso. ¿Me explico?

Y yo no entiendo que oculte a la gente nada, si en el readme del código fuente pongo que se usa. De todas formas le voy a preguntar al autor por correo, que no me cuesta nada y salimos de dudas para siempre XD

Edito: Vaya hombre, se le ha jodido a Google el captcha-antispam para los correos... no puedo ver su dirección entera, le dejaré una pregunta en la página de licencias.

Edito 2: Aquí si viene algo de lo que tú dices, pero solo si le das un uso comercial:
Cita:
No obstante, en muchos casos usted puede distribuir el software cubierto por la GPL junto a su sistema privativo. Para hacerlo de forma válida, debe asegurarse de que los programas libres y privativos se comunican a distancia, de que no estén combinados de ninguna manera que los convierta de hecho en un solo programa.


Y respecto a la distribución del código fuente:
Cita:
¿Cómo puedo asegurarme de que todo usuario que se baje los binarios obtenga también los archivos fuente?
No tiene por qué asegurarse de esto. Mientras publique los archivos fuente y los binarios de manera que los usuarios puedan ver lo que hay disponible y tomen lo que deseen, usted ya ha hecho todo lo que se le pide. Que el usuario se baje o no los archivos fuente depende de él.
El propósito de nuestros requisitos para los redistribuidores es asegurarnos de que los usuarios puedan acceder al código fuente, no forzar a los usuarios a bajárselo aun cuando no quieran hacerlo.


http://www.gnu.org/licenses/gpl-faq.html
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
Mostrar mensajes anteriores:   
Publicar Nuevo Tema   Responder al Tema    Romxhacking -> Dudas y Preguntas Todas las horas están en GMT + 1 Hora
Ir a página 1, 2  Siguiente
Página 1 de 2

 
Saltar a:  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

Temas Relacionados
 Temas   Respuestas   Autor   Lecturas   Último Mensaje 
No hay mensajes nuevos Estoy buscando parches españoles de GB/GBx 5 CUE 2966 Wed Aug 27, 2014 8:43 am
CUE Ver último mensaje
No hay mensajes nuevos Como hacer una tabla hexadecimal 49 TDW 9767 Mon May 21, 2012 8:10 am
CUE Ver último mensaje
No hay mensajes nuevos ¿De poder hacer un hack que harías? 6 gadesx 2544 Mon Feb 06, 2012 2:08 am
pleonex Ver último mensaje
No hay mensajes nuevos "Duke Nukem Forever", no me lo puedo de creer, fis 12 CUE 4452 Wed Jan 18, 2012 1:29 pm
Drawde Ver último mensaje
No hay mensajes nuevos Nintendo prepara aceite para hacer muchos refritos 3 gadesx 2131 Tue May 03, 2011 12:40 pm
raul371 Ver último mensaje
 


Crear foro gratis - Powered by phpBB © 2001, 2005 phpBB Group
subRebel style by ktauber