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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


  Mostrar Temas
Páginas: 1 [2] 3 4
11  Programación / Programación C/C++ / Puede alguien aclararme como funciona un Arbol B??? en: 30 Noviembre 2014, 00:17 am
Hola. Estoy aprendiendo algo sobre los Arboles B, una estructura de datos. No sé si este sea el sitio adecuado, pero tengo varias interrogantes acerca de ese Arbol:

No entiendo como cuál es la lógica que sigue el arból. Entiendo bien los términos de nodos hijos y nodos padres, pero no entiendo como funciona. ¿Puede alguien darme una explicacion un poco más sencilla que las que aparecen en internet? Por si acaso, seguiré buscando...

¿Los nodos de izquiera a derecha, van de menor valor a mayor?



Gracias por su ayuda.
12  Programación / Programación C/C++ / Base de datos SQLite hace un Segmentation Fault al ejecutar sentencia SQL. en: 19 Noviembre 2014, 16:11 pm
Hola, estoy desarrollando una aplicacion sencilla que usa bases de datos SQLite en C/C++. Al hacer la consulta que crea una TABLA si no existe, la aplicacion hace una VIOLACION DE MEMORIA. He estado revisando con el depurador, pero no lo he podido conseguir.

No encontre un subforo adecuado para este tema, así que lo posteé aquí. Disculpen si aquí no iba. XD. El código es el siguiente:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <strings.h>
  4. #include <sqlite3.h>
  5.  
  6. ///Global variables
  7. sqlite3 *db;
  8. char *zErrMsg = 0;
  9. int rc;
  10. char sql[128];
  11.  
  12.   ///Used to extract interesting data from callbacks.
  13. int number_of_rows_fetched;
  14. int money;
  15. int money2;
  16. const char *data = "Callback function called!!\n";
  17.  
  18. ///This function is called each time that a row if found.
  19. ///The only way to keep tracking how many rows has the table,
  20. ///it's increasing the counter.
  21. static int callback(void *data, int argc, char **argv, char **azColName){
  22.   printf("Callback is running!!\n");
  23.  
  24.   return 0;
  25. }
  26.  
  27.  
  28. int init(){
  29.  
  30.    ///Open database
  31.   rc = sqlite3_open("bank.db", &db);
  32.   if(rc != SQLITE_OK){
  33.      fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
  34.      exit(0);
  35.   }else{
  36.      fprintf(stderr, "Opened database successfully\n");
  37.   }
  38.  
  39.  
  40.  
  41.   ///Create Table if it doesn't exist
  42.   memset(sql, 0, sizeof(sql));
  43.   strcat(sql, "CREATE TABLE accounts("  \
  44.         "id INT            NOT NULL," \
  45.         "username           TEXT    NOT NULL," \
  46.         "password           TEXT    NOT NULL," \
  47.         "cash               INT);");
  48.  
  49.   ///Run query
  50.   rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
  51.   printf("After the crash, i still alive\n");
  52.   if( rc != SQLITE_OK ){
  53.   fprintf(stderr, "SQL error: %s\n", zErrMsg);
  54.      sqlite3_free(zErrMsg);
  55.   }else{
  56.      fprintf(stdout, "Table created successfully\n");
  57.   }
  58.  
  59. }
  60.  
  61. int main(int argc, char* argv[])
  62. {
  63.  
  64.   init();
  65.  
  66.   return 0;
  67. }
  68.  
  69.  

Realmente he tenido dudas sobre si este tópico iría en este subforo, pero como no encuentro algo relacionado con Bases de Datos directamente, quise postearlo aqui.

Gracias de antemano.
13  Programación / Programación C/C++ / Saber si existe registro en SQLITE con C/C++ en: 15 Noviembre 2014, 02:28 am
Hola, amigos. Estoy desarrollando una aplicacion de login que permite la creacion de nuevos usuarios. Para hacerlo, primero debe saber si ya existe, antes de insertarlo.

He estado buscando en la web, y aparecen algunos métodos, pero siempre son aplicados a lenguajes diferentes a C/C++. Usan Java, y demás, y esas soluciones no son convertibles a C++.

Estoy usando la libreria de SQlite en C/C++. Pero no consigo obtener algo que me pueda ayudar a saber si ya existe un registro.

Intenté hacer un SELECT para que retorne los usarios existentes bajo ese nick, y luego medir la cantidad de resultados, si es mayor a 0, existe. Pero no he podido implementarlo en C/C++, no consigo como hacerlo.

Gracias de antemano. Seguiré buscando en otras fuentes también...
14  Programación / Programación C/C++ / Ayuda con interprete de mi propio lenguaje de script sencillo en: 28 Octubre 2014, 01:12 am
Hola, amigos. Estoy desarrollando un programa que rellena las casillas de un array con una X según la posicion y las ordenes que se indiquen desde un fichero de texto que actúa como script.

En cuanto al programa, mi único problema está en la parte en donde interpreta los scripts.

Voy dividiendo linea por linea usando strtok(...), y hasta ahí todo bien. Copio el contenido del puntero que devuelve strtok hacia un buffer de 16 caracteres para no tener que preocuparme por cosas raras con punteros.

El problema viene cuando intento usar strcmp(...) para ver si la linea actual coincide con la instruccion "fill" o "inc_x". Cuando lo hace, el programa crashea.

¿Podría alguien ayudarme a solucionar mi problema, o darme una mejor idea de como hacerlo? Gracias de antemano

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define NROWS 5//32
  5. #define NCOLUMNS 5//32
  6. int parse_script(char filename[]){
  7.    unsigned int x = 0;
  8.    unsigned int y = 0;
  9.    char array[NROWS][NCOLUMNS];
  10.    unsigned int file_size;
  11.    unsigned int i = 0;
  12.  
  13.    FILE *script_file;
  14.    char *script_content;
  15.    char *current_line;
  16.    char current_instruction[16];
  17.  
  18.    for(x = 0; x < NCOLUMNS; x++){
  19.        for(y = 0; y < NROWS; y++){
  20.            array[x][y] = 'O';
  21.        }
  22.    }
  23.  
  24.    ///First step, read all file content before preprocess it.
  25.    script_file = fopen(filename, "r");
  26.  
  27.    ///If all is good, get the size of file
  28.    fseek(script_file, 0, SEEK_END);
  29.    file_size = (unsigned long ) ftell(script_file);
  30.    rewind(script_file);
  31.  
  32.    ///Resize the array to the size of file
  33.    script_content = (char *) calloc (1, (size_t) file_size);
  34.  
  35.    ///Read the data from the file and put it in the array
  36.    fread((char *)script_content, file_size, 1, script_file);    ///Last step: Free resources
  37.  
  38.    ///Second step: Execute instruction by instruction
  39.    ///The program must divide the content in lines using \n
  40.    x = 0;
  41.    y = 0;
  42.    char delimiters[] = "\r\n";
  43.    current_line = strtok((char *) script_content, delimiters);//argumentos: frase, caracter delimitador
  44.    while(current_line != NULL)
  45.    {
  46.  
  47.       strncpy(current_instruction, current_line, 16);
  48.       printf("%s \n", current_line);
  49.  
  50.       ///Here, the program must analyze the instruction and take an action
  51.       if(strcmp("fill", current_instruction) == 0){
  52.            array[x][y] = 'X';
  53.  
  54.       }
  55.  
  56.       if(strcmp("inc_x", current_instruction) == 0){
  57.            x++;
  58.  
  59.       }
  60.  
  61.       current_line = strtok(NULL, delimiters);
  62.    }
  63.  
  64.    ///Third step: Show array.
  65.    printf("\nThe content of the array is: \n");
  66.    for(x = 0; x < NCOLUMNS; x++){
  67.        for(y = 0; y < NROWS; y++){
  68.            printf("%c", array[x][y]);
  69.            printf(" ");
  70.        }
  71.        printf("\n");
  72.  
  73.    }
  74.    printf("End of array. Thanks for use my program\n");
  75.  
  76.    free(script_content);
  77.    fclose(script_file);
  78. }
  79.  
  80. int main(int argc, char *argv[])
  81. {
  82.    if(argc < 2)
  83.        return -1;
  84.  
  85.  
  86.  
  87.    if(strcmp(argv[1], "-w") == 0){
  88.        parse_script(argv[2]);
  89.        return 0;
  90.    }
  91.  
  92.    printf("Invalid command!!\n");
  93.  
  94.    return 0;
  95. }
  96.  
  97.  

Fichero de prueba usado (escribir su ruta en la linea de comandos como parametro despues del nombre del ejecutable):

Código
  1. fill
  2. inc_x
  3.  
15  Seguridad Informática / Análisis y Diseño de Malware / Ayuda con Motor Metamorfico en: 6 Octubre 2014, 00:08 am
Hola, estoy desarrollando un motor metamorfico. Sé que es algo dificil, pero si uno no empieza no acaba nunca. XD.

Bueno, el problema es el siguiente: Necesito ayuda sobre como generar las instrucciones equivalentes: Imaginemos que tengo un:

Código
  1. ;En sintaxis FASM
  2. mov [variable], eax
  3.  

Podría ser reemplazado por un:

Código
  1. ;En sintaxis FASM
  2. push eax
  3. pop [variable]
  4.  

¿Como podría lograr eso? Tengo una idea, pero no sé si será la mejor opción:

  • Analizar el source y el destino
  • Aplicar source a un push
  • Aplicar destino a un pop


¿Será que alguien me puede dar una idea de como intercambiar las instrucciones? Ya he leído los manuales de Intel bastantes veces, y por lo menos lo básico lo entiendo. Quisiera una ayudadita, porque el tema de los motores metamorficos está algo díficil de implementar.

Gracias a todos de antemano.
16  Programación / Programación C/C++ / Ayuda convirtiendo puntero void a unsigned char y obtener su valor en: 5 Octubre 2014, 19:52 pm
Hola, amigos. ¿Como les ha ido? Tengo solo algunos conocimientos sobre el lenguaje C (No conozco mucho sobre C++).

Debido a eso tengo el siguiente problema: Tengo un puntero void que quiero convertir a unsigned char y obtener su valor (todo en la misma linea). Sin embargo, no he podido. ¿Será que alguien me puede ayudar?

Este es el codigo que tratado de hacer (Ya sé que ptr no apunta a ningun lado, pero es solo explicativo):

Código
  1.  
  2. //Intento 1: Al parecer no me da el valor que quiero
  3. void *ptr;
  4. unsigned char temp;
  5. temp = (unsigned char *) &ptr;
  6.  
  7. //Intento 2: El compilador no lo acepta.
  8. void *ptr
  9. unsigned char temp;
  10. temp = (unsigned char) *ptr;
  11.  
  12.  

Ya he buscado por internet, pero no entiendo mucho sobre como hacer lo que expliqué antes. (El tema de los punteros se vuelve un poco enredado. XD).

Se supone que al aplicar * delante de un puntero, él debería devolver su valor. Entonces por qué el compilador no me acepta la segunda opcion???

Gracias a todos de antemano.
17  Programación / Programación C/C++ / ¿¿¿Como saber si ciertos bits están activados?? en: 2 Octubre 2014, 02:37 am
Hola, estoy creando un programa que necesita identificar un cierto patron de bits al inicio del byte. Por ejemplo: Si byte comienza con 10100xxx, ir al codigo tal.

Espero que haya explicado bien mi problema. La idea es saber si ciertos bits dentro de un byte están activados, e ignorar el resto. No sé como lograr eso. Quiero lograr comparar, por ejemplo, los primeros cinco bits contra un patron conocido. No quiero identificar solo un bit, quiero identificar un grupo de ellos.

Gracias por su ayuda.
18  Programación / ASM / ¿Como decodificar x86 opcodes apropiadamente? en: 1 Octubre 2014, 02:45 am
Hola, estoy trabajando en un desensamblador para x86 (32 bits). Ya logré hacer la parte que identifica los prefijos. Pero tengo un problema, ahora estoy en la parte de decodificar los opcodes.

Al principio, he estado pensando en esta idea: Mantener una tabla con los opcodes, y comparar el byte actual contra la tabla. Y según cada caso, tomar la decision apropiada: Por ejemplo leer si hay un byte mod r/m, si tiene SIB, leer desplazamiento e immediate value (haciendo esto tras leer primero el mod r/m).

Y si no coincide con ningun opcode, declarar el byte desde donde se empezó a analizar la instruccion como basura.

Pero, he estado pensando que esa idea puede ser muy ineficiente, ¿será que alguien tiene una mejor manera de hacerlo?

Por ejemplo: En vez de comparar cada byte con una tabla, usar algun principio de generalizacion, por ejemplo: Si los primeros cuatro bits son 1001, es un mov. Luego analizar y determinar el mov especifico correspondiente (mover 8bits/16bits/32bits). ¿Será que es posible? ¿O esa es solo la unica manera?

PD: Ya he estado leyendo algunos sources de programas open source, pero muchos usan esa estrategia, al menos en apariencia. Los estoy leyendo a fondo.

Gracias de antemano.
19  Seguridad Informática / Análisis y Diseño de Malware / ¿Todavía un motor metamorfico en malware tiene sentido hoy? en: 1 Octubre 2014, 01:32 am
Hola, estoy desarrollando un desensamblador, para luego integrarle un algoritmo que haga instrucciones equivalentes (motor metamorfico). ¿Será que aún tiene sentido usarlo en estos días, o estaré perdiendo el tiempo?

Estoy desarrollando un malware (solo por diversion. XD). Y no sé si estoy siguiendo los lineamientos correctos al tratar de protegerlo con medidas anti-patrones (para que no sean capaces de conseguir n sucesion de bytes en todos los archivos infectados, algo como 'INFECTED', no debería existir).

Por favor, ayudenme. Denme al menos una respuesta. Gracias por su ayuda.
20  Programación / Programación C/C++ / Switch ignora caso existente y salta a default, ignorando casos predefinidos. en: 26 Septiembre 2014, 21:07 pm
Hola amigos, tengo un problema. Primero que nada describiré lo que intento hacer: Estoy desarrollando un desensamblador, especificamente este trozo de codigo trata sobre identificar los prefijos que poseen las instrucciones, y guardar en un archivo el prefijo encontrado. Este es un trozo resumido del codigo, y es donde está el problema.

Por ejemplo: Si yo llamo a la funcion show_prefixe(output_file, prefix_cs_override), la funcion trabaja bien, y imprime dentro del fichero la palabra "CS" tal como corresponde según mi tabla.

La funcion trabaja bien con todos los prefijos, excepto con los tres primeros: LOCK, REP y REPNE. No sé porque cuando llamo la funcion con los valores respectivos de cada uno, imprime "UNDEF" (caso por default si no consigue ningun case para ese valor). No entiendo porque toma el caso por default, si existen casos respectivos para cada prefijo (LOCK, REP, y REPNE)

He estado dando vueltas, pero aún no consigo ayuda. Espero que ustedes me ayuden a descifrar este misterioso problema. Aqui va el codigo.

Código
  1. #include <stdio.h>
  2.  
  3. ///Prefixes lock and repeat (group one)
  4.  
  5. #define prefix_lock 0xF0
  6. #define prefix_repne 0xF2
  7. #define prefix_rep 0xF3
  8.  
  9. ///Prefixes segmet override (group two)
  10. #define prefix_cs_override 0x2E
  11. #define prefix_ss_override 0x36
  12. #define prefix_ds_override 0x3E
  13. #define prefix_es_override 0x26
  14. #define prefix_fs_override 0x64
  15. #define prefix_gs_override 0x65
  16.  
  17. ///Branch hints goes here.
  18.  
  19. ///Operand-size override (group three)
  20. #define prefix_operand_size_override 0x66
  21.  
  22. ///Address-size override (group four)
  23. #define prefix_address_size_override 0x67
  24.  
  25.  
  26.  
  27. int show_prefixe(FILE *my_output, char prefix){
  28.    switch(prefix){
  29.        case prefix_lock:
  30.            fprintf(my_output, "LOCK ");
  31.            break;
  32.        case prefix_repne:
  33.            fprintf(my_output, "REPNE ");
  34.            break;
  35.        case prefix_rep:
  36.            fprintf(my_output, "REP ");
  37.            break;
  38.        case prefix_ss_override:
  39.            fprintf(my_output, "SS ");
  40.            break;
  41.        case prefix_cs_override:
  42.            fprintf(my_output, "CS ");
  43.            break;
  44.        case prefix_ds_override:
  45.            fprintf(my_output, "DS ");
  46.            break;
  47.        case prefix_es_override:
  48.            fprintf(my_output, "ES ");
  49.            break;
  50.        case prefix_fs_override:
  51.            fprintf(my_output, "FS ");
  52.            break;
  53.        case prefix_gs_override:
  54.            fprintf(my_output, "GS ");
  55.            break;
  56.        case prefix_operand_size_override:
  57.            fprintf(my_output, "OP ");
  58.            break;
  59.        case prefix_address_size_override:
  60.            fprintf(my_output, "ADDR ");
  61.            break;
  62.        default:
  63.            fprintf(my_output, "UNDEF ");
  64.            break;
  65.    }
  66. }
  67.  
  68. int main()
  69. {
  70.    FILE *output;
  71.    output = fopen("C:\\prefix.asm", "wb");
  72.    show_prefixe(output, prefix_rep);
  73.    fclose(output);
  74.    return 0;
  75. }
  76.  
  77.  

¿Será que el compilador tiene bugs? No sé, lo pregunto porque no estoy usando la ultima version, solo estoy usando la previa a la ultima. No sé realmente que ocurre.

Gracias de antemano por su ayuda.
Páginas: 1 [2] 3 4
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines