Saltar al contenido

Descifrar y combinar archivos de audio .ts con .m3u8

Después de indagar en diferentes repositorios y páginas finalmente nos encontramos con la respuesta que te enseñamos más adelante.

Solución:

Las versiones recientes de ffmpeg deberían poder descifrar las transmisiones AES-128 HLS. No necesitas un servidor web. Si el m3u8 Los URI/rutas son incorrectos, puede:

  • crear un directorio
  • copia el key a un key archivo, es decir my.keyy colóquelo en el directorio dir. Tenga en cuenta que keys se puede rotar, si la lista de reproducción tiene múltiples keys cópielos todos en diferentes archivos.
  • copie todo .ts segmentos al mismo directorio
  • copiar y editar el playlist.m3u8 y use solo el(los) nombre(s) de archivo para el key(s) URI(s) y segmentos.
  • para obtener un solo .ts archivo hacer:

    ffmpeg -i playlist.m3u8 -c copy output.ts
    
  • si solo desea la transmisión de audio sin el .ts contenedor se puede extraer. Por ejemplo: suponiendo que tiene una sola transmisión de audio usando el AAC ejecución del códec:

    ffmpeg -i playlist.m3u8 -map 0:a -c copy output.aac
    

Esto extraerá el AAC transmitir a un archivo sin volver a codificar. Si desea un códec diferente a su fuente, tendrá que volver a codificar.

Si por alguna razón tienes que usar openssl para descifrar los segmentos tenga en cuenta que si no IV se especifica entonces el IV es igual a la secuencia de medios del segmento, es decir. el primer segmento tiene IV=0el segundo tiene IV=1 y así. Después del descifrado, actualice la lista de reproducción para señalar los segmentos descifrados y elimine el EXT-X-KEY línea. Si sigue esta ruta, ni siquiera necesita ffmpeg para obtener una sola .ts archivo como MPEG-TS es directamente concatenable, es decir. solo puedes usar cat en los segmentos descifrados.

He tenido pocas horas libres hoy y jugué con esto. Para resumir, esa base64 key está encriptado AES. Este cifrado adicional se realiza con key que se genera dinámicamente a partir de los datos del dispositivo… lo que significa que incluso si tengo una carpeta de datos completa de su dispositivo, no podría descifrarla.

Ahora, cuando posee un dispositivo rooteado con datos fuera de línea, eso es otro asunto: obviamente puede inyectar su código para interceptar key cuando se descifra para que el contenido pueda comenzar a reproducirse… así es como lo obtuve.

Cuando tienes la debida keyel descifrado y unión de archivos *.ts es trivial. Te recomiendo que uses FFMPEG para esta tareami código C# que dejo para ilustración funciona bien solo funciona en algunos casos (dependiendo de cómo se codifican los archivos):

var folder = "path_to_folder";
byte[] encryptionKey = File.ReadAllBytes(folder + "path_to_key.key");

var outputFile = "c:\i_love_you_guys.ts";
using (FileStream outputFileStream = new FileStream(outputFile, FileMode.Create))

    var files = Directory.GetFiles(folder, "*.ts");
    for (int i = 0; i < files.Length; i++)
    
        byte[] encryptionIV = new byte[16];
        using (FileStream inputFileStream = new FileStream(files[i], FileMode.Open))
        
            using (var aes = new AesManaged  Key = encryptionKey, IV = encryptionIV, Mode = CipherMode.CBC )
            using (var encryptor = aes.CreateDecryptor())
            using (var cryptoStream = new CryptoStream(inputFileStream, encryptor, CryptoStreamMode.Read))
            
                cryptoStream.CopyTo(outputFileStream);
            
        
    

Entonces, esto resultó ser una búsqueda inútil. Lo que dice @aergistal en su respuesta es completamente válido siempre que tenga la my.key. Por lo tanto, enfóquese en obtener key en formato plano y el descifrado será muy fácil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *