Fixed buffer overflow

This commit is contained in:
Xavi Del Campo 2020-01-31 22:19:19 +01:00
parent 6f225f14b3
commit 25aedbde21
1 changed files with 12 additions and 12 deletions

View File

@ -1,4 +1,4 @@
/* /*
* exefixup.c v0.02.1 Andrew Kieschnick <andrewk@mail.utexas.edu> * exefixup.c v0.02.1 Andrew Kieschnick <andrewk@mail.utexas.edu>
* (v0.02.1): Giuseppe Gatta <tails92@gmail.com> * (v0.02.1): Giuseppe Gatta <tails92@gmail.com>
* *
@ -57,7 +57,7 @@ int main(int argc, char *argv[])
{ {
FILE *exe; FILE *exe;
FILE *out; FILE *out;
unsigned char data[8]; unsigned char data[9];
char filename[256]; char filename[256];
int i; int i;
unsigned int header_data[12]; unsigned int header_data[12];
@ -91,7 +91,7 @@ int main(int argc, char *argv[])
printf("ERROR: Not a PS-X EXE file\n"); printf("ERROR: Not a PS-X EXE file\n");
exit(-1); exit(-1);
} }
for(i=0;i<12;i++) for(i=0;i<12;i++)
{ {
fscanf(exe, "%c", &data[0]); fscanf(exe, "%c", &data[0]);
@ -116,7 +116,7 @@ int main(int argc, char *argv[])
printf("s_size\t0x%.8x\n\n", header_data[11]); printf("s_size\t0x%.8x\n\n", header_data[11]);
fseek(exe, 0, SEEK_END); fseek(exe, 0, SEEK_END);
size=ftell(exe)-2048; size=ftell(exe)-2048;
padsize=2048-(size%2048); padsize=2048-(size%2048);
@ -133,7 +133,7 @@ int main(int argc, char *argv[])
if (yesno=='Y') if (yesno=='Y')
{ {
out = fopen(filename, "w"); out = fopen(filename, "w");
header_data[5]=size+padsize; header_data[5]=size+padsize;
fprintf(out, "PS-X EXE"); fprintf(out, "PS-X EXE");
@ -142,7 +142,7 @@ int main(int argc, char *argv[])
int2char(header_data[i], data); int2char(header_data[i], data);
fprintf(out, "%c%c%c%c", data[0], data[1], data[2], data[3]); fprintf(out, "%c%c%c%c", data[0], data[1], data[2], data[3]);
} }
fseek(exe, 56, SEEK_SET); fseek(exe, 56, SEEK_SET);
for(i=0;i<size+1992;i++) for(i=0;i<size+1992;i++)
@ -152,14 +152,14 @@ int main(int argc, char *argv[])
} }
for(i=0;i<padsize;i++) for(i=0;i<padsize;i++)
fprintf(out, "%c", 0); fprintf(out, "%c", 0);
size=header_data[5]; size=header_data[5];
fclose(out); fclose(out);
} }
} }
yesno='Z'; yesno='Z';
if (size!=header_data[5]) if (size!=header_data[5])
{ {
printf("WARNING: EXE header t_size does not match filesize-2048\n"); printf("WARNING: EXE header t_size does not match filesize-2048\n");
@ -174,7 +174,7 @@ int main(int argc, char *argv[])
if (yesno=='Y') if (yesno=='Y')
{ {
out = fopen(filename, "w"); out = fopen(filename, "w");
fprintf(out, "PS-X EXE"); fprintf(out, "PS-X EXE");
for(i=0;i<5;i++) for(i=0;i<5;i++)
{ {
@ -188,7 +188,7 @@ int main(int argc, char *argv[])
int2char(header_data[i], data); int2char(header_data[i], data);
fprintf(out, "%c%c%c%c", data[0], data[1], data[2], data[3]); fprintf(out, "%c%c%c%c", data[0], data[1], data[2], data[3]);
} }
fseek(exe, 56, SEEK_SET); fseek(exe, 56, SEEK_SET);
for(i=0;i<size+1992;i++) for(i=0;i<size+1992;i++)