Hola,me gustaria saber como modificar un juego desde un archivo binario(bin,dat)

Iniciado por Fera Core, 20 Abril 2016, 03:34 AM

0 Miembros y 2 Visitantes están viendo este tema.

Fera Core

 :D

Hola tengo un proyecto en cual tengo que modificar el juego que elegi Uniting Barrage Action (Touhou) , quiero traducirlo al español ya que no hay parches, y lo compartire.
tengo que ser mas modificaciones para que me hagan valido el proyecto y quisiera saber algunos consejos, recomendaciones de como abrir un archivo binario , modificarlo y guardarlo para usarlo como un parche.

Gracias por su atencion


HardForo

Tamaño de los archivos a modificar ?

Que has planteado hasta ahora ? muestra algo
HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *

MAFUS

Pregunta en el foro de ingeniería inversa.
Te diran como buscar y modificar cadenas dentro de los binarios.

Fera Core

#3
Uso turbo c++, lee el archivo .dat no se porque me da error al abrir .bin(ya lo eh probado con  strcat(NombreArchivo, ".bin");) bueno lo que lee y guarda  en texta me sale sibolos codigo ancii y no se como descodificarlos

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>



void limpriarCadena(char cad[], int n) {

    for(int i = 0; i < n; i++) {

   cad = '\0';
    }
}

int main() {

    char Unidad[3];
    char Ruta[150];
    char RutaAbsoluta[150];
    char NombreArchivo[50];
    char c=' ';
    FILE *F,*N;


do {
   clrscr();//limpiar la ubicacion cada vez que se cicle
   limpriarCadena(Unidad, 2);
   limpriarCadena(Ruta, 150);
   limpriarCadena(RutaAbsoluta, 150);
   limpriarCadena(NombreArchivo, 50);

   printf("\n -Ingresa la letra de la unidad de tu dispositivo(C,D,F...):\n-> ");
   scanf("%c", &Unidad[0]);
   strcat(Unidad, ":\\");
   strcpy(RutaAbsoluta, Unidad);

   printf("\n -Ingresa la ruta del archivo(deja en blanco si esta en la raiz):\n-> %s", Unidad);
   while(getchar()!='\n');
   gets(Ruta);
   if(strlen(Ruta)!=0) {

       strcat(RutaAbsoluta, Ruta);
       strcat(RutaAbsoluta, "\\");
   }

   printf("\n Ingresa el nombre del archivo binario (.dat) que desea abrir: \n");
   gets(NombreArchivo);
   strcat(NombreArchivo, ".dat");
   strcat(RutaAbsoluta, NombreArchivo);


   F = fopen("M_juego.txt", "rb");

   if(F == NULL) {

             printf("\n\n Error al abrir el archivo! Intenta de nuevo...\nPresiona enter para continuar...");
         while(getchar()!='\n');
            }

     } while(F == NULL);// cierro ciclo DO WHILE

     clrscr();

     printf("\n  Texto en:  %s\n\n", RutaAbsoluta);  // imprime la ruta del archivo
   N = fopen("M_juego.txt", "wb");

   printf("El respaldo se creo correctamente ");
   while(!feof(F)) {

             c = getc(F);
         fprintf(N,"%c",c);
             printf("%c", c);

         }
       puts("Copia de seguridad creada con exito");
       fclose(F);
       fclose(N);

   getch();

   return 0;
}



MOD EDIT: Usar etiquetas GeSHi y no duplicar posts.

HardForo

Cuanto mide el archivo origen ? cuanto mide el archivo destino ?

Si los ves con un editor...... ves lo mismo ?
HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *

Fera Core

soy un estudiante que esta investigando como abrir un archivo bin o dat para modificarlo, pero no se como descodificar el codigo ansii, nesecito buscar donde puedo traducirlo. Ya que hay muchos archivos .dat

HardForo

Simplemente buscas una cadena y la reemplazas por otra del mismo tamaño (si del mismo tamaño)

Y guardas el archivo modificado (puede ser el mismo) o uno nuevo.


PD: si conoces la estructura del archivo, ya puedes hacer otras cosas...... pero sino lo conoces no puedes cambiar el tamaño de los strings (ya que no sabes si son de longitud fija o variable) aunque claro podrias probar (verifica si hay un caracter terminador en las cadenas)
HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *

MAFUS

A ver: son archivos binarios y guardan los datos de forma binaria. Vas a ver sìmbolos raros porque traduces los bytes a ascii, pero son eso, bytes. Pueden ser enteros, reales, complejos, cadenas, cadenas ofuscadas, código ejecutable, cualquier cosa.

A lo mejor con un desensamblador, tienes suerte, y te puede arrojar el código máquina y puedes llegar a ver las cadenas de texto.

Cómo te dije expon tu consulta en ingeniería inversa, los chicos de allí se dedican a eso.

HardForo

No es necesario desensamblar nada

Obviamente que los caracteres de control (si son interpretados al momento de visualizarse el archivo) no te dejan ver bien las cadenas, pero estan ahi (excepto el archivo esté ofuscado o cifrado) y depende del editor con que las abras.

Una vez que encuentras las cadenas..... las reemplazas por otras de la misma longitud.

(lo he hecho antes)
HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *

Fera Core

ok gracias , disculpen por no contestar antes estaba haciendo algunas tareas, investigare boctulus, pero hay algo curioso es que en turbo c++ , puedes editarlo directamente desde el dos shell, y nesecitare instalar un xp de 32 bits.