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.

Código: Seleccionar todo

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;
}

Código: Seleccionar todo

//uso
...
//Reemplazamos del offset 0x256 al 0x25C rellenando esos offsets con Linkgl 
ReemplazarOffsets(0x256,6,"Linkgl","C:\linkgl.exe");
...
//mHmm..
Para remplazar offsets bastaria con guardar el archivo en un puntero y con ese puntero remplazar de la siguiente manera:

for(i=0.....)
{
Datosoriginales = '0';
}


Es lo mas facil que se me ocurre.

salu2!
Imagen
Drinky eso quizás no esté bien,porque el for correría hasta strlen(cadena) y esta se frenaría al encontrar un carácter nulo...

Nosé,hay alguna forma pero con esa que comentás se me hace complicado...
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
Drinky JF escribió:Para remplazar offsets bastaria con guardar el archivo en un puntero y con ese puntero remplazar de la siguiente manera:

for(i=0.....)
{
Datosoriginales = '0';
}


Es lo mas facil que se me ocurre.

salu2!


Por eso dije "así me evitaba hacer un bucle en un programa inecesario!" jeje no me gustó como quedó el bucle así que hize la función igual si te fijas la función anterior hace lo que dices

offset[x]=0x05 //por ejemplo

Saludos!
//mHmm..
Poison, no tienes que medir la cadena necesariamente... si quieres remplazar 100 caracteres pues haces que el bucle se recorra 100 veces.

salu2!
Imagen
Responder

Volver a “Fuentes”