La función nació por necesidad, reemplaza el caracter de un offset en determinado archivo la función retorna 0 cuando todo salió bien y -1 cuando no.

Código: Seleccionar todo

/**********************************
* Funcion ReemplazarOffset        *
* Coder: Linkgl                   *
* Fecha: 14/01/11                 *
* funcion-linkgl.blogspot.com     *
* indetectables.net               *
**********************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//Prototipo
int ReemplazarOffset(int pOffset,char nOffset, char * archivo);
//->uso
int main()
{ 
  //vamos a cambiar el offset 8 por la letra w en el archivo hola.txt
  if(ReemplazarOffset(8,'w',"hola.txt")==0)
    printf("Offset reemplazado con exito");
  return 0;
}
//funcion
int ReemplazarOffset(int pOffset,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(peso);
  temp=(char *)malloc(pOffset -1);
  fread(temp,pOffset-1,1,fp);
  fseek(fp,pOffset-1,SEEK_SET);
  buffer=(char *)malloc(peso - (pOffset - 1));
  fread(buffer,peso - (pOffset - 1),1,fp);
  fclose(fp);
  buffer[0]=nOffset;
  strcat(final,temp);
  strcat(final,buffer);
  fp=fopen(archivo,"wb");
  if(fp==NULL)
    return -1;
  fwrite(final,peso,1,fp);
  fclose(fp);
  free(temp);
  free(buffer);
  free(final);
  return 0;
}
//mHmm..
la mejoré un poquillo quitando el puntero "final" y evitar usar strcat y solamente escribir temp y buffer directamente al archivo, así funciona con binarios (por el caracter nulo \0 o 0x00)
//mHmm..
A la hora de usarla sería mejor visualmente para programar si devolviera valores FALSE y TRUE,pero con INT podemos emular estos valores con 1 y 0...

No importa mucho,la verdad el código está muy bueno....
Blog técnico dedicado a la seguridad informática y al estudio de nuevas vulnerabilidades.
Blog: http://www.seginformatica.net
Twitter: https://twitter.com/#!/p0is0nseginf
sod escribió:¿Porque la funcion ReemplazarOffset es int? ¿No seria mejor que fuera bool?
Saludos
Realmente da igual, es como estes acostumbrado, como dice p0is0n false=-1 true=0 :P pero pues puedes cambiarla a bool lo importante es como funciona el programa (:
//mHmm..
p0is0n666 escribió:A la hora de usarla sería mejor visualmente para programar si devolviera valores FALSE y TRUE,pero con INT podemos emular estos valores con 1 y 0...

No importa mucho,la verdad el código está muy bueno....
A eso me referia, si veo que una funcion es int me toca leerla entera para saber que puede devolver, pero si es bool es mas sencillo.
linkgl escribió:
sod escribió:¿Porque la funcion ReemplazarOffset es int? ¿No seria mejor que fuera bool?
Saludos
Realmente da igual, es como estes acostumbrado, como dice p0is0n false=-1 true=0 :P pero pues puedes cambiarla a bool lo importante es como funciona el programa (:
Se me olvidaba decirte que funciona muy bien
Saludos
Responder

Volver a “Fuentes”