Skip to content
This repository has been archived by the owner on Dec 21, 2019. It is now read-only.

API Retorna - Versão desatualizada. Favor atualizar aplicativo. #37

Open
rmp1985 opened this issue Jul 2, 2019 · 167 comments
Open

API Retorna - Versão desatualizada. Favor atualizar aplicativo. #37

rmp1985 opened this issue Jul 2, 2019 · 167 comments

Comments

@rmp1985
Copy link

rmp1985 commented Jul 2, 2019

Bom dia,

Funcionou bem até aqui. A partir de hoje 02/07/2019 começou a retornar. "Versão desatualizada. Favor atualizar aplicativo."

O que será que mudou...?

@elciocf
Copy link

elciocf commented Jul 2, 2019

Devem ter mudado o secret novamente ='(

@ritielmi
Copy link

ritielmi commented Jul 2, 2019

Sim. Funcionou muito bem até ontem. Hoje pela manhã parou. Vi que mudaram a url (https://cidadao.sinesp.gov.br/sinesp-cidadao/mobile/consultar-placa/v4). Fiz um teste com a url (https://cidadao.sinesp.gov.br/sinesp-cidadao/mobile/consultar-placa/v5) e retornou
"mensagemRetorno":"Erro no processamento da consulta."( @elciocf Devem ter mudado o secret novamente)

@elciocf
Copy link

elciocf commented Jul 2, 2019

É triste ver um serviço tão útil ser "protegido" dessa forma ... tentei localizar o secret, mas sem sucesso... gerou mtos arquivos com dex2jar... e sem o "caminho das pedras" e alguma familiaridade anterior com o código dos cara ... fica difícil achar mesmo... vamos ter de aguardar um salvador rsrsrs

@Pedroasilva
Copy link

Deem uma olhada nesse discord. Lá o pessoal tá conversando sobre a correção. Pode ser que saia lá antes.
https://discordapp.com/channels/403565711898968065/403565711898968067

@Sorackb
Copy link

Sorackb commented Jul 2, 2019

@Pedroasilva não dá pra acessar essa sala do discord pelo link que você informou.

@arivanbastos
Copy link

@Pedroasilva também não consegui acessar o discord.

@ritielmi
Copy link

ritielmi commented Jul 2, 2019

também não consegui acessar o discord.

@giovanigenerali
Copy link

giovanigenerali commented Jul 2, 2019 via email

@Pedroasilva
Copy link

@eversonjoay
Copy link

o que descobri até o momento:
url mudou para /sinesp-cidadao/mobile/consultar-placa/v5.
libs para o android mudaram de nome e secret gerando a chave do envelope diferente.
foi adicionado no cabeçalho da requisição uma chave de autenticação "Authorization: Token ffwFPHnPFz8:APA91bGsyyaPKKq7gbrKfynrj5CBG8hV3X46KiQ1cGaZpJV8xAG2_Xu7TIXOc-WKmYbXPOvGsjQom1IVnftnm11VnKOq-uL9CASHRRTjzdDCVrfzaMa6GbiaCpoPwCXD9Bba22dJi-qv"
foi adicionado uma chave no envelope da requisição, nesta chave está indo um código que também vai no authorization do cabeçalho, no meu caso ffwFPHnPFz8 e no cabeçalho "Authorization: Token ffwFPHnPFz8:APA..........".
alguém tem alguma ideia do que seria essa chave e de onde está saindo este cabeçalho de autenticação?

@Pedroasilva
Copy link

Discord voltou, acompanhem

@elciocf
Copy link

elciocf commented Jul 2, 2019

Um resumo da situação atual...
A SERPRO atualizou o aplicativo e agora a requisição precisa uma nova chave "Firebase Id"
Isso dificulta, se não impossibilita, o acesso de terceiros que não o próprio aplicativo do SINESP... infelizmente...

@lucazin
Copy link

lucazin commented Jul 2, 2019 via email

@lucasschlottfeldt
Copy link

Já era oficial?

@carloscte
Copy link

carloscte commented Jul 3, 2019

Alguém conseguiu? Obteve alguma novidade?

Pelo que eu pude ver, eles de fato estão utilizando o FirebaseInstanceId para obter o ID e o TOKEN, gerando assim o cabeçalho da requisição:

Authorization: Token TOKEN

Além da, como já foi citado, alteração da URL para https://cidadao.sinesp.gov.br/sinesp-cidadao/mobile/consultar-placa/v5 e alteração das libs para o android citadas por @eversonjjo

Vi também que isso não é algo ligado diretamente com a chave de assinatura, ou seja, se você descompilar e compilar novamente o Apk do SINESP e utilizar uma chave qualquer para assinar o pacote, o aplicativo vai continuar funcionando.

@lucazin
Copy link

lucazin commented Jul 3, 2019 via email

@carloshsjp
Copy link

Estou buscando informações, mas ainda não obtive nada concreto. Alguém tem alguma informação nova?

@jhonata-menezes
Copy link

O que obtive até o momento

Segue exemplo de requisição

curl -X POST \
  https://cidadao.sinesp.gov.br/sinesp-cidadao/mobile/consultar-placa/v5 \
  -H 'Authorization: Token c9pw3ekWMRg:APA91bGAwox1JBa0xtC0a8JnrdZwFLBpLX7O9pB2LA9jsnENtYoHnlM4_wL8BXysYp6dHydk02vmyWrAXJo6KtfsPIZojZYxOfIXvP2yubbWc1LpJ-kKKixYZSoIuHU7JGpIP1213X92' \
  -H 'Content-Type: application/xml' \
  -H 'Postman-Token: 376347da-2aa7-43fe-b1bd-a47f1f59e291' \
  -H 'User-Agent: SinespCidadao / 3.0.2.1 CFNetwork / 758.2.8 Darwin / 15.0.0' \
  -H 'cache-control: no-cache' \
  -d '<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<v:Envelope xmlns:v="http:https://schemas.xmlsoap.org/soap/envelope/">
    <v:Header>
        <b>motorola XT1097</b>
        <c>ANDROID</c>
        <d>6.0</d>
        <e>4.7.4</e>
        <f>192.168.0.23</f>
        <g>0cdb52abd9dfebf425fd0bc356bd4e36fcfe8722</g>
        <h>0.0</h>
        <i>0.0</i>
        <k />
        <l>2019-07-03 14:39:45</l>
        <m>8797e74f0d6eb7b1ff3dc114d4aa12d3</m>
        <n>c9pw3ekWMRg</n>
    </v:Header>
    <v:Body>
        <n0:getStatus xmlns:n0="http:https://soap.ws.placa.service.sinesp.serpro.gov.br/">
            <a>GGG6699</a>
        </n0:getStatus>
    </v:Body>
</v:Envelope>'

@carloscte
Copy link

carloscte commented Jul 3, 2019

De forma resumida, para que a consulta volte a funcionar é necessário que o FirebaseInstanceId de qualquer Cliente (seja ele um aplicativo ou não) gere um ID e TOKEN com a mesma chave que o aplicativo do Sinesp gera. Isso é possível? Alguém sabe qual chave o FirebaseInstanceId usa ao ser inicializado em um aplicativo?

Obtendo esse ID e TOKEN, bastar montar a requisição que irá funcionar.

Acredito que não seja algo fácil e talvez seja impossível

@carloshsjp
Copy link

carloshsjp commented Jul 3, 2019

Boa tarde,

Fiz alguns testes aqui e pude perceber que a forma como o token é gerado foi alterado.
Se eu passar a placa GGG6699, conforme o exemplo acima, com o token 8797e74f0d6eb7b1ff3dc114d4aa12d3, fixo no código, ele funciona.

return sprintf($xml,'0cdb52abd9dfebf425fd0bc356bd4e36fcfe8722',$this->latitude(),$this- >longitude(),strftime('%Y-%m-%d %H:%M:%S'),$this->placa);

Porém se eu passar o token gerado pela classe ($this->token()) ele dá erro

return sprintf($xml $this->token(),$this->latitude(),$this->longitude(),strftime('%Y-%m-%d
%H:%M:%S'),$this->placa);

PLACA : GGG6699
NÃO FUNCIONA
private function xml()
{ $xml = <<<EOX <v:Envelope xmlns:v="http:https://schemas.xmlsoap.org/soap/envelope/">`
<v:Header>
<b>motorola XT1097</b>
<c>ANDROID</c>
<d>6.0</d>
<e>4.7.4</e>
<f>192.168.0.23</f>
<g>%s</g>
<h>%s</h>
<i>%s</i>
<k />
<l>%s</l>
<m>8797e74f0d6eb7b1ff3dc114d4aa12d3</m>
<n>c9pw3ekWMRg</n>
</v:Header>
<v:Body>
<n0:getStatus xmlns:n0="http:https://soap.ws.placa.service.sinesp.serpro.gov.br/">
<a>%s</a>
</n0:getStatus>
</v:Body>
</v:Envelope>
EOX;
return sprintf($xml,$this->token(),$this->latitude(),$this-``>longitude(),strftime('%Y-%m-%d %H:%M:%S'),$this->placa);

}

PLACA : GGG6699
FUNCIONA
private function xml()
{ $xml = <<<EOX <v:Envelope xmlns:v="http:https://schemas.xmlsoap.org/soap/envelope/">`
<v:Header>
<b>motorola XT1097</b>
<c>ANDROID</c>
<d>6.0</d>
<e>4.7.4</e>
<f>192.168.0.23</f>
<g>%s</g>
<h>%s</h>
<i>%s</i>
<k />
<l>%s</l>
<m>8797e74f0d6eb7b1ff3dc114d4aa12d3</m>
<n>c9pw3ekWMRg</n>
</v:Header>
<v:Body>
<n0:getStatus xmlns:n0="http:https://soap.ws.placa.service.sinesp.serpro.gov.br/">
<a>%s</a>
</n0:getStatus>
</v:Body>
</v:Envelope>
EOX;
return sprintf($xml,'0cdb52abd9dfebf425fd0bc356bd4e36fcfe8722',$this->latitude(),$this-``>longitude(),strftime('%Y-%m-%d %H:%M:%S'),$this->placa);

}

Na classe ele gera o token dessa forma:

private function token()
{
return hash_hmac('sha1', $this->placa, $this->placa . $this->secret);
}

Creio que o secret abaixo tenha sido alterado.

private $secret = '#8.1.0#g8LzUadkEHs7mbRqbX5l';

@jhonata-menezes, como esse token 0cdb52abd9dfebf425fd0bc356bd4e36fcfe8722 foi gerado na tua requisição ?

@jhonata-menezes
Copy link

Boa tarde,

Fiz alguns testes aqui e pude perceber que a forma como o token é gerado foi alterado.
Se eu passar a placa GGG6699, conforme o exemplo acima, com o token 8797e74f0d6eb7b1ff3dc114d4aa12d3, fixo no código, ele funciona.

return sprintf($xml,'0cdb52abd9dfebf425fd0bc356bd4e36fcfe8722',$this->latitude(),$this- >longitude(),strftime('%Y-%m-%d %H:%M:%S'),$this->placa);

Porém se eu passar o token gerado pela classe ($this->token()) ele dá erro

return sprintf($xml $this->token(),$this->latitude(),$this->longitude(),strftime('%Y-%m-%d
%H:%M:%S'),$this->placa);

PLACA : GGG6699
NÃO FUNCIONA
private function xml()
{ $xml = <<<EOX``<v:Envelope xmlns:v="[http:https://schemas.xmlsoap.org/soap/envelope/">](http:https://schemas.xmlsoap.org/soap/envelope/%22%3E%60) <v:Header> motorola XT1097 ANDROID 6.0 4.7.4 192.168.0.23 %s %s %s %s 8797e74f0d6eb7b1ff3dc114d4aa12d3 c9pw3ekWMRg </v:Header> <v:Body> <n0:getStatus xmlns:n0="http:https://soap.ws.placa.service.sinesp.serpro.gov.br/"> %s </n0:getStatus> </v:Body> </v:Envelope> EOX;`
return sprintf($xml,$this->token(),$this->latitude(),$this->longitude(),strftime('%Y-%m-%d %H:%M:%S'),$this->placa); ``

}

PLACA : GGG6699
FUNCIONA
private function xml()
{ $xml = <<<EOX``<v:Envelope xmlns:v="[http:https://schemas.xmlsoap.org/soap/envelope/">](http:https://schemas.xmlsoap.org/soap/envelope/%22%3E%60) <v:Header> motorola XT1097 ANDROID 6.0 4.7.4 192.168.0.23 %s %s %s %s 8797e74f0d6eb7b1ff3dc114d4aa12d3 c9pw3ekWMRg </v:Header> <v:Body> <n0:getStatus xmlns:n0="http:https://soap.ws.placa.service.sinesp.serpro.gov.br/"> %s </n0:getStatus> </v:Body> </v:Envelope> EOX;`
return sprintf($xml,'0cdb52abd9dfebf425fd0bc356bd4e36fcfe8722',$this->latitude(),$this->longitude(),strftime('%Y-%m-%d %H:%M:%S'),$this->placa); ``

}

Na classe ele gera o token dessa forma:

private function token()
{
return hash_hmac('sha1', $this->placa, $this->placa . $this->secret);
}

Creio que o secret abaixo tenha sido alterado.

private $secret = '#8.1.0#g8LzUadkEHs7mbRqbX5l';

@jhonata-menezes, como esse token 0cdb52abd9dfebf425fd0bc356bd4e36fcfe8722 foi gerado na tua requisição ?

Não gerei pela aplicação, apenas coloquei um proxy para monitorar as requisições do App da Sinesp

@jhonata-menezes
Copy link

Está difícil entender o processo, descompilei e criei um repositório, caso alguém tenha conseguido descompilar em um formato melhor por favor avise

Esse arquivo e linha pega o Token: https://github.com/jhonata-menezes/sinesp-app/blob/master/java/br/sources%5Cbr%5Cgov%5Csinesp%5Ccidadao%5Candroid%5Cg%5Ce.java#L107

Informações da conexão com o Firebase, retirado deste arquivo: https://github.com/jhonata-menezes/sinesp-app/blob/master/lib/res%5Cvalues%5Cstrings.xml#L55-L60

firebase_database_url: https://sinesp-178916.firebaseio.com
gcm_defaultSenderId: 905942954488
google_api_key: AIzaSyAnV6TNrPwDB2gW-q0sMbSrkIFRsknK-QA
google_app_id: 1:905942954488:android:d9d949bd7721de40
google_storage_bucket: sinesp-178916.appspot.com

@lucazin
Copy link

lucazin commented Jul 3, 2019 via email

@jhonata-menezes
Copy link

Os cara pode até tentar dificultar..mas sempre tem um jeito. Mas agora deixar as Keys e Urls desse tipo exposto é coisa de principiante. Em qua, 3 de jul de 2019 às 18:09, Jhonata Menezes [email protected] escreveu:

Está difícil entender o processo, descompilei e criei um repositório, caso alguém tenha conseguido descompilar em um formato melhor por favor avise Esse arquivo e linha pega o Token: https://github.com/jhonata-menezes/sinesp-app/blob/master/java/br/sources%5Cbr%5Cgov%5Csinesp%5Ccidadao%5Candroid%5Cg%5Ce.java#L107 Informações da conexão com o Firebase, retirado deste arquivo: https://github.com/jhonata-menezes/sinesp-app/blob/master/lib/res%5Cvalues%5Cstrings.xml#L55-L60 firebase_database_url: https://sinesp-178916.firebaseio.com gcm_defaultSenderId: 905942954488 google_api_key: AIzaSyAnV6TNrPwDB2gW-q0sMbSrkIFRsknK-QA google_app_id: 1:905942954488:android:d9d949bd7721de40 google_storage_bucket: sinesp-178916.appspot.com — You are receiving this because you commented. Reply to this email directly, view it on GitHub <#37?email_source=notifications&email_token=AGXVDFTLMW5XGZSO2YMOM2TP5UISPA5CNFSM4H43DPO2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODZFV6HQ#issuecomment-508256030>, or mute the thread https://github.com/notifications/unsubscribe-auth/AGXVDFVI5ABUJHJQTUXVOQLP5UISPANCNFSM4H43DPOQ .

São chaves públicas do Firebase, não tem nada fora do normal.

@jhonata-menezes
Copy link

jhonata-menezes commented Jul 4, 2019

Tem uma solução para obter o token do Firebase, utilize essa biblioteca: https://github.com/MatthieuLemoine/push-receiver

E este SenderID: 905942954488

Acho que falta apenas uma etapa, como ele esta gerando o hash dentro do Header, ex.:

<g>0cdb52abd9dfebf425fd0bc356bd4e36fcfe8722</g>

@eversonjoay
Copy link

@jhonata-menezes esse push-receiver pra gerer o token, gera o FirebaseInstalId:FirebaseToken que está indo no cabeçalho da requisição?
esta tag que você colocou é gerada pela biblioteca libsuperplacas.so, que alterou a chave secret que era usada, a $secret = '#8.1.0#g8LzUadkEHs7mbRqbX5l', ainda não procurei qual a nova

@jhonata-menezes
Copy link

@jhonata-menezes esse push-receiver pra gerer o token, gera o FirebaseInstalId:FirebaseToken que está indo no cabeçalho da requisição?
esta tag que você colocou é gerada pela biblioteca libsuperplacas.so, que alterou a chave secret que era usada, a $secret = '#8.1.0#g8LzUadkEHs7mbRqbX5l', ainda não procurei qual a nova

SIm, o token que a lib gera é no mesmo formato do app.

O novo secret tenho quase certeza que utiliza este token, mas ainda sem resultados concretos. Seria uma combinação de: token + versão do so (6.0 ou 8.1.0, etc)

@carloscte
Copy link

@maycon1038 Um que eu tinha capturado foi esse...

{"security_token":7404078251180317158,"version_info":"M8Ei1OMCpbkQENW7sZq6nvmyyos3vRY","android_id":4101583339927723652}

não sei se ainda é válido... capturei ontem

@maycon1038
Copy link

Tenho quase certeza que foi uma mudança no servidor deles, eles estão verificando algum campo com o token que é enviado. Para simular criei um projeto no firebase e usei o senderId, com o token gerado eu consigo validar através de uma solicitação que é documentada aqui: https://developers.google.com/instance-id/reference/server#get_information_about_app_instances

No formato que estamos enviando o retorno é desta forma

{
    "attestStatus": "UNKNOWN",
    "application": "br.com.casadosdados",
    "scope": "*",
    "authorizedEntity": "336327398858",
    "appSigner": "daf1d792d60867c52e39c238d9f178c42f35dd98",
    "platform": "BROWSER"
}

A partir do token gerado pelo app Sinesp

{
    "applicationVersion": "49",
    "connectDate": "2019-07-17",
    "attestStatus": "ROOTED",
    "application": "br.gov.sinesp.cidadao.android",
    "scope": "*",
    "authorizedEntity": "336327398858",
    "connectionType": "MOBILE",
    "appSigner": "c00a5613470db6784a32a965e859aa6d61ad8a14",
    "platform": "ANDROID"
}

Consegui chegar próximo ao que foi gerado pelo app, está retornando da seguinte forma

{
    "connectDate": "2019-07-17",
    "attestStatus": "UNKNOWN",
    "application": "br.com.casadosdados",
    "scope": "*",
    "authorizedEntity": "336327398858",
    "connectionType": "WIFI",
    "appSigner": "daf1d792d60867c52e39c238d9f178c42f35dd98",
    "platform": "ANDROID"
}

Utilizei o deviceId e o secretToken gerados por este projeto: https://github.com/nviennot/android-checkin

Essa é uma hipotese, ja que o app não teve nenhuma atualização e a requisição continua a mesma.
@jhonata-menezes usar esse json
{
"userSerialNumber": 1,
"type": "MOBILE",
"checkin":
{
"androidVersion": "49",
"connectDate": "2019-07-16 22:56:34",
"attestStatus": "ROOTED",
"application": "br.gov.sinesp.cidadao.android",
"platform": "ANDROID"
},
"version": 49

}

assim vc vai conseguir passar o pacote do aplicativo

@jhonata-menezes
Copy link

Consegui, segue as alterações necessárias

  • Adicionar app_ver=49 e X-app_ver=49 no corpo da solicitação e o header app: br.gov.sinesp.cidadao.android para esta url - https://android.clients.google.com/c2dm/register3

  • Alterar o type de 3 para 1 ao gerar o deviceId e securityToken e pode remover o chromeBuild, apenas olhar o checkin.proto que tem os types

Commit com as alterações: casadosdados/push-receiver@99844c3

@eyamashita
Copy link

eyamashita commented Jul 18, 2019

@jhonata-menezes deu certo aqui cara, parabéns.

@WillianSUD
Copy link

@eyamashita, onde é feita essa alteração? olhei nos arquivos do projeto e não encontro onde fazer as mudanças.
obs. conheço pessoas com sobrenome Yamashita aqui no ES, caso tenha algum interesse avisa.

@gamadoleo
Copy link

gamadoleo commented Jul 19, 2019

é um pacote que é adicionado quando executa o "npm i"
eu particularmente não sabia qual era o comando para forçar o update dos pacotes preferir baixar novamente com "git" e reexecutar o "npm i";

@eyamashita
Copy link

@WillianSUD eu desenvolvi em outra linguagem seguindo apenas as alterações nas requisições conforme elas iam sendo descobertas e postadas aqui.

O script de checkin utilizei o exemplo postado pelo @maycon1038, e as demais requisições passando os parametros adicionais que o @jhonata-menezes foi descobrindo.

Por isso não consigo te informar onde fazer essas mudanças.

PS. Yamashita é quase igual Silva....kkkkk abraços

@eyamashita
Copy link

@WillianSUD esse projeto do chapeu preto está desatualizado, antes da requisição pro SINESP são necessários duas outras requisições, que inclusive podem ser feitas no curl sem problema algum. Uma delas é a do checkin que vai gerar informações para serem utilizadas na segunda requisição (register) que é a que gera o token.

Basicamente o fluxo fica: checkin -> register -> sinesp

Sendo que a primeira e segunda requisições não são necessárias fazer todas as vezes, apenas quando elas se tornam inválidas.

Se você pegar o exemplo do @maycon1038 e fazer o checkin com as modificações que o @jhonata-menezes informou, você terá dados válidos para fazer a segunda requisição que é o register, que é onde terá também alterações informadas pelo @jhonata-menezes

@carloscte
Copy link

Consegui, segue as alterações necessárias

  • Adicionar app_ver=49 e X-app_ver=49 no corpo da solicitação e o header app: br.gov.sinesp.cidadao.android para esta url - https://android.clients.google.com/c2dm/register3
  • Alterar o type de 3 para 1 ao gerar o deviceId e securityToken e pode remover o chromeBuild, apenas olhar o checkin.proto que tem os types

Commit com as alterações: casadosdados/push-receiver@99844c3

@jhonata-menezes Parabéns!! Funcionou aqui também!

Só por curiosidade, como você conseguiu chegar a essas conclusões com relação ao Checkin?

abraço!

@gamadoleo
Copy link

gamadoleo commented Jul 21, 2019

ok, está funcionando, também seguir as orientações e conseguir reproduzir as etapas de chekin, register e sinesp em outra linguagem..
agora uma dúvida, é impressão minha ou o limite de consultas foi reduzido, pois antes desse bloqueio conseguia-se consulta muito mais placas sem ser bloqueado, hoje inclusive o
https://sinesp.casadosdados.com.br/sinesp/placa/ggg6669 está exibindo a mensagem de limite atingido:
mensagemRetorno: "Limite de consultas excedido. Tente novamente mais tarde."
ou seja, dessa vez o uso de proxy randomico será a unica solução?

na verdade pelo que vi aqui o limite é renovado a cada 10min então basta usar com "moderação" ou se quiser um numero alto de consulta recorrer a proxy.

@bgastaldi
Copy link

ok, está funcionando, também seguir as orientações e conseguir reproduzir as etapas de chekin, register e sinesp em outra linguagem..
agora uma dúvida, é impressão minha ou o limite de consultas foi reduzido, pois antes desse bloqueio conseguia-se consulta muito mais placas sem ser bloqueado, hoje inclusive o
https://sinesp.casadosdados.com.br/sinesp/placa/ggg6669 está exibindo a mensagem de limite atingido:
mensagemRetorno: "Limite de consultas excedido. Tente novamente mais tarde."
ou seja, dessa vez o uso de proxy randomico será a unica solução?

na verdade pelo que vi aqui o limite é renovado a cada 10min então basta usar com "moderação" ou se quiser um numero alto de consulta recorrer a proxy.

Como você conseguiu reproduzir o checkin? Poderia compartilhar?

@gamadoleo
Copy link

olá @bgastaldi seguindo a orientação de @maycon1038

@jhonata-menezes
Copy link

Consegui, segue as alterações necessárias

  • Adicionar app_ver=49 e X-app_ver=49 no corpo da solicitação e o header app: br.gov.sinesp.cidadao.android para esta url - https://android.clients.google.com/c2dm/register3
  • Alterar o type de 3 para 1 ao gerar o deviceId e securityToken e pode remover o chromeBuild, apenas olhar o checkin.proto que tem os types

Commit com as alterações: casadosdados/push-receiver@99844c3

@jhonata-menezes Parabéns!! Funcionou aqui também!

Só por curiosidade, como você conseguiu chegar a essas conclusões com relação ao Checkin?

abraço!

Comparando a requisição feita pelo app e a que nos fazemos. No checkin a partir de um projeto que criei no firebase e identificar o formato que a sinesp valida no servidor deles.

ok, está funcionando, também seguir as orientações e conseguir reproduzir as etapas de chekin, register e sinesp em outra linguagem..
agora uma dúvida, é impressão minha ou o limite de consultas foi reduzido, pois antes desse bloqueio conseguia-se consulta muito mais placas sem ser bloqueado, hoje inclusive o
https://sinesp.casadosdados.com.br/sinesp/placa/ggg6669 está exibindo a mensagem de limite atingido:
mensagemRetorno: "Limite de consultas excedido. Tente novamente mais tarde."
ou seja, dessa vez o uso de proxy randomico será a unica solução?

na verdade pelo que vi aqui o limite é renovado a cada 10min então basta usar com "moderação" ou se quiser um numero alto de consulta recorrer a proxy.

Sim, realmente estão fazendo o bloqueio a partir do ip, tem que trocar o proxy a cada requisição para não ter o bloqueio. Hoje tenho um projeto que faz algo parecido, mas não tem uma funcionalidade para filtrar os ip's desejados, por exemplo, apenas ip BR e de operadora (vivo, oi, claro, tim, ...).
Acho que em até 2 semanas consigo implementar algo do tipo e disponibilizar um ip:porta para usar o proxy, segue o projeto e uma solução paga

@jeffersonmatheusdev
Copy link

Estou testando um sistema de rotatividade de proxy.
Utilizei uma lib que captura proxys de diversos sites, criei uma lista e uma função para que a cada out da lib popule essa lista, e coloquei um limite para 10, em seguida criei um laço para que percorra essa lista, utilizando o try para fazer um teste enviando uma requisição, se der erro eu removo esse proxy e populo novamente com mais um proxy no lugar.
isso é claro usando threads pois isso tudo deve acontecer ao mesmo tempo.

@bgastaldi
Copy link

bgastaldi commented Jul 21, 2019

olá @bgastaldi seguindo a orientação de @maycon1038

Blz. Achei o problema. Eu uso PHP, e preciso passar a requisição com protobuf. Sem isso estava dando PHONE_REGISTRATION_ERROR.

FIXED!

Se alguém tiver o invite para o Discord eu agradeço

@100n0m3
Copy link

100n0m3 commented Jul 22, 2019

@bgastaldi
Copy link

https://discordapp.com/channels/403565711898968065/403565711898968067

link do discord.

Precisa de convite. Tentei entrar não consegui

@100n0m3
Copy link

100n0m3 commented Jul 22, 2019

https://discord.gg/yde9gqp

ta ai

@jetherbsf
Copy link

jetherbsf commented Jul 25, 2019

Oi pessoal, parabéns pelo trabalho! pretendem atualizar a api Sinesp do Chapeupreto em php?

@GralakCobra
Copy link

Boa Tarde Pessoal alguém conseguiu implementar em PHP para compartilhar conosco ?

@thiMoreira
Copy link

Alguma novidade, conseguiram solucionar?

@maycon1038
Copy link

Boa Tarde Pessoal alguém conseguiu implementar em PHP para compartilhar conosco ?

O processo é fácil mas voce tem que implementar, vou postar o passo a passo

1 Etapa - registrando o aplicativo no cloud via api
POST /checkin HTTP/1.1
Host: android.clients.google.com
Host: android.clients.google.com
content-length: 70
Connection: keep-alive
cache-control: no-cache

	{
	"userSerialNumber": 0, 
	"checkin":
	{
		"type": 1 
	},
	"version": 49
	}

2 Etapa - gerando o token firebase

POST /c2dm/register3 HTTP/1.1
Host: android.clients.google.com
Authorization: AidLogin 4110676151848553255:2997152737904869802
app: br.gov.sinesp.cidadao.android
Host: android.clients.google.com

sender=905942954488&app=br.gov.sinesp.cidadao.android&device=4110676151848553255&app_ver=49&X-appid=eFMtyJXP3459&X-subtype=905942954488&X-app_ver=49&cert=daf1d792d60867c52e39c238d9f178c42f35dd98

3 Etapa - fazendo a consulta.
Lembra de pegar a secreta "#8.1.0#0KnlVSWHxOih3zKXBWlo" e fazer o hash_hmac

POST /sinesp-cidadao/mobile/consultar-placa/v5 HTTP/1.1
Host: cidadao.sinesp.gov.br
Authorization: Token eFMtyJXP3459:APA91bENYracfIE0WduGFhfBeSDqzZ7V77NJbIsz374cbidjAuuLDRyGlFm3rvXwN8NrbYK1Cb_9V5djo_bsmsTblysyBiIxxrSqzLKf-A38S-_93kGU34Cyw0w5SYkvxZI8pdJ6eUJh
Content-Type: text/xml
Host: cidadao.sinesp.gov.br
cookie: JSESSIONID=UMeSkul4N14lAm9UK35DNRxg.cidadao1; cw_aplicacao_cidadao=1.cidadao1; cw_aplicacao_mandado=1.cidadao1; cw_aplicacao_desaparecidos=1.cidadao1
accept-encoding: gzip, deflate
content-length: 617
Connection: keep-alive
cache-control: no-cache

<v:Envelope xmlns:v="http:https://schemas.xmlsoap.org/soap/envelope/">
<v:Header>
<b>samsung GT-I9192</b>
<c>ANDROID</c>
<d>8.1.0</d>
<e>5.1</e>
<f>192.168.0.11</f>
<g>1d25306ef40c954de17356916447159e751deac8</g>
<h>0.0</h>
<i>0.0</i>
<k></k>
<l>16-07-2019 14:05:37</l>
<m>8797e74f0d6eb7b1ff3dc114d4aa12d3</m>
<n>eFMtyJXP3459</n>
</v:Header>
<v:Body>
<n0:getStatus xmlns:n0="http:https://soap.ws.placa.service.sinesp.serpro.gov.br/">
<a>PJP2356</a>
</n0:getStatus>
</v:Body>
</v:Envelope>

@joaoescribano
Copy link

Depois de muita engenharia reversa no apk....

image

@giovanigenerali
Copy link

@joaoescribano se puder compartilha seu código em um repositório aqui no Github.

@jetherbsf
Copy link

Pessoal, bom dia, o Sinesp voltou a quebrar. Aparece a mensagem:
"Instalação inválida. Tente novamente ou re-instale o aplicativo."

@joaoescribano
Copy link

joaoescribano commented Dec 16, 2019

O app do sinesp apresentou algumas falhas durante os ultimos dias devido a ultima atualização 4.7.5 que entrou em vigor 100% agora e as versões antigas deixaram de funcionar completamente.

Quem estava na versão nova também recebeu alguns erros como:

{
    "XXX????": {
        "codigoRetorno": 8,
        "mensagemRetorno": "Instalação inválida. Tente novamente ou re-instale o aplicativo."
    }
}

Felizmente nada foi alterado no app, na comunicação, nas chaves, em nada!
image

@joaoescribano
Copy link

Aparentemente agora placas mercosul (A-J) estão ok na consulta mas retornando convertida na respota:
image

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

No branches or pull requests