jansenfelipe / cpf-gratis

Com esse pacote você poderá realizar consultas de CPF no site da Receita Federal do Brasil gratuitamente.
https://jansenfelipe.github.io/phpgratis/
178 stars 73 forks source link

Captcha CPF/CNPJ deprecativo. #21

Open lucianozanita opened 6 years ago

lucianozanita commented 6 years ago

Olá, hoje 23/10/2017 a Receita federal passou a não utilizar mais o captcha padrão e começou a usar o recaptcha, o que inviabilizou o captcha usado anteriormente, saberia alguma forma de resolver este problema?

kivervinicius commented 6 years ago

@fazti ta funcionando mesmo, mas está oscilando.

kivervinicius commented 6 years ago

@100n0m3 poxa, q merda em. kkk vlw! Você sabe qual é a url para o cpf?

100n0m3 commented 6 years ago

Vou pegar o user agent hora que chegar em casa, quanto a url de cpf ainda estou debugando o app deles, mas vai ficar massa pois não tem captcha na consulta de cpf, ou seja da pra ficar automático tipo um viacep

kivervinicius commented 6 years ago

@100n0m3 seria legal, estou usando o deathbycaptcha para quebrar o link sonoro, mas está caindo mto, e está dando ban muito rápido mesmo trocando o user-agent, estou querendo usar uma vpn para não banir o ip do server.

kivervinicius commented 6 years ago

@100n0m3 aparentemente a url é https://movel01.receita.fazenda.gov.br/servicos-rfb/v2/IRPF/cpf/consultar mas ainda não consegui fazer funcionar.

100n0m3 commented 6 years ago

Sim a url esta correta o problema são os parâmetros, temos vários parâmetros e tem um hash q penso eu que seja a parte mais complicada para debugar pois o app gera um hash penso eu que seja do cpf talvez data e hora, que é enviado junto com o header do post, no arquivo SutacaoCadastral referencia o arquivo headers que por sua vez chama o arquivo hash mas esta em java e eu não manjo de java :/

100n0m3 commented 6 years ago

e a nomenclatura das variáveis deles esta me deixando doido

kivervinicius commented 6 years ago

@100n0m3 eu programo em Java, gera um gist por favor que eu dou uma olhada

100n0m3 commented 6 years ago

https://gist.github.com/100n0m3/8b036cdee0dc43cfa71314893db74ce5 https://gist.github.com/100n0m3/b4dde25fcc1e160cf7f5a2d64be4a3b5 https://gist.github.com/100n0m3/50bfcd2bd1864c23435eda252759506e

caso precise de mais algum arquivo me avise.

kivervinicius commented 6 years ago

Não estou conseguindo converter os .smali para um formato mais legível, assim que tiver uma posição retorno aqui.

marciofornari commented 6 years ago

Olá pessoal tudo bem? Então me deparei que estou precisando assim como vocês buscar as informações do CNPJ E CPF, estou usando o framework Laravel, e pelo que andei lendo aqui nos comentários está dificil de fazer essa integração pois a Receita não está disponibilizando isso certo? Vou ficar acompanhando aqui para ver se acham alguma outra solução. Obrigado

garimpeirodouniverso commented 6 years ago

Não sei se já tentaram, mas o endereço do Cnpjreva_Solicitacao3.asp está de pé ainda (se não me engano o código original usa o Cnpjreva_Solicitacao2.asp). Não sei até quando isso dura, mas pode servir de solução de contorno por enquanto...

PS: desculpe se já postaram isso, me perdi um pouco na discussão :P

lucas0maia commented 6 years ago

@kivervinicius ou @100n0m3 conseguiram alguma solução pro caso do CPF? É possível gerar o token?

brunochuck commented 5 years ago

Alguém por ae ainda eu tenho uns aquivos para debugar e preciso de ajuda.

para consultar cpf

100n0m3 commented 5 years ago

tenho uma api se quiser... me chama ae

brunochuck commented 5 years ago

tenho uma api se quiser... me chama ae

chamar no e-mail ?

100n0m3 commented 5 years ago

kkkk boa, desatento meu, acostumado com o Whats...

Mas vamos la, tenho sim uma api de consulta inclusive te trago o comprovante.

bydylo commented 4 years ago

kkkk boa, desatento meu, acostumado com o Whats...

Mas vamos la, tenho sim uma api de consulta inclusive te trago o comprovante.

kkkk boa, desatento meu, acostumado com o Whats...

Mas vamos la, tenho sim uma api de consulta inclusive te trago o comprovante.

quanto ????

100n0m3 commented 4 years ago

@bydylo ainda funciona acabei de testar, kkk, te mandei um email!.

lucas0maia commented 4 years ago

Manda um email pra mim (ctd.lucasmaia no gmail)

Busquei isso como um maluco e ainda me interessa.

Em qui., 25 de jun. de 2020 às 14:55, Gustavo Vedoveli < notifications@github.com> escreveu:

@bydylo https://github.com/bydylo ainda funciona acabei de testar, kkk, te mandei um email!.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/jansenfelipe/cpf-gratis/issues/21#issuecomment-649730604, or unsubscribe https://github.com/notifications/unsubscribe-auth/AIMGZX45NWSSJCAKHNNQRNDRYOFPHANCNFSM4EALFINA .

-- Lucas C. Maia

100n0m3 commented 4 years ago

@lucas0maia te mandei um email :) ve ae se chegou

lucas0maia commented 4 years ago

Nada... manda pra lucasmaia EM agenciatatu.com.br

Em sex., 26 de jun. de 2020 às 08:11, Gustavo Vedoveli < notifications@github.com> escreveu:

@lucas0maia https://github.com/lucas0maia te mandei um email :) ve ae se chegou

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/jansenfelipe/cpf-gratis/issues/21#issuecomment-650123794, or unsubscribe https://github.com/notifications/unsubscribe-auth/AIMGZXYP2T5TFQWOXCCOYEDRYR66BANCNFSM4EALFINA .

-- Lucas C. Maia

100n0m3 commented 4 years ago

kkk, acho q nao deu fica ai meu contato chama no zap 44-991559009 quem tiver interesse na consulta chama ae :)

EduApps-CDG commented 1 year ago

Boa noite, meus comparsas. Vim aqui compartilhar meu progresso na descoberta de uma API direta para consultas de CNPJ (demanda do trabalho).

Aliás, se puder me seguir no GitHub eu ficaria feliz. Estou tentando chegar ao 100.

Acabei percebendo não um mais dois links para consultar:

Link 1:

Utilizando descompilação, encontrei um link compatível com a antiga resposta.

Passo 1: Captcha

Request:

GET /servicos-rfb-apprfb-core/apprfb-core/obtercaptcha HTTP/1.1
Host: p-app-receita-federal.estaleiro.serpro.gov.br:443

PHP:

public static function getCaptchaFromMiniFazenda()
    {
        /**
         * Metodo GET
         * URL: captcha
         * 
         * retorno:
         * {
         *  "captcha": "...", //base64
         *  "audio": null, // Provavelmente não funciona
         *  "token": "...", //token do captcha
         *  "letras": "..." //letras selecionáveis do app
         * }
         */
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "https://p-app-receita-federal.estaleiro.serpro.gov.br:443/servicos-rfb-apprfb-core/apprfb-core/obtercaptcha");
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

        $json = curl_exec($ch);
        curl_close($ch);

        return json_decode($json, true);
    }

Passo 2: Obter resultados

Request:

POST /servicos-rfb-apprfb-core/apprfb-core/obtercaptcha HTTP/1.1
Host: p-app-receita-federal.estaleiro.serpro.gov.br:443
token: Hash::generateHash("Sup3RbP4ssCr1t0grPhABr4sil", ???)
aplicativo: Pessoa Jurídica
versao: 6.0.1
dispositivo: Moto G Play
versao_app: 3.2
Content-Type: application/x-www-form-urlencoded

cnpj=XXXXXXXXX&token=[token]&resposta=[XXXX]

PHP:

//Pre requisito
<?php
//Pré-requisito
class Hash {
    //private static $ALGORITIMO_HASH = "HmacSHA1";
    private static $ALGORITIMO_HASH = "sha1"; //HmacSHA1

    function __constructor() {
    }

    // Esta função é a reescrita de Hash.generateHash do app (em Java)
    // Ela é passada como parâmetro para o header "token", porém requer
    // um parâmetro extra desconhecido...
    public static function generateHash(string $key, string $text) {
        try {
            $mac = hash_hmac('sha1', $text, $key, true);
            return bin2hex($mac);
        } catch (\Exception $e) {
            return null;
        }
    }

    public static function validateHash(string $key, string $text, string $hash) {
        $hash2 = self::generateHash($key, $text);
        return $hash2 === $hash;
    }
}

// retorna os dados do CNPJ
function fromMiniFazenda(string $token, string $capicci, string $cnpj)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, self::$API_MINISTERIO_FAZENDA['consulta']);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            'token' => Hash::generateHash("Sup3RbP4ssCr1t0grPhABr4sil", ???), //??? deve ser algo que resulta em ""44d4ba14482a7be2a495e73" (a primeira resposta deste post)
            'aplicativo' => 'Pessoa Jurídica',
            'plataforma' => 'Android',
            'versao' => '6.0.1',
            'dispositivo' => 'Moto G Play',
            'versao_app' => '3.2',
            'Content-Type' => 'application/x-www-form-urlencoded'
        ]);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
            'cnpj' => $cnpj,
            'token' => $token,
            'resposta' => $capicci
        ]));

        $json = curl_exec($ch);
        curl_close($ch);

        echo $json;

        $instance = new CNPJ($cnpj, json_decode($json, true));

        return $instance;
    }

Link 2 (Captura de requests)

Abri um app para capturar as requests do app. Consegui capturar uma vez, mas por algum motivo nas outras tentativas não foi registrado o request.

Passo 1: Captcha

Request:

GET /servicos-rfb-apprfb-core/apprfb-core/obtercaptcha HTTP/1.1
Host: p-app-receita-federal.estaleiro.serpro.gov.br:443

PHP:

public static function getCaptchaFromMiniFazenda()
    {
        /**
         * Metodo GET
         * URL: captcha
         * 
         * retorno:
         * {
         *  "captcha": "...", //base64
         *  "audio": null, // Provavelmente não funciona
         *  "token": "...", //token do captcha
         *  "letras": "..." //letras selecionáveis do app
         * }
         */
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "https://p-app-receita-federal.estaleiro.serpro.gov.br:443/servicos-rfb-apprfb-core/apprfb-core/obtercaptcha");
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

        $json = curl_exec($ch);
        curl_close($ch);

        return json_decode($json, true);
    }

Passo 2: obter os dados

Este eu provavelmente não vou conseguir reproduzir, pois existe uma verificação se a url está sendo requisitada pelo app.

Link: https://p-app-receita-federal.estaleiro.serpro.gov.br:443/servicos-rfb-apprfb-cnpj/apprfb-cnpj/detalhe-empresa/[CNPJ SEM NUMERO]

Eis a print do request: Imagem do WhatsApp de 2023-02-28 à(s) 16 19 08


O mais triste de isso tudo é o fato de SUPER PASS ser o código secreto por trás do dos Tokens.

Espero que isso ajude alguém a terminar o trabalho.