: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
Tamaño de los archivos a modificar ?
Que has planteado hasta ahora ? muestra algo
Pregunta en el foro de ingeniería inversa.
Te diran como buscar y modificar cadenas dentro de los binarios.
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
#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.
Cuanto mide el archivo origen ? cuanto mide el archivo destino ?
Si los ves con un editor...... ves lo mismo ?
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
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)
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.
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)
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.
Cita de: Fera Core en 27 Abril 2016, 08:37 AM
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.
No tiene nada del otro mundo, lo que pasa es que no te interpreta los caracteres de control (backspace, etc)