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


 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


  Mostrar Temas
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 27
1  Programación / Programación C/C++ / No puedo cross-compilar usando las librerías ARM de Loquendo con GCC, se requieren los simbolos GLIBC_2.0, 2.1 y 2.3 en: 21 Noviembre 2020, 20:09
Buenas foro,

Pues siguiendo la tesis doctoral que hizo Javier y solo teniendo disponible el shared object (*.so) ELF 32-bit LSB shared object, ARM (obtenido al ejecutar el comando file) de los shared objects de Loquendo para Linux, en este caso, Tom Tom .

Me gustaría intentar compilar el programa que sugirió Javier, llamado text2audio, y disponible en el mismo pdf:

Código
  1. #include <stdio.h>
  2. #include "../sdk/win/LTTS7/include/loqtts.h" /* Loquendo TTS include file */
  3. #include <string.h>
  4. #define CODING tts_LINEAR // "l" /* "l" (linear), "a" (A-law), "u" (U-law) */
  5. #define SAMPLE_RATE 32000 /* Use 8000 for A-law or U-law coding */
  6.  
  7. int main(int argc, char *argv[])
  8. {
  9.    ttsHandleType hInstance; /* Instance handle */
  10.    ttsHandleType hVoice; /* Voice handle */
  11.    ttsResultType err; /* Error code returned by TTS APIs */
  12.  
  13.    char* p = "Jorge";
  14.    char* fich = "sample.wav";
  15.    char frase[5000]="";
  16.    int i;
  17.  
  18.    fprintf (stderr,"Number: \%i\n",argc);
  19.    if(argc > 3) {
  20.        p = argv[1]; // Voice
  21.        fich = argv[2]; // Path
  22.        for(i=3;i<argc;i++)
  23.        {
  24.            strcat(frase,argv[i]);
  25.            strcat(frase," ");
  26.        }
  27.        fprintf (stderr,"Sentence: \%s\n",frase);
  28.        fprintf (stderr,"File : \%s\n",fich);
  29.        } else {
  30.            fprintf(stderr, "Exec '\%s <speaker> <file> <text> '\n", argv[0]);
  31.            return -1;
  32.        }
  33.        fprintf(stderr, "Using voice \%s\n", p);
  34.  
  35.        /* Initializes the LoquendoTTS Instance */
  36.        err = ttsNewSession(&hInstance, NULL);
  37.        if (err != tts_OK)
  38.        {
  39.            fprintf(stderr, "\%s", ttsGetErrorMessage(NULL));
  40.            return err;
  41.        }
  42.  
  43.        /* Sets the voice parameters */
  44.        err = ttsNewVoice(&hVoice, hInstance, p); // 6 -> 7: SAMPLE_RATE, CODING
  45.        if (err != tts_OK)
  46.        {
  47.            fprintf(stderr, "\%s", ttsGetErrorMessage(hInstance));
  48.            (void)ttsDeleteSession(hInstance);
  49.            return err;
  50.        }
  51.  
  52.        /* Sends samples directly to the audio board */
  53.        //err = ttsSetAudio(hInstance, "LoqAudioFile", argv[2], CODING, 0);
  54.        err = ttsSetAudio(hInstance, "LTTS7AudioBoard", argv[2], SAMPLE_RATE, CODING, tts_STEREO, 0);
  55.  
  56.        if (err != tts_OK)
  57.        {
  58.            fprintf(stderr, "\%s", ttsGetErrorMessage(hInstance));
  59.            (void)ttsDeleteSession(hInstance);
  60.            return err;
  61.        }
  62.  
  63.        /* Converts text to speech */
  64.        err = ttsRead(
  65.            hInstance, /* Instance handle */
  66.            frase, /* Input */
  67.            ttsFALSE, // async
  68.            ttsFALSE, // fromFile
  69.            0);
  70.  
  71.        if (err != tts_OK)
  72.        {
  73.            fprintf(stderr, "\%s", ttsGetErrorMessage(hInstance));
  74.            (void)ttsDeleteSession(hInstance);
  75.            return err;
  76.        }
  77.  
  78.        /* Closes the Loquendo TTS instance; the voice will be automatically closed */
  79.        (void)ttsDeleteSession(hInstance);
  80.        return 0;
  81. }

(Esta versión es un poco diferente de la original porque la adapté para la versión LTTS 7, en lugar de la v6)

La idea es tener un endpoint en PHP que pueda usarse para generar archivos mp3 / wav para un texto (usando TTS internamente).

Los métodos que probé ya:

  • Instalando de una instancia de Loquendo para Windows en Wine y PlayOnLinux con Balabolka (con CLI): https://eltallerdemiku.blogspot.com/2018/12/como-instalr-loquendo-en-linux-con.html
  • Usando lo mismo, pero con los bindings de Ruby disponibles aquí: https://github.com/jojje/win32-loquendo/ (bajo PlayOnLinux y mi último enfoque fue intentar ejecutar ruby ​​directamente bajo Linux (sin emulación) con rvm, pero tuve muchos problemas al intentar instalar las gemas en una instancia de 32 bits, al menos la versión de 64 bits de Ruby en Windows no funcionó)
  • Preguntar en el repositorio de eSpeak: https://github.com/espeak-ng/espeak-ng/issues/836
  • Preguntando en RHVoice: https://github.com/Olga-Yakovleva/RHVoice/issues/247
  • Preguntando a Escolha Tecnologia, ya que ellos también usan estas voces. Pero me dijeron que no revelarían ningún secreto sobre su negocio.
  • Enviando un email a Nuance, ya que compraron Loquendo en 2011 y tenían Loquendo disponible hasta 2017. Y como dije sé que hay versiones de Linux disponibles porque están indicadas en el Manual de Instalación. (Aunque estoy pendiente de llamar este lunes al soporte técnico: https://www.nuance.com/es-es/about-us/contact-us.html a ver si con suerte siguieran dando soporte a Loquendo, pero dudo que un producto de hace 10 años lo tenga, y a parte que no soy ni cliente...)
  • Intentando cargar la librería con PHP ffi, intentando recrear lo mismo que hizo el proyecto win32-loquendo, sin suerte.
  • Preguntando a Javier Mikel Olaso (encontré su correo electrónico en Google), como hizo una tesis doctoral usando Loquendo en Linux: https://addi.ehu.es/bitstream/handle/10810/27565/TESIS_OLASO_FERNANDEZ_JAVIER%20MIKEL.pdf
  • Como dije, vi que el Manual de instalación tiene referencias a su producto en Linux. Descubrí que la biblioteca Loquendo TTS tiene el siguiente nombre en Linux: libLoqTTS7. Entonces busqué esa palabra con Google Dorks, y solo encontré referencias a GPS / Foros de Tomtom ...
  • Intentando localizar los objetos compartidos para i368 o amd64 en Linux, como se indica en la instalación manual de la guía de usuario (PDF) del producto original de Loquendo.

Por esta razón, mi último intento es emular las bibliotecas ARM instalando qemu-user-static y usando /usr/bin/qemu-arm-static (como MinusFour me recomendó, aunque también me dijo que lo más seguro que no funcionase) (ya que creo que este será el método menos costoso en lo que a uso de recursos se refiere). Pero para esto, tendré que realizar cross compile del programa text2audio para que sea compatible con la arquitectura ARM, si no, gcc mostrará el siguiente error: error adding symbols: file in wrong

Como me veo obligado a compilar el código de text2audio para la arquitectura arm, he decidido instalar la versión gcc para esta arquitectura siguiendo este tutorial: https://www.acmesystems.it/arm9_toolchain

Este fue el comando que usé para compilar mi programa c:

Código
  1. $ arm-linux-gnueabihf-gcc -L$d/sdk/linux/LoquendoTTS/lib -I$d/sdk/win/LTTS7/include -o txt2audio $d/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so txt2audio.c

Probé las versiones arm-linux-gnueabihf-gcc y arm-linux-gnueabi-gcc sin suerte. Se produjeron los siguientes errores:

Citar
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `pow@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `fwrite@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `pthread_detach@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `sprintf@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `printf@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `stderr@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `strchr@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `sqrt@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `strncat@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `fread@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `localtime_r@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `shmget@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `getpid@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `dlclose@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `log@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `gettimeofday@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `strspn@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `memset@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `puts@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `gethostname@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `stdout@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `getenv@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `opendir@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `strstr@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `pthread_cond_init@GLIBC_2.3.2'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `semctl@GLIBC_2.2'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `fseek@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `fscanf@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `shmat@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `clock_gettime@GLIBC_2.2'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `remove@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `fileno@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `__ctype_b_loc@GLIBC_2.3'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `pthread_mutex_destroy@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `exp@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `fputc@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `fgets@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `semop@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `__strtod_internal@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `dlsym@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `time@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `strrchr@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `shmdt@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `dlopen@GLIBC_2.1'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `sin@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `rand@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `pthread_cond_wait@GLIBC_2.3.2'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `readdir@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `nanosleep@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `__strtol_internal@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `log10@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `closedir@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `strncmp@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `pthread_self@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `sscanf@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `pthread_cond_signal@GLIBC_2.3.2'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `ceil@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `strcspn@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `strcat@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `fclose@GLIBC_2.1'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `fgetc@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `memmove@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `strpbrk@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `strcpy@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `strncpy@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `pthread_mutex_lock@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `fprintf@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `free@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `srand@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `mmap@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `fnmatch@GLIBC_2.2.3'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `pthread_join@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `pthread_create@GLIBC_2.1'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `realloc@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `strlen@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `memcpy@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `stdin@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `pthread_mutex_unlock@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `strcmp@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `pthread_cond_destroy@GLIBC_2.3.2'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `dlerror@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `__ctype_toupper_loc@GLIBC_2.3'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `pthread_cond_timedwait@GLIBC_2.3.2'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `modf@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `malloc@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `memcmp@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `pthread_mutex_init@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `cos@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `semget@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `ftell@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `fputs@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `fopen@GLIBC_2.1'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLTTS7Util.so: undefined reference to `munmap@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `putchar@GLIBC_2.0'
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: /xxx/tts/sdk/linux/LoquendoTTS/bin/libLoqTTS7.so: undefined reference to `fflush@GLIBC_2.0'

Revisé la siguiente respuesta (en StackOverflow) que sugería usar el comando man seguido del nombre del símbolo, por ejemplo, man pow sugiere usar la bandera -lm (siempre después del argumento -o) ...

Lo probé sin suerte. Creo que el problema está en la versión GLIBC que requiere el objeto compartido.

Entonces, ¿cómo puedo usar una versión diferente en el proceso de compilación cruzada para ARM y GLIBC 2.0?
2  Comunicaciones / Redes / [Proxmox] Port forwarding en Debian 9 (guest) en: 16 Agosto 2019, 15:30
Buenas chicos, veréis tengo el siguiente problema desde hace un tiempo. Contaté un server de OVH para hostear ciertas webs y servicios. La cuestión está en que te tenido problemas constantes para configurar las interfaces y el tema del port forwarding.

El sistema está configurado usando un Proxmox  como anfitriona y una debian como MV huesped. Tuve que crear una interfaz virtual, a la cual está enganchada la debian (sin DHCP) con una configuración estática.

He querido abrir puertos de forma rápida y sencilla, pero no he podido. Utilizaría casi por seguro una interfaz web aunque fuese como la que ofrece IPCop, pero paso de meterme en más embrollo.

Así que ya puestos a editar el archivo "/etc/network/interfaces" creé la siguiente config.

Código:
auto lo
iface lo inet loopback

iface enp4s0 inet manual

iface enp5s0 inet manual

auto vmbr0
iface vmbr0 inet static
        address  <ip_publica>
        netmask  24
        gateway  <gateway_publica>
        bridge-ports enp4s0
        bridge-stp off
        bridge-fd 0

auto vmbr1
iface vmbr1 inet static
        address  192.168.x.xx
        netmask  24
        bridge-ports none
        bridge-stp off
        bridge-fd 0
        post-up echo 1 > /proc/sys/net/ipv4/ip_forward
        post-up   iptables -t nat -A POSTROUTING -s '192.168.x.0/24' -o vmbr1 -j MASQUERADE
        post-down iptables -t nat -D POSTROUTING -s '192.168.x.0/24' -o vmbr1 -j MASQUERADE
        post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to 192.168.x.55:80
        post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to 192.168.x.55:80
        post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to 192.168.x.55:80
        post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 2222 -j DNAT --to 192.168.x.55:22
        post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 2222 -j DNAT --to 192.168.x.55:22

Donde 192.168.x.xx es la IP de la vmbr1, y 192.168.x.55 es la IP de la debian.

La cosa está en que cuando hago "ifdown vmbr1; ifup vmbr1" para reiniciar dicha config el siguiente error me asalta:

Citar
iptables: No chain/target/match by that name.

Por 2-3 veces.

Y después:

Citar
Waiting for vmbr1 to get ready (MAXWAIT is 2 seconds).



El caso es que no se a que se debe... Y al verdad es que mosquea bastante, ya que por un lado no tengo como verificar si los puertos estan abiertos y apuntando a donde yo quiero.

Es más hay veces que el SSH de la Debian funciona y parece que es por pura casualidad. Y otras sin embargo ni la consola del Proxmox quiere abrir, en fin, que no sé que está ocurriendo y necesito 2 cosas:

  • Hacer el port forwarding
  • Saber de un metodo que me aseguro que está funcionando

Un saludo.
3  Programación / Ingeniería Inversa / Como sniffear un websocket? en: 16 Agosto 2019, 06:27
Buenas chicos, me gustaría sniffear un websocket por tal de conseguir cierta información (no sensitva) acerca de los hits que reciben ciertos repositorios asociados a un servicio de terceros el cual expone dicha información, con el único propósito de analizar esa información, crear un ranking y analizar ciertas tendencias e información estadística de repositorios en Github.

Explicado mi propósito, os comento el problema que tengo... Resulta ser que  he tirado por el camino sencillo y me he buscado un cliente de Websockets, el cual se conecte a un servidor, en C#.

Aquí está la url donde se expone dichos datos: http://hits.dwyl.io, como véis en el source code se está utilizado Socket.io para conectarse a dicho websocket. En la consola se muestra un error 400 (donde se muestra con una clave/sid de acceso: "ws://hits.dwyl.io/socket.io/?EIO=3&transport=websocket&sid=6qKFrfR_NwJSJwqPAAOL", de esta clave hablaremos ahora después).

La cosa está en que yo en C#, estoy usando esta lib (https://github.com/sta/websocket-sharp#websocket-client), la cual tiene un ejemplo claro.

He intentado conectar el websocket a esta uri: "ws://hits.dwyl.io"

Código
  1.            using (var ws = new WebSocket("ws://hits.dwyl.io"))
  2.            {
  3.                ws.OnMessage += (sender, e) =>
  4.                    Console.WriteLine(e.Data);
  5.  
  6.                ws.Connect();
  7.                Console.ReadKey(true);
  8.            }

Pero recibo el siguiente error:

Citar
16/08/2019 6:16:12|Fatal|WebSocket.doHandshake|Not a WebSocket handshake response.

Googleando un poco, todo apunta a que se requiere algún tipo de SSID/key para poder acceder a la petción o algo, he estado mirando el source code de socket.io (https://github.com/socketio/socket.io/blob/e0b2cb0c5a9af768a48c43f65643412cc8edc7df/docs/API.md y la documentación), pero sin suerte, no he encontrado nada relevante, ni si quiera definiciones de eventos como aquí ponen (http://hits.dwyl.io/client.js) "news" o "hits". Ni si quiera he encontrado algo en una base de datos de exploit para la version 2.0.3 de socket.io... Así que por ese motivo, dejo que me guiéis en este rompecabezas, para ver que podría hacer al respecto.

Un saludo.
4  Programación / .NET (C#, VB.NET, ASP) / [C#] PathHinter - Útil para replicar el autocompletado de rutas como Unix en: 15 Agosto 2019, 01:50
Muy buenas, aquí os traigo una nueva release de un pequeño util que he desarrollado esta tarde.

Básicamente, se trata de una librería de unas 300+ líneas que replica el comportamiento del autocompletado de rutas que presentan algunos terminales de sistemas como Unix o Windows.



Una imagen dice más que mil palabras.

Bastante sencillo de usar. Los controles son los siguientes (se tiene que escribir "/" para poder empezar):

  • Tabulador: Para ver las posibles rutas
  • Flecha arriba/abajo: Seleccionar entre varias opciones disponibles
  • Flecha izquiersa derecha: De/Autocompletar caracteres sugeridos

Estos son los métodos que se usarán:

Código
  1. PathHint.ReadLine() // Mostrar sin nada
  2. PathHint.ReadLine(string) // Mostrar con un texto
  3. PathHint.ReadLine(string, enum, string, ConsoleColor) // Opción más avanzada, donde se puede elegir entre distintos estilos, un Regex y el color a usar cuando se sugiera una ruta
  4.  

ENLACES


Un saludo.
5  Programación / Desarrollo Web / Recomendaciones para hostear en: 17 Julio 2019, 22:20
Buenas estoy diseñando una página web para un cliente y me gustaría dar la mejor impresión posible.

Pero claro, tengo la duda de que no se que servicio utilizar, estoy entre estos 4 candidatos: Plesk, Heroku, uno con cPanel (Hostgator) o un server dedicado (OVH, Kimsufi, etc etc)...

Que me recomendáis?

Para mi cada uno tiene sus pros y sus contras, pero me gustaría escuchar una voz experta sobre el tema.

Gracias.

Un saludo.
6  Programación / Ingeniería Inversa / Intentando "crackear" Spotify en: 2 Julio 2019, 18:04
Hola gente, después de cierto tiempo aquí vengo con un nuevo tema, que creo que va a ser larguillo, pero bueno. Lo he puesto en "Ing. Inversa" porque es a lo que más se le asemeja esta duda, creo...

En fin, la cuestión está en que hace algún tiempo, encontré una aplicación que te escribia dos entradas en el archivos /etc/hosts para anular la publicidad proveniente de Spotify.

Cosa que Spotify no hace mucho ha arreglado, por lo que ahora cualquier canción nueva que tenga que ser reproducida no se va a escuchar al menos que los anuncios se reproduzcan antes.

Bueno, la cosa está en que no hace mucho encontré este repositorio (Spotify1710), lo estuve mirando así por encima, ya que yo de C++ tampoco entiendo mucho y bueno, pues lo probé y vi que no funcionaba (Spotify crashea) asi que me puse a hacer lo mismo pero en C#. (Quizás debería de probar una version más antigua de Spotify?, ya que hay varias releases...)

Según he visto como funciona esta utilidad lo que se hace es inyectar una (managed) DLL dentro un (unmanaged) proceso. Esto es posible gracias a una librería llamada "SharpNeedle"...

La cosa está en que todo funciona perfectamente... He creado hasta un sistema de sockets para recibir mensajes desde dentro del proceso de Spotify hasta una consola)...

Todo funcionaba, hasta el momento que dije de reimplementar la segunda parte que es la de modificar un método dentro de Spotify, el proyecto original utiliza Detours. Aquí es donde digo que creo que falla todo (tanto en mi version como en la versión hecha en C++ por Meik1710, como digo debería de probar versiones antiguas de Spotify).

Yo para esto utilizo un wrapper para .NET llamado "detours.net", con el cual ando un poco perdido como podréis comprobar: https://github.com/uta-org/SpotifySharper/blob/master/SpotifySharper.Injector/Tools/SpotifyPatchAds.cs#L186 (como veréis no tengo ni idea que puntero pasarle como parametro, he estado mirando el código original, pero como es posible obtener un puntero de una void? Yo he recreado esto con la clase "GCHandleProvider", pero vamos que estoy dando palos de ciego...)

Pero la cosa está en que dentro de lo que cabe, no todo está perdido, no he llegado a un punto muerto aún. (O quizás sí, no lo sé), el caso está en que Spotify me ha generado un archivo *.dmp por cada crash, pero el WinDbg no me muestra nada... Me muestra el siguiente error:

Citar
This dump file has an exception of interest stored in it.
The stored exception information can be accessed via .ecxr.
(30e0.4a58): Access violation - code c0000005 (first/second chance not available)
For analysis of this file, run !analyze -v

* El cual no entiendo *

Con VS2017 la cosa cambia, me muestra "The thread tried to read from or write to a virtual address for which it does not have the appropriate access.", lo que me quiere decir que el puntero que he usado para leer y modificar el metodo a traves del delegado era erroneo. (Es decir, esto --> lo mismo pero en C++, supuestamente lo he implementado bien no?)

Como puedo obtener el puntero de una función? O como puedo obtener a que módulo pertenece un una dirección de memoria especifica? (al menos para saber que debería probar de decompilar), la verdad que no estoy seguro de nada... Para ser sinceros, necesito ayuda de cerca. He estado mirando el PInvoke en busca de pistas (ya que dentro del Kernel32.dll existen metodos para obtener cosas parecidas, como por ejemplo: "GetModuleHandle", lo que se me ocurre quizás es probar a obtener la dirección de memoria para cada modulo, y acotar entre dos modulos una dirección de memoria, pero no se si daría resultado, lo daría?)

Otra de las cosas que me ralla del tema es que con detours.net, por lo visto el funcionamiento es bien sencillo:

Código
  1. namespace myplugin
  2. {
  3.    public static class Logger
  4.    {
  5.        // Declare your delegate
  6.        public delegate int CoCreateInstanceDelegate(
  7.            Guid rclsid, IntPtr pUnkOuter,
  8.            int dwClsContext, Guid riid, ref IntPtr ppv
  9.        );
  10.  
  11.        // And now declare your hook
  12.        [Detours("ole32.dll", typeof(CoCreateInstanceDelegate))]
  13.        public static int CoCreateInstance(
  14.            Guid rclsid, IntPtr pUnkOuter,
  15.    int dwClsContext, Guid riid, ref IntPtr ppv
  16.        )
  17.        {
  18.            // Call real function
  19.            int result = ((CoCreateInstanceDelegate)DelegateStore.GetReal(MethodInfo.GetCurrentMethod()))(rclsid, pUnkOuter, dwClsContext, riid, ref ppv);
  20.  
  21.            Console.WriteLine(" {" + rclsid.ToString() + "} {" + riid.ToString() + "} " + result.ToString("x"));
  22.  
  23.            return result;
  24.        }
  25.    }
  26. }

Pero claro, como digo, los métodos "CmdAddTextGAIA", "CreateTrackPlayer", "OpenTrack", "CloseTrack", deben de estar definidos en alguno de los módulos que estan ejecutandose dentro de Spotify, que no son pocos según muestra Process Explorer: https://pastebin.com/qp8pha3H

Pero como digo no se como obtener dicho modulo, quizás este en el propio Spotify.exe... Voy a probar a usar algo de aquí, porque por lo visto Spotify se ha actualizado a una nueva version, la "1.1.10.540".  :rolleyes:

Un saludo.
Gracias por leer el tocho.
7  Foros Generales / Foro Libre / Algo raro está ocurriendo... en: 30 Noviembre 2018, 14:06


Quizás no se den cuenta, pero el easteregg empieza por w y acaba por n. :silbar:

Me da curiosidad saber porque razón ya no está en oculto su conexión. :silbar: :silbar:
8  Programación / .NET (C#, VB.NET, ASP) / [App] (EHN-Macros) Haz backup y purga los mensajes de la bandeja de MPs del foro en: 13 Noviembre 2018, 17:36
Buenas, con esta aplicación creada con unos cuantos plugins de .NET entre los que se encuentran el CommandLineParser, el EasyConsole y el Selenium (y mi ingenio), he conseguido hacer esta aplicación que básicamente lo que hace es borrar (o si no no lo prefieres) y hacer backups tanto de la Inbox como de la Outbox (bandeja de entrada y salida) del foro.

Para ello necesitamos Visual Studio (para poder compilar el proyecto, por el momento), Windows y tener instalado Chrome.

Una vez descargado el proyecto, necesitaremos configurar el CLI, yendo a las Opciones del Proyecto > Deupración > Argumentos de línea de comando y escribir nuestros credenciales con el siguiente formato: -u <usuario> -p <contraseña>

Ejecutaremos, y gualá, ya tendremos la bandeja vacía o lo que sea que queramos tener vacío.

Capturas de pantalla:




Link de descarga: https://github.com/z3nth10n/EHN-Macros

Un saludo.

PD: Lo he compartido por Github por si alguno se anima a hacer alguna macro.
9  Foros Generales / Sugerencias y dudas sobre el Foro / He perdido algunos mensajes privados y me gustaría tener una copia de ellos en: 13 Noviembre 2018, 16:30
He hecho una aplicacion (que luego mostraré) la cual te hace una copia de seguridad de los mensajes privados del foro y luego los purga, pero por error, he borrado unos muy importantes para mí, fueron los primeros que escribí a un buen amigo mío y los recuerdo con cariño, tanto a el como a los mensajes, y por ello me gustaría saber si hay alguna forma de recuperarlos (si se mueven de la base de datos o se hace "DELETE" sin más, quizás de alguna backup que hiciese el-brujo en algún ataque).

Un saludo.
10  Seguridad Informática / Seguridad / Diseño de aplicación con frontend en C# y backend en puro SQL en: 9 Noviembre 2018, 11:17
Hola, tengo una duda, estoy pensando en realizar una aplicación, y desde que estoy en las prácticas de una empresa de Almería he visto algunas cosillas interesantes que me gustaría llevar a la práctica, pero claro, soy novato y me gustaría saber como de segura sería la siguiente implementación.

Os pongo en situación:

Hace unos meses estuve pensando en una aplicación, la cual ofrecía un panel con diversas funcionalidades (frontend) para los clientes/usuarios de dicha aplicación. Y esta a su vez, tenía que comunicarse con una base de datos. Así que, por temas de seguridad, lo que acabe haciendo, fue una aplicación en C# (backend) que se comunicaba con la base de datos lanzando sentencias SQL contra ella, una API vaya.

Entonces, claro, mi duda está en que si podría saltarme este paso intermedio, y obviar la aplicación backend, ya que es un rollo implementarla.

Lo que se me ha ocurrido, desde que estoy en esta empresa, es que lo más común es usar procedimientos almacenados (Stored Procedures) que están en SQL Server, en Oracle y en MySQL (no es algo especifico de unos cuantos softwares propietarios).

Y he visto, que todas las aplicaciones, llaman a sus procedimientos almacenados desde una API integrada en el mismo frontend. Y sí lo hacen así supongo que será porque es seguro.

Y tiene lógica, ya que realmente tu no estás viendo la sentencia SQL que se está ejecutando, simplemente, el procedimiento almacenado te trae datos, o los inserta, pero de forma controlada.

Es decir, que un hacker, no podría borrar o alterar la base de datos a sus anchas, si no conociese los procedimientos almacenados. Y no tuviese los permisos correspondientes para cada ejecucción.

Con permisos me refiero a que si, el usuario el cual realiza la petición no tiene dentro de una tabla X (donde hay una columna que especifica su rango de permisos) la cual no tiene permisos, este no podría hacer nada.

La idea está en que dentro del mismo procedimiento almacenado, se llame a otro procedimiento almacenado, el cual haga comprobación de credenciales, de rango, etc etc (para el caso de lectura de datos sensibles, insertar, modificar, borrar o alterar la estrctura de tablas (esto último debería de hacerse desde la propia base de datos)).

Ahora, lo que me sigue fallando es el tema del login.

Lo que se me había ocurrido, es lo siguiente, hacer 3 usuarios de SQL:

- Invitado: Este solo tendria acceso a comprobar los credenciales en la tabla correspondiente. Una vez realizada la conexión se le devolveria una string de conexión como usuario. Y se le crearía una string de conexion en otra tabla la cual no tendria acceso.
- Usuario: Este tendria los permisos estandar de un usuario.
- Administrador: Si se requiriese que la propia aplicación tuviese un panel de administración, pues este seria el usuario de conexion a la base de datos.

No me mola el hecho de devolver strings de conexión. Lo que me gustaría sería, que al conectarse el usuario, se le devolviese un objeto con la conexión la cual solo podria usar desde esa propia sesión.

Y lo mejor de todo, es que me gustaría implementar todo esto que digo de forma que un usuario cualquiera solo pudiese acceder a la cuenta de otro usuario si conociese sus credenciales. Por que sería muy sencillo pasarle en vez de una ID de usuario otra ID de usuario y santas pascuas, por ello lo de la string de conexión.

Pero son conceptos que están muy en el aire y no se muy bien como aplicarlos.

Asi que cualquier guía ayuda no estaría de más.

Un saludo y gracias.
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 27
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines