Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Não é possível acessar os dados da Nuconta (Extrato, saldo, etc) #419

Open
eduardojunio opened this issue Aug 27, 2023 · 146 comments
Open

Comments

@eduardojunio
Copy link

eduardojunio commented Aug 27, 2023

Clonei o repo do zero e gerei o certificado rodando o comando pynubank no terminal.

Escrevi esse arquivo:

from pynubank import Nubank

nu = Nubank()

nu.authenticate_with_cert('[FILTERED]', '[FILTERED]', 'cert.p12')

print(nu.get_account_balance())

E estou recebendo esse erro:

Traceback (most recent call last):
  File "[FILTERED]/pynubank-test/test.py", line 7, in <module>
    print(nu.get_account_balance())
          ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/pynubank/auth_mode.py", line 23, in wrapper
    return function(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/pynubank/nubank.py", line 235, in get_account_balance
    data = self._make_graphql_request('account_balance')
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/pynubank/nubank.py", line 52, in _make_graphql_request
    return self._client.post(self._query_url,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/pynubank/utils/http.py", line 49, in post
    return self._handle_response(post(url, json=json, headers=self._headers, **self._cert_args))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/pynubank/utils/http.py", line 35, in _handle_response
    raise NuRequestException(response)
pynubank.exception.NuRequestException: The request made failed with HTTP status code 401
@andreroggeri
Copy link
Owner

Só pra ter certeza, você trocou 'CPF' e 'SENHA' pelo seu CPF e sua senha ?

@eduardojunio
Copy link
Author

@andreroggeri sim. 😅

@andreroggeri
Copy link
Owner

Outros métodos tipo o get_account_feed funcionam?

Eu tenho uma automação rodando aqui normalmente

@eduardojunio
Copy link
Author

@andreroggeri só como contexto extra: na verdade eu não uso sua lib, mas escrevi minha própria implementação baseado no trabalho que você e outros fizeram em descobrir como o app do Nubank funciona.

Minha implementação basicamente é uma integração entre o Nubank e o You Need a Budget (YNAB). Eu tenho um job no Google Cloud que roda todo dia 1am. Ele falhou pela primeira vez dia 23 de agosto com um 401 da ghostflame. Inicialmente eu pensei que fosse alguma coisa com o certificado, e quando rodei meu script pra gerar um novo, percebi que o www-authenticate não estava mais vindo (por isso abri a #418). Mas depois de resolver o problema (adicionar o header de correlation) e gerar um novo certificado, o 401 permaneceu.

Tentei usar sua lib (como descrevi na issue), mas está com o mesmo problema da minha. Logo, estou assumindo que o Nubank mudou a API dia 23 (porque dia 22 estava funcionando normal a integração). Na verdade esse job roda a meses (desde Maio), essa foi a primeira vez que falhou com um 401.

Eu queria fazer a engenharia reversa no app pra descobrir como o Nubank tá fazendo agora, mas não tenho o tooling necessário e nem muito conhecimento de apps nativos (Android e iOS). 🥲

@eduardojunio
Copy link
Author

Outros métodos tipo o get_account_feed funcionam?

401 também. Imagino que todos os métodos que usam a ghostflame terão o mesmo problema.

@eduardojunio
Copy link
Author

@andreroggeri estava pensando aqui, o 401 idealmente vem com o "jeito" de como o cliente deveria se autenticar nos headers. Citando a MDN:

This status code is sent with an HTTP WWW-Authenticate response header that contains information on how the client can request for the resource again after prompting the user for authentication credentials.

Daí fui ver o WWW-Authenticate da resposta da ghostflame e olha o que achei:

'www-authenticate': 'challenge-platform deep-link="nuapp://dev_auth"',

Parece que precisa autenticar com o app de alguma forma. Acho que a alegria das integrações acabaram (ao menos com a ghostflame). 😢

@andreroggeri
Copy link
Owner

Talvez eles estejam fazendo rollout gradual, pois a minha automação continua funcionando.

Screenshot_20230827_165446_Samsung Internet.jpg

Vai ser difícil eu ajudar se não conseguir reproduzir :/

@diegomdrs
Copy link

diegomdrs commented Aug 27, 2023

Por aqui, no meu app em node que possui a parte da autenticação baseada no pynubank, por enquanto, tudo ok. Fiz o processo de obtenção de certificado, refreshToken e etc. do zero e está ok. Vou ficar de olho também

@djmarcosban
Copy link

acabei de clonar a repo e recebo 401 tambem

@flarco
Copy link

flarco commented Aug 29, 2023

Aqui tou recebendo 401 também...

@andreroggeri andreroggeri pinned this issue Aug 29, 2023
@andreroggeri
Copy link
Owner

Agora parou aqui também 😭

@diegomdrs
Copy link

E por aqui também, 401 e nada do saldo de conta corrente. Por enquanto os endpoints das consultas ao cartão de crédito estão funcionando

@Reikagilu
Copy link

estou exatamente como o @diegomdrs, que droga, acabei de montar um programinha legal aqui com sua api
será que esse é o fim?

@lucasgr7
Copy link

lucasgr7 commented Aug 31, 2023

Recebendo 401 em métodos que envolvem transações da conta, transações de cartão de crédito tudo ok.

Olhando pelo site aparenta ter alguma alteração afetando:
image

@Vidalvorada
Copy link

Também estou obtendo o 401.

@Bezouro
Copy link

Bezouro commented Aug 31, 2023

Recentemente reportei um problema em um dos endpoints do Nubank na Hackerone enquanto trabalhava no https://github.com/Bezouro/nubank.ts e o problema foi resolvido semana passada (bate com a data que esse problema começou a ocorrer, coincidencia? hmm) fui afetado por isso tbm e agora to correndo atrás pra descobrir como lidar com isso... quaisquer novidades deixo registrado aqui tbm

O interessante é que o header trás o deeplink nuapp://dev_auth o que sugere que talvez o nubank esteja percebendo que estamos acessando a api por fora do app e talvez em breve tenhamos uma forma de obter um token de api proprio para desenvolvedores.

@tavlima
Copy link

tavlima commented Aug 31, 2023 via email

@monrapps
Copy link

monrapps commented Sep 1, 2023

+1

@Bezouro
Copy link

Bezouro commented Sep 1, 2023

Uma pena que meu dispositivo de testes quebrou, era o único aparelho rooteado que eu tinha
to tentando configurar um emulador, mas sem webcam é complicado pra fazer os dois estágios da autenticação

@andreroggeri
Copy link
Owner

@Bezouro ontem eu tava dando uma explorada no app e vi que eles estão fazendo detecção de root / magisk e afins.

Você já tem algum método para não ser detectado ?

Eu vi que bloquear a requisição não é o suficiente :/

@Bezouro
Copy link

Bezouro commented Sep 1, 2023

@andreroggeri Nunca tive problema com isso, eu usava um nexus 5 com custom rom, e root via magisk, até semana passada aqui estava funcionando perfeito, tenho que conferir agora :(

Vou tentar arrumar outro celularzin de cobaia, eu tenho um s10+ aqui mas o knox me quebra

@andreroggeri
Copy link
Owner

Eu sei que no magisk tem umas paradas pra "ocultar" o root . Você tinha algo do tipo ativo ?

@andreroggeri
Copy link
Owner

é, pelo o que eu tava vendo, o comportamento do app mudou também... Não tem mais como acessar as coisas da conta sem fazer o segundo passo de autenticação. 😢

Eu vou dar mais uma investigada, mas acho improvável que consigamos burlar isso.
Provavelmente a parte de cartões deve ser bloqueada em breve também.

@lipemorais
Copy link

Poxa! Que tristeza essa thread!
😮

Minha automação começou a falhar ontem na conta as coisas relacionadas a cartão estão de boa.

@andreroggeri
Copy link
Owner

@lipemorais liga pros seus contatos de lá e pede pra deixarem um backdoor hahahah

@Reikagilu
Copy link

isso, faz essa pra gente, @lipemorais

@Bezouro
Copy link

Bezouro commented Sep 2, 2023

Eu sei que no magisk tem umas paradas pra "ocultar" o root . Você tinha algo do tipo ativo ?

@andreroggeri Não, nunca cheguei a ativar isso pra o nubank, porem para outros apps eu ja usei (e até que funciona bem) se vc mudar o pacote do magisk pra um aleatorio, e usar a feature de esconder normalmente da bom (se for custom rom, vale a pena tbm conferir o build.prop pra n deixar detectavel que é custom rom)

@Bezouro
Copy link

Bezouro commented Sep 2, 2023

é, pelo o que eu tava vendo, o comportamento do app mudou também... Não tem mais como acessar as coisas da conta sem fazer o segundo passo de autenticação. 😢

Eu vou dar mais uma investigada, mas acho improvável que consigamos burlar isso. Provavelmente a parte de cartões deve ser bloqueada em breve também.

Esse era meu medo quando reportei o problema pra eles, eles verem que tem gente usando a api e começar a barrar tudo...

sempre curti usar a api do nubank por conta daquele tweet então nunca me preocupei, mas agora da uma tristeza ver que ta tudo dificultando (mais do que ja era)

@Reikagilu
Copy link

Negocio se pa é todo mundo ficar chamando o suporte solicitando acesso a API kkkk

@MarcusVincius0907
Copy link

Visto o cenário atual, acredito que para consultar os dados da conta corrente, a única maneira seria pelo app solicitando o extrato via email e então importar na nossa solução customizada.

Mas não vejo hj como criar uma automação genérica, infelizmente...

Talvez no futuro, quando lançarem a funcionalidade de visualização da conta no app.nubank.com seja possível integrar novamente.

@diegomdrs
Copy link

diegomdrs commented Feb 13, 2024

Boa tarde, acompanhei a thread aí eu tava com um projeto na cabeça de controle financeiro automático para mim (não gosto de nenhum app que tem). E só com os dados do cartão da web eu ja conseguiria pegar uns dados interessantes, só me veio um problema na cabeça pela lógica de logar com qrcode (Web) não tem como logar com refresh_token ou estou errado? no caso dai eu precisaria ficar batendo o qrcode cada vez que o accessToken expirar ?

Isso mesmo.
No caso do cartão de crédito ainda é possível continuar acessando com certificado + refresh token

Falando nisso, comecei uma discussão sobre o uso do Meu Pluggy como uma possível alternativa real ao API de cartões de crédito do Nubank lá na comunidade
#431
Quem usa essa solução ou tem curiosidade, dê um pulo lá depois

Pena que é uma solução paga... No meu caso, criei minha própria dashboard (com o pynubank) justamente para utilizar recursos que só tem disponível em apps pagos. Penso que entre usar pluggy e algum outro app financeiro pago, o app seria melhor...

Há uma forma de utilizar o pluggy gratuitamente, utilizando o connector MeuPluggy. A atualização diária das transações é bem menos frequente que a versão paga e a API do Nubank, mas quebra um galho.

https://github.com/pluggyai/meu-pluggy

Nas últimas semanas os desenvolvedores tem consertado alguns dos bugs que eu e outros usuários reportaram e pouco a pouco está melhorando. Acho que quanto mais feedbacks, melhor o serviço ficará. Com alguns ajustes, estou conseguindo chegar próximo ao resultado que a API do Nubank de cartão de crédito retorna.

@mtsmachado8
Copy link

Oi galera, problema parecido aqui:
image
Alguma solução já?

@rafatio
Copy link

rafatio commented Mar 1, 2024

Fala pessoal! Alguem ainda conseguindo recuperar o certificado usando AVD? Eu tentei essa abordagem, mas o aplicativo do nubank esta sempre fechando logo assim que abre

@tgoribas
Copy link

tgoribas commented Jun 23, 2024

Diretório está vazio.

@PhyrosAlpha Conseguiu extrair o certificado ?

@TuttaDaWeb
Copy link

eu ainda não consegui resolver esse problema
alguém pode me ajudar, o owner me disse para extrair o certificado pelo telefone, eu preciso criar o certificado cert.p12 pelo telefone?

@wallacepsilva
Copy link

Pessoal, aproveitando o assunto relacionado... Sobre a senha do certificado, tentei com a informada aqui nesse tópico porém não é essa... podem informar como pegaram essa senha? se enviarem link com algum artigo já ajuda também.

@IzaakSantana
Copy link

Pessoal, aproveitando o assunto relacionado... Sobre a senha do certificado, tentei com a informada aqui nesse tópico porém não é essa... podem informar como pegaram essa senha? se enviarem link com algum artigo já ajuda também.

Onde você viu essa senha?

@wallacepsilva
Copy link

Pessoal, aproveitando o assunto relacionado... Sobre a senha do certificado, tentei com a informada aqui nesse tópico porém não é essa... podem informar como pegaram essa senha? se enviarem link com algum artigo já ajuda também.

Onde você viu essa senha?

foi citada aqui em respostas anteriores. buscando por senha encontra, de toda forma a senha que informaram é "nubank"

@DaviSMoura
Copy link

@wallacepsilva Confirmo que a senha continua sendo "nubank". Gerei um novo certificado hoje e a senha está válida.

@hugobarauna
Copy link

@DaviSMoura como que gera o certificado? Tem um passo a passo o link que pode explicar?

@DaviSMoura
Copy link

@hugobarauna

  1. Logue no app do Nubank e faça a verificação facial
  2. Faça root após já estar logado (não da pra passar pelo processo de login enquanto já está rooteado)
  3. Usando um explorador de arquivos root, Acesse o path /data/data/com.nu.production/files//KeyStore.default.p12
  4. Esse é o seu certificado. A senha é "nubank".

@Gabriel-Eduardo-Cunha
Copy link

Eu comecei a mexer com integrações bancárias por volta de Maio de 2023. Eu testei e usei Pluggy, usei em um App financeiro meu, integrava certinho com nubank.

Aí deu essa mesma época dessa issue, por volta de final de agosto, e o pessoal do Pluggy veio me avisar que nubank estava fora por conta de um novo esquema de autenticação, mas que eles logo iam resolver com open finance. Na época eu parei de usar Pluggy e abandonei integração.

Mas o ponto é, Pluggy conseguiu fazer uma integração open finance que puxava dados do Nubank. Eu voltei agora recentemente a explorar integrações, testei essa Lib (que ainda ocorre o erro 401), e isso me deixou encucado com uma questão: estamos em Agosto de 2024, e ninguém fez uma solução open source para integrar nos bancos usando Open Finance ainda? A única alternativa é com o Pluggy?

Alguém o sabe o motivo disso? Para termos chego aqui sem uma solução open finance, imagino que exista grandes impedimentos, alguém sabe quais?

@diegomdrs
Copy link

diegomdrs commented Aug 29, 2024 via email

@diegomdrs
Copy link

diegomdrs commented Aug 29, 2024 via email

@pfsmorigo
Copy link
Contributor

Oi Pessoal. Vocês costumar usar o celular com root para extrair o certificado e outro, sem root, para usar o app normalmente?

@lipemorais
Copy link

@diegomdrs @Gabriel-Eduardo-Cunha, cara eu já explorei bem a Pluggy mas não consegui entender como integrar com a API já passei um tempão testando o meu pluggy, até consigo acessar os dados pela interface mas nunca pela API. Já li a documentação todinha.

Qual é o segredo?

@Gabrielpanga
Copy link

@diegomdrs @Gabriel-Eduardo-Cunha @lipemorais Boa tarde, para discussões sobre a Pluggy, sintam à vontade para falar con o time pelo Discord da Pluggy, para que possamos ajudar pessoalmente em cada caso específico. Assim, evitamos falar sobre a solução para acessar o aplicativo do Nubank.

Como comentaram no issue, para ter acesso é necessário estar regulado pelo BACEN. A Pluggy possui licença e está permitindo o uso pessoal dos desenvolvedores por meio do MeuPluggy. Fazemos isso através do MeuPluggy para evitar abusos, já que é gratuito.

Por outro lado, para startups/negócios que precisam de contas de PJ, oferecemos planos específicos para cada um. No entanto, todos os planos são pagos.

@DaviSMoura
Copy link

Oi Pessoal. Vocês costumar usar o celular com root para extrair o certificado e outro, sem root, para usar o app normalmente?

@pfsmorigo Sim. Eu uso um iPhone como celular principal (não tem jailbreak e obviamente não tem root) e comprei um android secundário somente para logar no Nubank e fazer esse processo.

@lipemorais
Copy link

@Gabrielpanga tô tentando isso faz meses, já falei algumas vezes no chat lá mas ainda não consegui ter o suporte necessário para me desbloquear. É bem frustrante.

@SamukaDEV
Copy link

Dando uma olhada rapida, e em toda a minha leiguice, eu consegui copiar o certificado direto do TWRP Recovery mode, sem precisar fazer root ou instalar nem o Magisk, meus passos foram:

1 - depois de instalado o app e feita as devidas autenticações por foto
2 - desbloquear o bootloader do aparelho
3 - instalar o TWRP e iniciar por ele (obs: o aparelho tem que estar sem senha para que seja possivel navegar pelas pastas normalmente sem estarem criptografadas pelo sistema)
4 - abrir o file explorer do TWRP e encontrar o certificado na pasta "/data/data/com.nu.production/<account_id>/KeyStore.default.p12"
5 - copiar para o sdcard (/sdcard) clicando no arquivo
6 - reescrever o seu aplicativo python com o codigo mostrado anteriormente, usando a senha "nubank"

pronto, voce ja pode fazer as requisições que envolve pix normalmente, ainda nao testei todas, mas pelo menos as relaccionadas a pix e nuconta da pagina "readme.md" deram certo pra mim

usei um Redmi Note 8

Codigo final:

from pynubank import Nubank, HttpClient
import json 

class HttpClientWithPassword(HttpClient):
    @property
    def _cert_args(self):
        return {'pkcs12_data': self._cert, 'pkcs12_password': 'nubank'} if self._cert else {}  # <-- nubank é a senha padrão do certificado que fica no aparelho
    
nu = Nubank(HttpClientWithPassword())
nu.authenticate_with_cert('<USER>', '<PASSWORD>', './KeyStore.default.p12')

@SamukaDEV
Copy link

@cleversonlpf , ao que eu entendi esse certificado que voce gera com a propria biblioteca é limitado, nao dando acesso à toda a API do Nubank, é preciso um certificado gerado pela aplicação deles, o motivo de ir atraz do que esta no telefone, que é a unica via de geração do mesmo!

posso estar enganado, mas foi isso que entendi ate esse ponto

@davibobsin
Copy link

Fala galera, consegui puxar o certificado como instruído e, usando o código do @SamukaDEV, ainda não consigo autenticar.

Erro do certificado:

SSLError: HTTPSConnectionPool(host='prod-global-auth.nubank.com.br', port=443): Max retries exceeded with url: /api/token (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', '', 'certificate verify failed')])")))

@andreroggeri um step que comentaste foi, após fazer o root, não abrir mais o aplicativo. Porém tive que abrir pra falar com o suporte e validar minha identidade novamente, então não teve jeito. Pode ser isso? No que esse passo de não abrir o app implica?

Um segundo ponto: agora de manhã estou levando uns erros 403 ao tentar rodar a inicialização do client (nu = Nubank(HttpClientWithPassword()), sem rodar a autenticação ainda)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests