Modifiqué mi anterior función para hacer una que reemplaze los offsets que se quieran y no nomás 1 así me evitaba hacer un bucle en un programa inecesario!
Nota: La variable final la pueden quitar y usar directamente nOffset, yo la puse para debuggear.
Nota: La variable final la pueden quitar y usar directamente nOffset, yo la puse para debuggear.
int ReemplazarOffsets(int pOffset,int cantidad,char *nOffset, char * archivo)
{
FILE *fp;
char *buffer;
char *temp;
char *final;
int peso;
fp=fopen(archivo,"rb");
if(fp==NULL)
return -1;
fseek(fp,0,SEEK_END);
peso=ftell(fp);
rewind(fp);
final=(char *)malloc(cantidad);
temp=(char *)malloc(pOffset -1);
fread(temp,pOffset-1,1,fp);
fseek(fp,pOffset-1+cantidad,SEEK_SET);
buffer=(char *)malloc(peso - (pOffset - 1) - cantidad);
fread(buffer,peso - (pOffset - 1) - cantidad,1,fp);
fclose(fp);
final=nOffset;
fp=fopen(archivo,"wb");
if(fp==NULL)
return -1;
fwrite(temp,pOffset-1,1,fp);
fwrite(final,cantidad,1,fp);
fwrite(buffer,peso - (pOffset - 1) - cantidad,1,fp);
fclose(fp);
free(temp);
free(buffer);
free(final);
return 0;
}
//uso
...
//Reemplazamos del offset 0x256 al 0x25C rellenando esos offsets con Linkgl
ReemplazarOffsets(0x256,6,"Linkgl","C:\linkgl.exe");
...
No hay comentarios:
Publicar un comentario