#include <windows.h>
#include <stdio.h>
struct PARCHE {
DWORD offset;
char valores[17];
int nbytes;
} parche[]= {
{ 0x04E003, "\x02",0x01}, // Parche 1
{ 0x04E010, "\x00\x80\x80\x06\x03\x03\x04\x03\x07\x00\x00\x00\x00\x00\x00\x00", 0x10 }, // Parche 2
};
void main(char *argv[],int argc) {
FILE *fichero;
system("cls");
printf("\n\n\t\t --------------------------------\n");
printf("\t\t| SYNDICATE Region Patcher | \n");
printf("\t\t| dissasembly reconstructed code | \n");
printf("\t\t --------------------------------\n");
if ( (fichero = fopen("backup.iso","rb+") ) != NULL) {
for (int i=0;i<(sizeof(parche) / sizeof(struct PARCHE));i++) {
fseek(fichero,parche[i].offset,SEEK_SET);
fwrite(parche[i].valores,parche[i].nbytes, 1,fichero);
}
printf("\n\t\t Us game is now Pal !\n\n\n");
}
else printf("\n\t\t No backup.iso found !\n\n\n");
system("PAUSE");
}
/* -------------------------------
NTSC JAP & NTSC USA --> PAL
------------------------------- */
struct PARCHE {
DWORD offset;
char valores[17];
int nbytes;
} parche[]= {
{ 0x04E003, "\x02",0x01}, // Parche 1
{ 0x04E010, "\x80\x80\x80\x06\x07\x07\x06\x07\x00\x80\x80\x80\x80\x80\x80\x80", 0x10 }, // Parche 2
};
/* -------------------------------
NTSC JAP --> NTSC USA
------------------------------- */
struct PARCHE {
DWORD offset;
char valores[17];
int nbytes;
} parche[]= {
{ 0x04E003, "\x00",0x01}, // Parche 1
{ 0x04E010, "\x00\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80", 0x10 }, // Parche 2
};
hsaoud escribió:¿Éste código funciona?, la verdad es que hay algo que me da bastante el cante:
struct PARCHE {
DWORD offset;
char valores[17];
int nbytes;
} parche[]= {
{ 0x04E003, "\x02",0x01}, // Parche 1
{ 0x04E010, "\x00\x80\x80\x06\x03\x03\x04\x03\x07\x00\x00\x00\x00\x00\x00\x00", 0x10 }, // Parche 2
};
, debería dar un error de compilación, ya que se está declarando una array de valores de tamaño 18, y se está inicializando una variable que supera ése tamaño por mucho (donde está el comentario "Parche 2")
hsaoud escribió:¿Éste código funciona?, la verdad es que hay algo que me da bastante el cante:
struct PARCHE {
DWORD offset;
char valores[17];
int nbytes;
} parche[]= {
{ 0x04E003, "\x02",0x01}, // Parche 1
{ 0x04E010, "\x00\x80\x80\x06\x03\x03\x04\x03\x07\x00\x00\x00\x00\x00\x00\x00", 0x10 }, // Parche 2
};
, debería dar un error de compilación, ya que se está declarando una array de valores de tamaño 18, y se está inicializando una variable que supera ése tamaño por mucho (donde está el comentario "Parche 2")
No se de donde sacas tu el 18, porque yo cuento 16
kriogeN escribió:
No se de donde sacas tu el 18, porque yo cuento 16, ten en cuenta que parche representa a un STRUCT que contiene un DWORD, un array de tamaño 17 de caracteres y un entero.
Es decir, no es que se superen los 17 caracteres de valores[], es que se quedan cortos, cosa que si funciona y para eso supongo que sera el nbytes del final.
hsaoud escribió:
Hijo mío, un array de x posiciones en C/C++ tiene un tamaño de x+1, ya que los arrays empiezan en la posición 0, y no la 1.
Así que char valores[17] tiene 18 posiciones, desde valores[0] hasta valores[17].
Por otro lado, no sabía que \xNN representara 1 byte, todos los días se aprende algo ;D.
Dredok escribió:
no, estas equivocado
un array valores[17] tiene 17 posiciones, que van de la 0 a la 16
Dredok escribió:
no, estas equivocado
un array valores[17] tiene 17 posiciones, que van de la 0 a la 16
hsaoud escribió:
Hijo mío, un array de x posiciones en C/C++ tiene un tamaño de x+1, ya que los arrays empiezan en la posición 0, y no la 1.
Así que char valores[17] tiene 18 posiciones, desde valores[0] hasta valores[17].
Por otro lado, no sabía que \xNN representara 1 byte, todos los días se aprende algo ;D.
Toz escribió:No me compila en linux
¿Alguien puede arreglarlo / portarlo?
$ gcc -o wiiregion wiiregion.c
wiiregion.c:1:21: error: windows.h: No existe el fichero o el directorio
.
.
.
wiiregion.c:1:21: error: windows.h: No existe el fichero o el directorio
gcc -o parche parche.c
#include
struct PARCHE {
unsigned long offset;
char valores[17];
int nbytes;
} parche[]= {{0x04E003,"\x02",0x01},{0x04E010,"\x00\x80\x80\x06\x03\x03\x04\x03\x07\x00\x00\x00\x00\x00\x00\x00",0x10},};
int main(char *argv[],int argc) {
FILE *fichero;
int i=0;
printf("\n\n\t\t --------------------------------\n");
printf("\t\t| SYNDICATE Region Patcher | \n");
printf("\t\t| dissasembly reconstructed code | \n");
printf("\t\t --------------------------------\n");
if ( (fichero = fopen("backup.iso","rb+") ) != NULL) {
for (i=0;i<(sizeof(parche) / sizeof(struct PARCHE));i++) {
fseek(fichero,parche[i].offset,SEEK_SET);
fwrite(parche[i].valores,parche[i].nbytes, 1,fichero);
}
printf("\n\t\t Us game is now Pal !\n\n\n");
return (0);
}
else printf("\n\t\t No backup.iso found !\n\n\n");
return (1);
}
Glicer escribió:Normal que no te compile, esta programado en windows usando las libreras de windows (windows.h)
SKyo escribió:¿Ese error no te dice nada? Esta preparado para compilar en Windows, por lo que si no tienes ese fichero de header no va a funcionar.
gonx escribió:Lo que me sorprende es: Las variable del source original eran en castellano? O el usuario que lo destripo las modifico?
#include <stdio.h>
struct PARCHE {
unsigned long offset;
char valores[17];
int nbytes;
} parche[]= {
{ 0x04E003, "\x02",0x01}, // Parche 1
{ 0x04E010, "\x00\x80\x80\x06\x03\x03\x04\x03\x07\x00\x00\x00\x00\x00\x00\x00", 0x10 }, // Parche 2
};
int main(int argc,char *argv[]) {
FILE *fichero;
int i;
system("clear");
printf("\n\n\t\t --------------------------------\n");
printf("\t\t| SYNDICATE Region Patcher | \n");
printf("\t\t| dissasembly reconstructed code | \n");
printf("\t\t --------------------------------\n");
if (argc!=2) {
printf("\n\t\t USAGE: %s image.iso\n\n",argv[0]);
return 1;
}
if ( (fichero = fopen(argv[1],"rb+") ) != NULL) {
for (i=0;i<(sizeof(parche) / sizeof(struct PARCHE));i++) {
fseek(fichero,parche[i].offset,SEEK_SET);
fwrite(parche[i].valores,parche[i].nbytes, 1,fichero);
}
printf("\n\t\t Us game is now Pal !\n\n\n");
return 0;
}
else printf("\n\t\t No %s found !\n\n\n",argv[1]);
return 1;
}
gcc archivo.c -o wiiregionpatcher
./wiiregionpatcher imagendejuegowii.iso
gonx escribió:Lo que me sorprende es: Las variable del source original eran en castellano? O el usuario que lo destripo las modifico?
Como me aburria hice una version nueva del codigo, muy chorra para que se coja el nombre de la imagen por linea de comandos, que es mas comodo
Toz escribió:
Ya lo sé, aunque no se programar, eso lo he entendido perfectamente, si no, no hubiera dicho 'portar'.
Idem.
--
Gracias por portarlo, enseguida lo pruebo, está bien que, ya que se hace el código, se pueda usar en cualquier sistema, si no, con el exe del release ya valdría ¿no?
wiirules escribió:
Si miras en la página anterior verás que ya está![]()
tb es mala pata....
/* -------------------------------
NTSC JAP & NTSC USA --> PAL
------------------------------- */
struct PARCHE {
DWORD offset;
char valores[17];
int nbytes;
} parche[]= {
{ 0x04E003, "\x02",0x01}, // Parche 1
{ 0x04E010, "\x80\x80\x80\x06\x07\x07\x06\x07\x00\x80\x80\x80\x80\x80\x80\x80", 0x10 }, // Parche 2
};
/* -------------------------------
NTSC JAP --> NTSC USA
------------------------------- */
struct PARCHE {
DWORD offset;
char valores[17];
int nbytes;
} parche[]= {
{ 0x04E003, "\x00",0x01}, // Parche 1
{ 0x04E010, "\x00\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80", 0x10 }, // Parche 2
};
#define _FILE_OFFSET_BITS 64
#define APP_VERSION "0.1"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* patch structure */
struct patch
{
unsigned long offset; /* Offset */
char values[17]; /* Values to patch */
int nbytes; /* Bytes to patch */
};
/* NTSC to PAL patch */
struct patch ntsc2pal[]= {
{ 0x04E003, "\x02", 0x01}, /* Patch #1 */
{ 0x04E010, "\x00\x80\x80\x06\x03\x03\x04\x03\x07\x00\x00\x00\x00\x00\x00\x00", 0x10} /* Patch #2 */
};
/* NTSC-J to NTSC-U patch */
struct patch ntscj2ntscu[] = {
{ 0x04E003, "\x00",0x01}, /* Patch #1 */
{ 0x04E010, "\x00\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80", 0x10 } /* Patch #2 */
};
/* Functions prototypes */
void pause(void);
int patchIso(char *, struct patch *);
int main(int argc, char *argv[])
{
char *filename;
int option;
printf("----------------------------------\n");
printf("+ SYNDICATE Region Patcher +\n");
printf("+ dissasembly reconstructed code +\n");
printf("----------------------------------\n");
printf("----------------------------------\n");
printf("+ Frii-RegionX %3s +\n", APP_VERSION);
printf("+ Developed by Waninkoko +\n");
printf("+ Based on Glicer code +\n");
printf("----------------------------------\n");
/* If at least one argument has been passed, use it as filename */
if(argc > 1)
filename = argv[1];
else
{
filename = (char *)malloc(128); /* Allocate memory */
do
{
printf("\n:: ISO file to patch: ");
scanf("%s", filename);
} while(filename == "");
}
/* Show options */
printf("\n1. NTSC-J/NTSC-U to PAL patch.");
printf("\n2. NTSC-J to NTSC-U patch.");
printf("\n3. Quit application.\n\n");
do
{
/* Get option */
printf(":: Select an option: ");
scanf("%d[^\n]", &option);
fflush(stdin); /* Flush standard input */
} while( (option < 1) || (option > 3) );
printf("\n");
switch(option)
{
/* NTSC-J/NTSC-U to PAL patch */
case 1:
if( patchIso(filename, ntsc2pal) == 0 )
printf("\n:: [NTSC-J/NTSC-U -> PAL] patch applied succesfully!!\n\n");
else
printf("\n:: [NTSC-J/NTSC-U -> PAL] patch failed!!\n\n");
break;
/* NTSC-J to NTSC-U patch */
case 2:
if( patchIso(filename, ntscj2ntscu) == 0 )
printf("\n:: [NTSC-J -> NTSC-U] patch applied succesfully!!\n\n");
else
printf("\n:: [NTSC-J -> NTSC-U] patch failed!!\n\n");
break;
/* Exit */
case 3:
return 0;
}
/* Pause */
pause();
return 0;
}
void pause(void)
{
fflush(stdin); /* Flush standard input */
getchar(); /* Wait until user press a key */
}
int patchIso(char *isofile, struct patch *ppatch)
{
FILE *fp;
int i;
printf(":: Patching ISO... ");
/* Open ISO file */
fp = fopen(isofile, "rb+");
if(fp)
{
/* Patch file */
for(i = 0; i < ( sizeof(ppatch) / sizeof(struct patch) ); i++)
{
fseek(fp, ppatch[i].offset, SEEK_SET);
/* Check that patch is being written */
if( fwrite(ppatch[i].values, ppatch[i].nbytes, 1, fp) < 1 )
{
/* Print an error message */
printf("ERROR!! Cannot patch "%s". Please, check file write permissions.", isofile);
fclose(fp);
return 1;
}
}
/* Close file */
fclose(fp);
}
else
{
/* Print an error message */
printf("ERROR!! "%s" not found!!", isofile);
return 1;
}
printf("OK!!\n");
/* Return success */
return 0;
}
si lo se me callo
:(:(