Download protegido por Widevine? CDM? L3? Que isso?! - katomaro/katomart GitHub Wiki

Primeiramente, vamos começar falando sobre o que é DRM

  • DRM (Digital Rights Management) refere-se a tecnologias projetadas para proteger direitos autorais controlando o uso de conteúdo digital. É utilizado por algumas plataformas de cursos para tentar impedir o download das mídias (o que fere o seu direito como consumidor de poder consumir o material da forma que quiser)

Quais os tipos de DRM existentes?

  • Se você for um bom leitor, você viu no meu código que eu categorizo qual tipo de DRM a plataforma utiliza. Existem DRMs falsos (como a implementaçao de marcas d'agua), ou como são chamados DRM Social que funciona na base do medo (porém as plataformas não raramente validam os dados, então o pessoal mal-intencionado simplesmente usa dados falsos, e acaba apenas ferindo o direito do consumidor real), e DRMs reais, que realmente fazem a criptografia do conteúdo. Na descrição do tipo de DRM no código, eu categorizo o que cada plataforma aplica ;)

  • Dentre as tecnologias de DRM REAL, temos algumas variantes, vou restringir seus nomes para proteções de Vídeo, pois existem técnicas diferentes para proteção de diferentes tipos de arquivo. Dentro das proteções de vídeo, temos tecnologias como:

    • Widevine: Desenvolvido pelo Google, que é disparadamente o DRM mais utilizado pelas plataformas, por sua praticidade de implantação e compatibilidade com navegadores da web e dispositivos Android para proteger conteúdo de vídeo e áudio, afinal, a Google é uma Gigante.
    • PlayReady: Criado pela Microsoft, o PlayReady é utilizado em uma poucas plataformas, normalmente apenas as de faculdade que tem parceria com a Microsoft.
    • FairPlay: Desenvolvido pela Apple, é usado para proteger conteúdo distribuído através do iTunes, Apple Music e Apple TV e também por aplicações nativas do sistema da Apple. Ele basicamente só vai funcionar com dispositivos da Apple.
  • Dentre estes 3, eles podem co-existir em paralelo em uma mesma plataforma, porém, todas acabam caindo para o Widevine por sua simplicidade e alta compatibilidade, e por ser a mais utilizada, é mais fácil extrair conteúdo dele também, afinal, um celular Android você compra por 1/10 de um dispositivo da Apple, e o Brasil hoje é mais movido ao Mobile, então o PlayReady simplesmente costuma cair no esquecimento.

Introdução ao Widevine

  • Widevine é uma solução de DRM desenvolvida pela Google, que tenta impedir o download das mídias. Como dito anteriormente, é a tecnologia mais implementada para pelas plataformas, porém...

  • Como eu apresentei em outros lugares, é relativamente fácil realizar o download dessas mídias "protegidas", principalmente quando são implementações próprias (tipo as que simplesmente fazem o uso do Shaka Packager), estas nunca protegem contra o download do Widevine, pelo menos não de quem tem alguma base técnica.

  • Eu também apresento que a única solução de implementação do Widevine que pode ser implementada para efetivamente impedir o download de vídeos é o serviço VDOCipher, e eu vou esclarecer o motivo logo abaixo, mas antes disso..

Tecnologia Por Trás do Widevine

  • O Widevine utiliza encriptação para proteger conteúdo, gestão de licenças para controlar acesso, e ambientes de execução seguros (TEE) para assegurar a reprodução protegida de conteúdo.

  • Ele também impõe restrições sobre a saída de vídeo para prevenir gravações não autorizadas, utilizando técnicas como a detecção de gravação de tela e proteção HDCP.

  • Comicamente (e esta é a opção manual para usuários extremamente leigos e preguiçosos), você pode hospedar uma máquina virtual para gravar a tela da máquina virtual, ou utilizar o Tubedigger como navegador e ele terá a saída de vídeo, assim conseguindo realizar a gravação de stream.

  • O Widevine também conta com níveis diferentes de segurança, categorizando dispositivos em L1, L2, e L3, baseando-se em seu nível de segurança:

    • L1: Maior segurança; descriptografia e reprodução dentro do TEE, em outras palavras: Em um dispositivo L1, todo o processo de descriptografia e renderização do conteúdo ocorre dentro de um ambiente de execução confiável (TEE - Trusted Execution Environment). Isso significa que o conteúdo permanece protegido durante todo o processo, desde a descriptografia até a exibição na tela, protegendo contra tentativas de captura de vídeo. Dispositivos que cumprem com os requisitos L1 podem reproduzir conteúdo em alta definição (1080p) ou qualidade superior, como 4k, 8k, etc.
    • L2: O nível L2 é menos comum e oferece um grau de segurança intermediário, onde a descriptografia do conteúdo ocorre dentro do TEE, mas a renderização de vídeo não. Na prática, dispositivos L2 são raros sendo quase que lendas, e a distinção principal tende a ocorrer entre L1 e L3.
    • L3: Menor segurança; descriptografia fora do TEE, geralmente limitando a reprodução a resoluções mais baixas, em outras palavras: Para dispositivos que operam no nível L3, a descriptografia do conteúdo não ocorre no TEE, mas sim no sistema operacional do dispositivo. Isso oferece um nível de segurança mais baixo em comparação com L1, e geralmente limita a reprodução de conteúdo a definições de resolução mais baixas (720p, e em raros casos, 1080p). Dispositivos que não são capazes de cumprir com os requisitos de hardware ou software para L1 são categorizados como L3. Este é o nível de segurança utilizado em 80% dos dispositivos Android e em todos os navegadores de internet no seu pc
  • No fim do dia, a captura de conteúdo se faz entre L1, e L3, e o que muda é a qualidade do vídeo transmitido. Conseguiu me acompanhar até aqui? Ótimo, vamos para o próximo tópico, focando apenas na extração de conteúdo do Widevine.

Extraindo conteúdo do Widevine: O Que é Uma CDM? Diferença entre DOWNLOAD e gravação e uso de placas de captura

  • CDM (Content Decryption Module) é um componente que permite a descriptografia e reprodução segura de conteúdo protegido. No contexto do Widevine, a CDM é parte integral da tecnologia de DRM. Ou seja, para efetivamente baixar mídias do Widevine, você precisará de uma CDM do Android, e eu já adianto, ISTO NÃO É COISA PARA PESSOAIS INDISPOSTAS A APRENDER E ERRAR E/OU PREGUIÇOSAS

    • A extração de uma CDM (L3) para poder efetuar o Download vai variar de qual dispositivo Android você tem. O processo de extração envolve o uso do Frida, ADBTools, e o mais importante, que o seu dispositivo esteja com acesso ROOT liberado.
    • O Processo de Root é diferente para cada dispositivo Android e você está sozinho nesta batalha pois o seu dispositivo é único e não pode ser generalizado, mas não é nada complexo. Joga o seu modelo + "root" no Google que você deve encontrar diversos tutoriais de como fazer.
      • AVISO IMPORTANTE: O Processo de Root anula a garantia do seu dispositivo e faz com que alguns aplicativos (por exemplo aplicativos de banco e/ou govbr) não funcionem até você aprender a mentir que o dispositivo não tem acesso ROOT, que já são outros 500
  • Frida é uma ferramenta dinâmica de instrumentação que permite aos desenvolvedores inspecionar e modificar aplicações em execução, e ele será a ferramenta principal no processo de uma CDM L3 Válida, pois com o Frida permite:

    • Injeções de Script: O Frida permite injetar scripts em aplicativos Android em tempo de execução. Isso pode ser usado para modificar o comportamento do aplicativo, adicionar novas funcionalidades ou bypassar restrições de segurança sem modificar o APK original. Eu não posso dar o link aqui, mas você deve encontrar com o Google um script Python feito especificamente para extrair a CDM do dispositivo
    • Análise de Comportamento: Com Frida, é possível monitorar chamadas de função dentro do aplicativo, permitindo que os desenvolvedores vejam como o aplicativo interage com o sistema operacional e outros componentes do software. Isso é particularmente útil para entender o fluxo de execução ou identificar pontos críticos no código.
    • Manipulação de Dados e Funções: Frida fornece a capacidade de modificar os valores de retorno das funções e alterar argumentos de funções em tempo real, o que é útil para testar como diferentes partes de um aplicativo reagem a variados inputs.
    • Bypass de Segurança: Em um contexto de análise de segurança, Frida pode ser usado para identificar e explorar vulnerabilidades, como bypass de mecanismos de proteção de DRM, SSL pinning, entre outros, que é onde eu queria chegar.
    • DUMP DE MEMÓRIA: Como mencionado anteriormente na injeção de scripts, o Frida pode ser usado para dumpar (extrair) informações sensíveis que são mantidas em memória, como chaves de criptografia, tokens de sessão, ou outros dados que o aplicativo processa em tempo real. Isso é feito injetando scripts que acessam e exportam esses dados da memória do aplicativo enquanto ele está em execução. Ou seja, você simplesmente vai executar o Frida, injetar o Script mencionado anteriormente e abrir uma mídia protegida pelo Widevine, e magicamente você terá a sua CDM no seu computador...
  • Infelizmente, eu não posso dar links, mas eu te digo que o Google pode, e as palavras chave estão nesta página, que te dá um guia geral, como dito, não é coisa para usuários completamente indispostos a aprender e/ou completetamente leigos e/ou preguiçosos. Você precisará pesquisar muito para conseguir, eu demorei semanas para conseguir extrair a minha primeira chave, hoje em dia eu demoro entre minutos a algumas horas.

  • UMA VEZ QUE VOCÊ EXTRAIR SUA CDM, JAMAIS A COMPARTILHE! SE O GOOGLE DETECTAR, ELA SERÁ BANIDA, OU SEJA, ELA NÃO VAI SER MAIS CAPAZ DE ACESSAR CONTEÚDO DO WIDEVINE! ISSO SIGNIFICA QUE VOCÊ PODE ESQUECER DE USAR NETFLIX E OUTROS APLICATIVOS DE STREAMING QUE USAM O WIDEVINE NO SEU DISPOSITIVO!

  • Agora sobre gravação: Como dito, é o processo manual para extrair o conteúdo, você pode usar uma máquina virtual para gravar a tela, ou usar o Tubedigger no Modo REC para que ele atue como seu display de vídeo (isso não funciona para todas as plataformas!). Processo manual não é ruim, porém, não é aplicável ao script e cabe a você esperar cada segundo e organizar tudo corretamente.

    • Porém, o processo de gravação tem um benefício oculto: **Usuários que tem um pouquinho de dinheiro podem comprar placas de capturas vulneráveis e gravar diretamente a transmissão HDMI. Dependendo do Dispositivo, você consegue até mesmo gravar L1! Porém, é aquilo, tem que deixar tocar normal sem interagir e esperar todos os segundos, e estes dispositivos vulneráveis são frequentemente banidos pela Google, e vem da China. Novamente, não posso especificar nenhum.
  • E tem como eu extrair uma chave L3 de um navegador ou de um emulador android? SIM! Porém, a maioria dos serviços sérios (ou seja, que não são "cursos livres") vai bloquear esta chave por padrão, pois ela é uma chave genérica. O dump correto e real continua sendo o primordial, porém a metodologia é quase a mesma, então você pode experimentar antes de investir em um celular usado, por exemplo.

    • O motivo disso é só um: A plataforma foi feita por um desenvolver porco que só colocou o Shaka Packager ou outro player, baixou o conteúdo e ele saiu preto e falou "tá protegido". Simples :)

Por que o VDOCipher Protege?

VDOCipher é uma plataforma de vídeo online que oferece uma solução segura para hospedar e transmitir conteúdo de vídeo, visando principalmente negócios e educadores que precisam de proteção contra o download. O VDOCipher incorpora MUITAS medidas de segurança E monitoramento para assegurar que o conteúdo seja acessível apenas por usuários autorizados, minimizando assim os riscos de cópia das mídias. Em outras palavras:

  • Eles simplesmente monitoram todas as suas requisiões:
    • Se você fizer mais de uma requisição errada, a sua CDM é banida do VDOCIPHER, simples assim, pois eles disponibilizam o player proprietário deles que é frequentemente atualizado para mudar a lógica de acesso e ele é bem protegido, então se o método de distribuição for VDOCIPHER, você precisa de um cuidado adicional ao fazer download.
    • Com o monitoramento constante, se suas requisições parecerem automatizadas ou rápidas demais, eles também banem a sua chave.
    • Eles mantém absolutamente tudo em log e fazem um fingerprinting absurdo dependendo do dispositivo, assim, banindo chaves novas que você tente usar até você mudar sua identidade inferida.
    • Outras métricas que eu não quero citar, isto não é marketing para eles, é apenas falando que é a única implementação do Widevine que realmente funciona pois os desenvolveres lidam diretamente com segurança...
      • E eu também! Ofereço consultoria para produtores para dar uma solução de responsabilização, seria mais para o lado social, mas completamente respaldado no jurídico e validável/auditável.

No fim do dia...

Não é qualquer um que vai baixar do Widevine (usuário leigo/indisposto/preguiçoso? Tubedigger no REC e força de vontade é o recomendado), chaves precisam vir de dispositivos reais embora chaves genéricas possam funcionar na sorte e não custa tentar, e se você ver escrito VDOCipher a menos que você seja de TI/INFOSEC desista de baixar ou vai queimar dinheiro, exceto que...

  • Eu pretendo os implementar no programa algum dia, mas como eles constantemente se atualizam, é custoso isso.
    • Outra coisa que eu estou pensando em fazer é fornecer uma API com CDMs extraídas de promptu para quem apoiar o projeto, mas eu preciso estruturar isso bem, pois exigirá um login para cada pessoa e uma lógica de utilização para evitar a extração das nossas CDMs e que a Google as bana!