flitch icon indicating copy to clipboard operation
flitch copied to clipboard

New auth system still broken

Open leduard opened this issue 3 years ago • 26 comments

O sistema de autenticação que colocaram na API acabou quebrando bastante coisa, atualmente todas as rotas exceto a de pegar os links dos eps funcionam. Atualmente no APP, se você clicar para assistir um episódio, você é levado para um vídeo falando do app original, AnimeTV... A tentativa de arrumar esse erro pela PR #14 acabou só funcionando por 2 dias eu acredito, após isso houve outra alteração que exige que sejam enviados dois parâmetros na URL da requisição, token e r Esses parâmetros são necessários apenas para as requisições que vão pegar dados de streaming de eps

Acabei batendo com esse problema e tive uma solução, não sei se é a ideal nem sei porque ela funciona 😅, mas funciona... Basicamente os parâmetro token e r são inteiros que quando divididos token / r, seu resultado tem que ser por volta de 3248982548 (não me pergunte porque...)

Essa foi minha solução para o problema:

const STREAMING_DATA_TOKEN = '32489800000000';
const STREAMING_DATA_R = '10000';
const EP = '433311';

const url = `https://appanimeplus.tk/meuanimetv-40.php?episodios=${EP}&token=${STREAMING_DATA_TOKEN}&r=${STREAMING_DATA_R}`

A única coisa que muda são esses parâmetros mesmo, a questão dos headers precisam continuar. image

leduard avatar Jun 24 '21 22:06 leduard

Excelente, não tinha menor ideia de onde vinham este parâmetro token e r, então muito obrigado, vou implementar essa solução, salvou bastante tempo. Obrigado novamente!

alexrintt avatar Jun 24 '21 22:06 alexrintt

Acabei de ver que na verdade essa solução é temporária. O token e o r é gerado automaticamente dentro do aplicativo deles, mas parece ser algo relacionado ao timestamp da requisição, de qualquer forma, obrigado pela issue, vou tentar encontrar uma solução quando estiver mais tempo livre.

alexrintt avatar Jun 25 '21 00:06 alexrintt

Realmente token e r são gerados automaticamente pelo app dos cara, eu testei umas 10 combinações de token / r que foram gerados por eles e deu aquele valor aproximado. Eu também acredito que será método temporário, porém eu não consegui achar nenhuma relação visível com o timestamp. De qualquer forma boa sorte, e obrigado pela documentação da API 😁

leduard avatar Jun 25 '21 20:06 leduard

Acho que entendi como são pegos os parâmetros:

r = Math.floor(Math.random()*90000) + 10000; // numero de 5 digitos aleatório
time = ((Date.now()/1000)*2) // é basicamente o valor quando vc dividir o token pelo r
token = (time * r).toFixed() // token ( token / r = time => token  = time * r )

console.log(time)
console.log(r)

console.log(`?episodios=433311&token=${token}=&r=${r}`)

De fato era relacionado com o timestamp, todas as vezes que você divide os valores de token por r que são usados pelo app dos cara, o resultado é o timestamp * 2 do momento daquela request Continuo não tendo certeza se isso vai ser uma solução definitiva ou apenas temporária...

Também tem a questão do token que vai no header da request X-Auth, ele é gerado com um POST no subdominio auth dos cara, basicamente você tem que enviar um arquivo no corpo da request e tem que ter Content-Type: application/octet-stream no header, testei aqui e consegui um arquivo .dat com umas coisa meio doida dentro dele, falta saber se esse arquivo também é gerado pelo app na hora da request ou é a mesma coisa sempre.

leduard avatar Jun 27 '21 17:06 leduard

Cara, isso parece ser uma solução boa. Não me parece que está faltando algo. E minha dúvida é a mesma que a sua. Será que esse arquivo .dat é temporário? Mas de qualquer forma, vou implementar essa solução e veremos nos próximos dias se vai ser permanente.

E cara, muito obrigado pelo esforço, sinceramente. Bom domingo e bom trabalho!

alexrintt avatar Jun 27 '21 19:06 alexrintt

Eu também estou com esse problema! Mas eu encontrei uma solução.

É basicamente um outro link que retorna os dados da mesma API, assim eu não preciso mandar informações pelo headers na hora hora do request! Mas há uma pequena desvantagem: não tem a resolução Full hd! Tem apenas as resoluções SD e HD. Mas funcionam.

IsaiasRafael avatar Jun 28 '21 16:06 IsaiasRafael

Entendi, esse outro link é o link antigo?

alexrintt avatar Jun 28 '21 17:06 alexrintt

Não é o link antigo, é uma variação que outro app fez.

Mas ele retorna os mesmos animes que estão no latest do AnimeTV original, mas os links dos vídeos já vem junto, sem precisar fazer um nova requisição em busca dos links dos vídeos. O mesmo vale para os episódios dos animes! Quando fizer o request dos episódios, os links dos vídeos de cada episódio virá junto, tanto sd, tanto hd, mas sem o full-hd.

Eu olhei o AnimeDart, ele ainda está com o aviso do AnimeTV. Esse seu app está muito bonito e otimizado! Fiquei impressionado. Eu também fiz um app de Animes em Java e Kotlin, mas sem fins lucrativos! Apenas para se livrar das propagandas :)

IsaiasRafael avatar Jun 28 '21 18:06 IsaiasRafael

Boa noite ou boa, eu quero apresentar aqui um erro que estou tendo com a api, estava fazendo testes para fazer funcionar em um site junto com o token para tentar fazer um site mas pelo visto eu não consigo fica sem dar video image

Espero que possam me ajudar. image

zluckkyus avatar Jul 05 '21 00:07 zluckkyus

pelo que percebi image eu não tenho permissão para acessar esta pagina, que eo do anime (player) E também são com todos.

zluckkyus avatar Jul 09 '21 20:07 zluckkyus

Quando esse erro de permissão acontece é por causa de uma aspas duplas ou um backslash sobrando na URL

https:\//urldovideo.com/monte=de&parametros=\da&url/

alexrintt avatar Jul 11 '21 04:07 alexrintt

é possivel arrumar este problema? como?

zluckkyus avatar Jul 13 '21 00:07 zluckkyus

Você só precisa normalizar a URL. Pode enviar aqui a URL completa que dá o erro? Acredito que se for isso mesmo é só um errinho bem simples.

alexrintt avatar Jul 13 '21 05:07 alexrintt

Estou tendo mesmo problema do @tgkevinbr, achei estranho ter virgula no padrão da url, isso não deveria acontecer sabendo que para querys utilizamos "?". Veja o que está retornando:

https://redirector.googlevideo.com/videoplayback?expire=1625022935&ei=V3HbYLadK4nougKkpZKgBQ&ip=149.56.143.221&id=3026087d8e1d87e9&itag=22&source=blogger&mh=3u&mm=31&mn=sn-4g5ednse&ms=au&mv=u&mvi=4&pl=27&susc=bl&mime=video/mp4&vprv=1&dur=45.186&lmt=1624630913081761&mt=1624993738&txp=1311224&sparams=expire,ei,ip,id,itag,source,susc,mime,vprv,dur,lmt&sig=AOq0QJ8wRAIgeHkvlMnqJfFjKPmc5vIPsYYIvF9dUD1nYJ2GRej1pnwCIGIDmCxQWiqjXl34bO4mc_LoFcHkf3QZHtqi5FJRCDeT&lsparams=mh,mm,mn,ms,mv,mvi,pl&lsig=AG3C_xAwRAIge57ICp8OriWdh_MthAcWsbPqD9r-KeCYFDgH_OOQF-oCICAPBHMVjgPhCTKpcvtRf2nCxUCjM2uPwDWqmD2cYApM

LucasFerreira159 avatar Jul 14 '21 21:07 LucasFerreira159

@tgkevinbr @LucasFerreira159 Ambos os erros só acontecem porque vocês não estão enviando um header necessário para a autenticação, esse link que da "sem permissão" é um link padrão que é retornado quando não se autentica. Também acontece isso quando você não manda nem o token nem o r atualizados

Tá aqui um cURL de como fazer essa requisição da forma correta:

curl --request GET \
  --url 'https://appanimeplus.tk/meuanimetv-40.php?episodios=486836&token=280278124831014=&r=86177' \
  --header 'X-Auth: CODIGO_DE_AUTENTICAÇÃO' \

Lembrando claro, você precisa do arquivo .dat que eu já comentei sobre para poder pegar o código de autenticação, e também esse &token=280278124831014=&r=86177 estão desatualizados porque essa request é de um tempo atrás.

leduard avatar Jul 14 '21 22:07 leduard

o arquivo .dat Está indisponivel para ver. eu estou vendo como fazer funcionar.

zluckkyus avatar Jul 15 '21 02:07 zluckkyus

Aqui o arquivo novo, ele mudou desde que eu tinha enviado, porém os códigos de autenticação que foram criados com o antigo arquivo ainda continuam funcionando.

leduard avatar Jul 15 '21 20:07 leduard

como posso fazer funcionar na template chamada moovetv, estou vendo aqui já implementei tudo certo só estou vendo como fazer funcionar.

zluckkyus avatar Jul 16 '21 21:07 zluckkyus

Acho que mudaram o método de autenticação de novo, não tenho conseguido puxar os dados dos episódios usando esses métodos e o app (Animes Dart) também não tem funcionado. Alguém tem alguma ideia do que mudou?

Aseroraorion avatar Jul 24 '21 13:07 Aseroraorion

@yuyura, mesmo problema aqui :/

izakdvlpr avatar Jul 26 '21 16:07 izakdvlpr

@yuyura, eu vi que eles mudaram o endpoint da api para essa daqui https://appanimeplus.tk/meuanimetv-71.php

izakdvlpr avatar Jul 26 '21 16:07 izakdvlpr

Estou com dificuldade para manusear o arquivo .dat, nunca mexi com esse tipo de arquivo, alguém pode me ajudar? Sobre o uso da api, não consigo acessar o vídeo por falta de permissão, então creio que falta o argumento x-auth no header né? Então, não sei bem como fazer isso, aceito ajuda :(

ImFelippe365 avatar Aug 03 '21 17:08 ImFelippe365

Sobre o arquivo .dat não é algo que a gente vá manusear, por que é um arquivo binário, como podemos ver aqui nesta página da Wikipédia.

Então o que você precisa é apenas enviar o arquivo .dat no corpo da requisição (eu acho, pode ser que tenha que enviar em outro lugar).

Basicamente:

  1. Veja como enviar uma requisição HTTP a partir do que você tá usando (React Native, Flutter, VanillaJs, etc.). Isso vai servir pra se autenticar na API, buscar dados, etc.
  2. Veja como enviar uma multipart request a partir do que você tá usando. Isso vai servir pra enviar o arquivo na requisição da etapa 1.
  3. Sobre a falta de permissão, essa parte já é mais chata por que tem que ver a API deles, ver os endpoins certinho e o que tem que enviar em cada um. Eu não estou muito atualizado por que faz um tempinho que não mexo na API deles, mas eu começaria monitorando o App oficial do zero, veja todas as requisições que eles enviam (Use o Burp Suite pra isso, é bem completo ele), e tente replicar as requisições por algum cliente desktop, como o Insomnia por exemplo. Aí caso precise de algum dado, veja se já citaram esse dado aqui na issue (Como aquele token e o arquivo).

Atualmente acredito que não dá mais de usar o Apk pra extrair informação por que eles obfuscaram. E se der, demora um tempinho. Então restou monitorar as requisições HTTP que eles enviam.

Mas qualquer dúvida que ficou manda aí, vou tentar responder, valeu!

alexrintt avatar Aug 03 '21 20:08 alexrintt

Interceptei as requisições do app há uns dias, mas ainda não consegui resolver o problema. Só percebi que: A url base da requisição mudou, como já havia sido citado aqui pelo @zevdvlpr, agora ela é https://appanimeplus.tk/meuanimetv-71.php.

E a rota de autenticação mudou também, agora o http post deve ser feito em https://auth.appanimeplus.tk/v7.php, e fora a url, a única diferença é que parece que o conteúdo do arquivo tem que ser convertido para base64. image

Fora essas duas coisas, nada parece ter mudado no que diz respeito as requisições, para pegar as informações do episódio ainda tem que fazer aquelas operações no timestamp e enviar o token que a rota de autenticação cuspiu de volta como "x-auth" no cabeçalho da requisição.

O problema mesmo agora é o que a rota do episódio retorna, não é mais conteúdo humanamente legível, agora o texto tá criptografado, se alguém quiser ver, upei o resultado da requisição no ghostbin aqui image

Aseroraorion avatar Aug 03 '21 23:08 Aseroraorion

essa criptografia parece ser um token JWT, tentei várias maneiras de decodificar, porém infelizmente não consegui.

Mudando um pouco o rumo desta issue, mas descobri um site que retorna exatamente um json com informações de streaming, veja: https://animefire.net/video/re-zero-kara-hajimeru-isekai-seikatsu-2nd-season-dublado/7

trocando a palavra video por animes, o front-end da página é mostrado.

leonimeloo avatar Aug 30 '21 00:08 leonimeloo

Retorna mesmo, parece ser possível mapear os endpoints usando o devtools do navegador. Se você for fazer alguma documentação semelhante à desse repositório, seria legal se compartilhasse por aqui. De qualquer forma, atualmente não estou mais procurando implementar API de terceiros, mas sim migrar os animes para servidor à parte (apenas indexar), dessa forma vou poder disponibilizar a API sem risco de sofrer qualquer alteração como aconteceu na API do AnimeTV.

alexrintt avatar Aug 31 '21 01:08 alexrintt

https://appanimeplus.tk/play-api.php está funcionando e não precisa de autenticação.

Guaxinim5573 avatar Oct 11 '22 23:10 Guaxinim5573

Galera, to com um problema. O retorno da api ta vindo em string (não sei se estou fazendo algo errado, mas acredito que não) e não sei como transformar pra JSON normalmente. Estou testando a api novamente no mesmo app que tinha feito antes dos problemas com o token, então acredito que tenha mudado algo na resposta da API e eu tenha que mudar algo, mas não sei como resolver, alguma solução?

ImFelippe365 avatar Oct 22 '22 15:10 ImFelippe365

Sem código é impossível saber.

Máximo que consigo chutar pelo que disse:

https://stackoverflow.com/questions/10976897/converting-a-string-to-json-object.

alexrintt avatar Oct 22 '22 15:10 alexrintt

Sem código é impossível saber.

Máximo que consigo chutar pelo que disse:

https://stackoverflow.com/questions/10976897/converting-a-string-to-json-object.

Tinha até descrevido o problema bonitinho, mas apaguei porque descobri o motivo kkkkkkkkkkk Simplesmente atualizei as dependências do projeto e voltou. O que isso tem a ver com receber uma resposta em string ao invés de JSON não sei, mas pelo menos voltou a funcionar 😭

ImFelippe365 avatar Oct 22 '22 16:10 ImFelippe365