Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
wave-share — Sin servidor, peer-to-peer, compartición local de archivos a través del sonido | Kitploit
Herramientas/GitHubGitHub/ggerganov/wave-share
Exfiltración de DatosSeguridad InalámbricaUtilidades y FrameworksAprendizaje y Educación
GitHubggerganov/wave-share

wave-share

Sin servidor, peer-to-peer, compartición local de archivos a través del sonido

Ver Repositorio
2.3k148hace 5 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Sitio web

wave-share

Una prueba de concepto para la señalización WebRTC mediante sonido. Funciona con todos los dispositivos que tengan micrófono + altavoces. Se ejecuta en el navegador.

Los dispositivos cercanos negocian la conexión WebRTC intercambiando los datos necesarios del Protocolo de Descripción de Sesión (SDP) a través de una secuencia de tonos de audio. Tras una negociación exitosa, se establece una conexión WebRTC local entre los navegadores, permitiendo el intercambio de datos a través de la LAN.

Míralo en acción (video de 2 minutos):

CG++ Datos a través del sonido

Pruébalo tú mismo: ggerganov.github.io/wave-share

Últimas noticias:
He extraído el algoritmo de datos a través del sonido en una biblioteca independiente llamada ggwave.
Se puede integrar fácilmente en otros proyectos.

Cómo funciona

La tecnología WebRTC permite que dos navegadores que se ejecutan en diferentes dispositivos se conecten entre sí e intercambien datos. No es necesario instalar complementos ni descargar aplicaciones. Para iniciar la conexión, los pares intercambian información de contacto (dirección IP, puertos de red, ID de sesión, etc.). Este proceso se denomina "señalización". La especificación WebRTC no define ningún estándar para la señalización: el intercambio de contactos se puede lograr mediante cualquier protocolo o tecnología.

En este proyecto, la señalización se realiza a través del sonido. La secuencia de señalización es la siguiente:

  • El par A difunde una oferta para una conexión WebRTC codificando los datos de la sesión en tonos de audio
  • El/los par(es) cercano(s) capturan el sonido emitido por el par A y decodifican los datos de la sesión WebRTC
  • El par B, que desea establecer conexión con el par A, responde con una respuesta de audio. La respuesta contiene la información de contacto del par B codificada. Además, el par B comienza a intentar conectarse al par A
  • El par A recibe la respuesta del par B, decodifica los datos de contacto transmitidos y permite que el par B se conecte
  • Se establece la conexión

La secuencia de señalización descrita no involucra un servidor de señalización. Por lo tanto, una aplicación que utilice señalización a través del sonido puede ser servida, por ejemplo, por una página web estática. El único requisito es tener control sobre los dispositivos de salida/captura de audio.

Una limitación obvia (característica) del enfoque actual es que solo los dispositivos cercanos (por ejemplo, en la misma habitación) pueden establecer conexión entre sí. Además, los dispositivos deben estar conectados en la misma red local, ya que NAT no está disponible.

Tx/Rx de sonido

Los datos comunicados a través del sonido contienen la información de contacto necesaria para inicializar la conexión WebRTC. Estos datos se almacenan en el formato Protocolo de Descripción de Sesión (SDP). Dado que la transmisión de datos a través del sonido tiene limitaciones significativas en términos de ancho de banda y robustez, es deseable transmitir la menor cantidad de datos posible. Por lo tanto, el SDP se despoja de toda información irrelevante y solo se transmiten los datos esenciales necesarios para establecer la conexión. Actualmente, el paquete de sonido que contiene los datos SDP mínimos requeridos tiene el siguiente formato:

El tamaño total del paquete de audio es de 112 bytes. Con el algoritmo actual de codificación de audio, el paquete SDP se puede transmitir en 5-10 segundos (dependiendo del protocolo Tx utilizado). El uso de protocolos más lentos proporciona una transmisión más confiable en entornos ruidosos o si los dispositivos de comunicación están lejos entre sí.

Codificación de datos a sonido

El enfoque actual utiliza un esquema de modulación multifrecuencia de Modulación por desplazamiento de frecuencia (FSK). Los datos a transmitir se dividen primero en fragmentos de 4 bits. En cada momento, se transmiten 3 bytes utilizando 6 tonos, un tono para cada fragmento de 4 bits. Los 6 tonos se emiten en un rango de 4.5 kHz dividido en 96 frecuencias igualmente espaciadas:

Para todos los protocolos: dF = 46.875 Hz. Para protocolos no ultrasónicos: F0 = 1875.000 Hz. Para protocolos ultrasónicos: F0 = 15000.000 Hz.

Obteniendo la dirección IP local

Por conveniencia, se utiliza un simple truco de WebRTC para detectar automáticamente la dirección IP local de tu máquina, para que no tengas que proporcionarla manualmente. Sin embargo, la última especificación de WebRTC impide esto por razones de seguridad, por lo que en algún momento esta "característica" dejará de funcionar en todos los navegadores. Por ejemplo, ya no funciona en Safari.

Compilación

Módulo Web Assembly wave.wasm

Necesitarás un compilador Emscripten. Ejecuta el script compile.sh.

Herramienta CLI wave-share


Importante: Esta herramienta CLI fue el prototipo de la ahora biblioteca independiente ggwave. Asegúrate de echarle un vistazo, ya que tiene ejemplos más actualizados para la aplicación de este tipo de comunicación de datos a través del sonido.


Esta es una herramienta simple que recibe y envía datos utilizando el protocolo tx/rx de sonido wave-share explicado. Escribe algún texto en la entrada estándar y presiona Enter para transmitir.

root@kitploit:~
# build
git clone https://github.com/ggerganov/wave-share
cd wave-share && mkdir build && cd build
cmake ..
make

# running
./wave-share

Aquí hay un video corto que demuestra cómo usar la herramienta CLI:

Wave-share: herramienta de línea de comandos

Problemas conocidos / cosas por mejorar

  • No funciona con: IE, IE Edge, Chrome/Firefox en iOS, Safari en macOS
  • La transmisión de sonido ultrasónico no funciona en la mayoría de los dispositivos. ¿Probablemente limitaciones de hardware?
  • En presencia de múltiples redes locales, actualmente no se puede seleccionar cuál usar. Siempre se usa la primera
  • Ocasionalmente hay crujidos de sonido durante la transmisión. Es necesario optimizar el código Tx
  • El tamaño del .js generado por emscripten es demasiado grande (~1MB). ¿Reescribir en JS puro?
  • En dispositivos móviles, usando Firefox, la página puede permanecer ejecutándose en segundo plano incluso después de cerrar la pestaña
Descargar herramienta
Tamaño, [B]Descripción
1Tipo del SDP - Oferta o Respuesta
1Tamaño del paquete en bytes (sin incluir bytes ECC)
4Dirección IP del par transmisor
2Puerto de red que se utilizará para la comunicación
32Huella digital SHA-256 de los datos de la sesión
40Credenciales ICE - 16 bytes de nombre de usuario + 24 bytes de contraseña
32Bytes de corrección ECC utilizados para corregir errores durante la Tx
Frec, [Hz]Valor, [bits]Frec, [Hz]Valor, [bits]...Frec, [Hz]Valor, [bits]
F0 + 00*dFFragmento 0: 0000F0 + 16*dFFragmento 1: 0000...F0 + 80*dFFragmento 5: 0000
F0 + 01*dFFragmento 0: 0001F0 + 17*dFFragmento 1: 0001...F0 + 81*dFFragmento 5: 0001
F0 + 02*dFFragmento 0: 0010F0 + 18*dFFragmento 1: 0010...F0 + 82*dFFragmento 5: 0010
.....................
F0 + 14*dFFragmento 0: 1110F0 + 30*dFFragmento 1: 1110...F0 + 94*dFFragmento 5: 1110
F0 + 15*dFFragmento 0: 1111F0 + 31*dFFragmento 1: 1111...F0 + 95*dFFragmento 5: 1111