Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - 0xDani

#691
Programación C/C++ / Re: tipos de enteros en C
17 Diciembre 2012, 21:31 PM
Mira este articulo sobre bitfields, tienen sus ventajas e inconvenientes, piensalo y quizas consigas una aproximacion a tu tipo flexible.

http://www.linuxforu.com/2012/01/joy-of-programming-understanding-bit-fields-c/
#692
Programación C/C++ / Re: tipos de enteros en C
17 Diciembre 2012, 16:05 PM
Quiza con bitfields puedas hacer algo.

Saludos.
#693
No queria decir que fuese un codigo malo, solo que esta muy visto, y no es nada demasiado "pro" que se diga. Incluso hay un tutorial en este foro sobre hacer worms en vbs.

De todas formas, es un aporte, a diferencia de muchos usuarios que se registran solo para preguntar como usar bifrost o cosas similares, y me disculpo si ha parecido que queria ofenderte.

En cuanto a la deteccion, me da la impresion de que los antivirus no se han puesto las pilas con los lenguajes de scripting.

Saludos.
#694
Bueno aqui os dejo esta pequeña herramienta que he hecho para ver algunos datos sobre los simbolos de una libreria dinamica o un ejecutable ELF: http://es.wikipedia.org/wiki/Executable_and_Linkable_Format

Cualquier pregunta, comentario o critica constructiva posteen  ;)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
#include <elf.h>

int main(int argc, char **argv)
{

char *shstrtabdata, *strtabdata, *dynstrdata;
int i, off;
bool strtabf=true, symtabf=true, dynsymf=true;

size_t ret;

Elf32_Ehdr *hdr = malloc(sizeof(Elf32_Ehdr));
Elf32_Shdr shdr, shstrtab, strtab, dynsym, dynstr;
Elf32_Sym sym;

FILE *dyn = fopen(argv[1], "rb");
if(!dyn)
{
  perror("fopen");
  exit(1);
}

fread(hdr, sizeof(Elf32_Ehdr), 1, dyn);
fseek(dyn, hdr->e_shoff+hdr->e_shentsize*hdr->e_shstrndx, SEEK_SET);
fread(&shstrtab, sizeof(shstrtab), 1, dyn);
shstrtabdata = malloc(shstrtab.sh_size);
if(!shstrtabdata)
{
  perror("malloc");
  exit(2);
}
fseek(dyn, shstrtab.sh_offset, SEEK_SET);
fread(shstrtabdata, 1, shstrtab.sh_size, dyn);
fseek(dyn, hdr->e_shoff, SEEK_SET);

fwrite(shstrtabdata, 1, shstrtab.sh_size, stdin);

for(i=0; i<hdr->e_shnum; i++)
{
  fread(&shdr, sizeof(shdr), 1, dyn);
  if(!strcmp(shstrtabdata+shdr.sh_name, ".symtab"))
  {
   printf(".symtab encontrada: offset: 0x%x\n", shdr.sh_offset);
   printf("Tamaño de .symtab: %d\n", shdr.sh_size);
   printf("Numero de sym headers: %f\n", (float) shdr.sh_size/(float) sizeof(Elf32_Sym));
   symtabf = false;
   break;
  }
}

if(symtabf)
{
  printf("sección .symtab no encontrada.\n");
}

fseek(dyn, hdr->e_shoff, SEEK_SET);

for(i=0; i<hdr->e_shnum; i++)
{
  fread(&dynsym, sizeof(dynsym), 1, dyn);
  if(!strcmp(shstrtabdata+dynsym.sh_name, ".dynsym"))
  {
   printf(".dynsym encontrada: offset: 0x%x\n", dynsym.sh_offset);
   dynsymf=false;
   break;
  }
}

fseek(dyn, hdr->e_shoff, SEEK_SET);

for(i=0; i<hdr->e_shnum; i++)
{
  fread(&dynstr, sizeof(dynstr), 1, dyn);
  if(!strcmp(shstrtabdata+dynstr.sh_name, ".dynstr"))
  {
   printf(".dynstr encontrada: offset: 0x%x\n", dynstr.sh_offset);
   printf("Tamaño de .dynstr: 0x%x\n", dynstr.sh_size);
   break;
  }
}

dynstrdata = malloc(dynstr.sh_size);
if(!dynstrdata)
{
  perror("malloc");
  exit(5);
}

fseek(dyn, dynstr.sh_offset, SEEK_SET);
ret = fread(dynstrdata, 1, dynstr.sh_size, dyn);

fseek(dyn, hdr->e_shoff, SEEK_SET);

for(i=0; i<hdr->e_shnum; i++)
{
  fread(&strtab, sizeof(strtab), 1, dyn);
  if(!strcmp(shstrtabdata+strtab.sh_name, ".strtab"))
  {
   printf(".strtab encontrada: offset: 0x%x\n", strtab.sh_offset);
   strtabf = false;
   break;
  }
}

if(strtabf)
{
  printf("sección .strtab no encontrada.\n");
}


if(!strtabf)
{
  strtabdata = malloc(strtab.sh_size);
  if(!strtabdata)
  {
   perror("malloc");
   exit(3);
  }
  fseek(dyn, strtab.sh_offset, SEEK_SET);
  ret=fread(strtabdata, 1, strtab.sh_size, dyn);
  if(ret!=strtab.sh_size)
  {
    perror("fread");
    exit(4);
  }
}


  fseek(dyn, shdr.sh_offset, SEEK_SET);


if(!symtabf)
{
  printf("***Symtab***\n\n");
  i=0;
  while(shdr.sh_size>i)
  {
   ret=fread(&sym, sizeof(sym), 1, dyn);
   i+=sizeof(sym);
   printf("%s\n", strtabdata+sym.st_name);
   printf("Direccion: 0x%x\t", sym.st_value);
   printf("Tamaño: 0x%x\t", sym.st_size);
   if(sym.st_info & STT_NOTYPE) printf("Tipo no definido\t");
   if(sym.st_info & STT_OBJECT) printf("Data object\t");
   if(sym.st_info & STT_FUNC) printf("Funcion\t");
   if(sym.st_info & STT_FILE) printf("Fichero fuente\t");
   printf("\n");
  }
  printf("Numero de simbolos: %d\n", i/16);
}

fseek(dyn, dynsym.sh_offset, SEEK_SET);

if(!dynsymf)
{
  printf("***Dynsym***\n\n");
  i=0;
  while(dynsym.sh_size>i)
  {
   ret=fread(&sym, sizeof(sym), 1, dyn);
   i+=sizeof(sym);
   printf("%s\n", dynstrdata+sym.st_name);
   printf("Direccion: 0x%x\t", sym.st_value);
   printf("Tamaño: 0x%x\t", sym.st_size);
   if(sym.st_info & STT_NOTYPE) printf("Tipo no definido\t");
   if(sym.st_info & STT_OBJECT) printf("Data object\t");
   if(sym.st_info & STT_FUNC) printf("Funcion\t");
   if(sym.st_info & STT_FILE) printf("Fichero fuente\t");
   printf("\n");
  }
  printf("Numero de simbolos: %d\n", i/16);
}

if(!strtabf) free(strtabdata);
free(shstrtabdata);
if(!dynsymf) free(dynstrdata);

return 0;

}


El modo de uso es tan simple como pasarle como argumento la ruta del archivo a analizar.

Saludos!
#695
Un worm en vbs? Bueno por lo menos no es alguien preguntando como usar Bifrost. Lo has subido a virustotal, a ver que rango de deteccion tiene?
#696
Programación C/C++ / Re: Compro un programa cpp
14 Diciembre 2012, 16:09 PM
De que va el programa?
#697
En la terminal, haz un echo de LD_LIBRARY_PATH, y comprueba que /usr/local/lib esta incluido en esta variable de entorno.

Saludos.
#698
Bugs y Exploits / Re: DISEÑO DE EXPLOIT
12 Diciembre 2012, 15:54 PM
Si te fijas no se verifica que argv[1] apunte a una cadena de menos de 40 caracteres, ni se limita el numero de caracteres que se pueden copiar a buffer. Aqui tendrias que hacer un stack overflow, de forma que puedas dejar EIP apuntando a la funcion privada, o algo asi.

http://www.exploit-db.com/download_pdf/17008
#700
@Alex Mtx, evidentemente no esta nada bien lo que han hecho los de Ubuntu, pero sigo pensando que pedir un boicot para esta distro por lo demas excelente esta totalmente injustificado. Con que se le habia ido la pinza me referia a eso, al hecho de pedir un boicot, en vez de hablar las cosas.

Saludos.