Open ferezini opened 1 year ago
Postaram um novo token aqui
REQUEST_TOKEN = ( "tE8l0X/+zoQBOGSLejnUSKS/7bymdZxNwHUdAjZ1Ersq46eFVL7gZgI/1vCVjn2I08GwmBWRv3yfC9NNyEDqh705rIcC64JJ+sSJW+jKpi4xXT/JWhD3qMJeQRSmNzbDziocdHlBJ+N7yQYe63D7mTDw12mRuwnXHXc1I7JJYty7GenkqxPomGHJvFxsc1N8wfOaXFY3P7Pf5Pf09OtIe2I5NaAS6VmfLk5J13HnEgXYAyVeYH4L9ItStp3aG0Em1MCnxm7wHqhSy6BN8Pg1J2w9ng12WSBNpmUXAeemC1SRV1dJ0T5OB2wGFce+l0vQLj2/0j8Zt5/8YQ3kZ05u3g==" )
tem que mudar para
https://proxyapp.correios.com.br/v3/app-validation"
mas o problema maior é que ta dando muita problema na conexao
aqui
ERROR:root:Erro ao buscar encomenda NL478350305BR: Cannot connect to host proxyapp.correios.com.br:443 ssl:default [Não há endereço associado com o nome]
direto
Boa tarde!
Obrigado por compartilhar, fiz as alterações e funcionou!
Opa.. estou com o mesmo problema.
Poderia detalhar onde é feito essa alteração?
Dentro do repositorio execute os seguintes comandos:
[root@centos Correios-Brasil]# find . -type f -exec sed -i 's/v2\/app-validation/v3\/app-validation/g' {} +
[root@centos Correios-Brasil]# find . -type f -exec sed -i 's|YW5kcm9pZDtici5jb20uY29ycmVpb3MucHJlYXRlbmRpbWVudG87RjMyRTI5OTc2NzA5MzU5ODU5RTBCOTdGNkY4QTQ4M0I5Qjk1MzU3ODs1LjEuMTQ=|tE8l0X/+zoQBOGSLejnUSKS/7bymdZxNwHUdAjZ1Ersq46eFVL7gZgI/1vCVjn2I08GwmBWRv3yfC9NNyEDqh705rIcC64JJ+sSJW+jKpi4xXT/JWhD3qMJeQRSmNzbDziocdHlBJ+N7yQYe63D7mTDw12mRuwnXHXc1I7JJYty7GenkqxPomGHJvFxsc1N8wfOaXFY3P7Pf5Pf09OtIe2I5NaAS6VmfLk5J13HnEgXYAyVeYH4L9ItStp3aG0Em1MCnxm7wHqhSy6BN8Pg1J2w9ng12WSBNpmUXAeemC1SRV1dJ0T5OB2wGFce+l0vQLj2/0j8Zt5/8YQ3kZ05u3g==|g' {} +
Obrigado!!
Eu fiz 2 PRs lá no repo pra arrumar o pacote
Bom dia,
Caiu novamente a autenticação, pelo retorno do pacote no /v3/validation, é falha no formato da data, alguém tem a correção?
@fbenatti Ainda não. O requestToken
aparentemente expira em 24h e ainda não há uma solução para ficar renovando isso automaticamente.
@GabrielRF seria viavel montar um endpont "genérico" e fazer o POST do novo token? Se sim, posso montar um endpoint para postar o token gerado!
@GabrielRF seria viavel montar um endpont "genérico" e fazer o POST do novo token? Se sim, posso montar um endpoint para postar o token gerado!
seria um bom "workaround"
Montei um projetinho OpenSource, vou publicar no Github assim que tiver tempo, mas segue o link com a documentação de uso https://postmyhash.com/
POST /createHash Este endpoint é utilizado para criar ou atualizar uma chave hash. A chave é única para cada par de usuário e senha.
# curl -X POST -H "Content-Type: application/json" -d \
'{"user": "meu_usuario", "password": "minha_senha", "chave": "minha_chave", "hash": "meu_hash"}' https://postmyhash.com/createHash
GET /minha_chave/
curl -k https://postmyhash.com/minha_chave/
Montei um projetinho OpenSource, vou publicar no Github assim que tiver tempo, mas segue o link com a documentação de uso https://postmyhash.com/
POST /createHash Este endpoint é utilizado para criar ou atualizar uma chave hash. A chave é única para cada par de usuário e senha.
# curl -X POST -H "Content-Type: application/json" -d \ '{"user": "meu_usuario", "password": "minha_senha", "chave": "minha_chave", "hash": "meu_hash"}' https://postmyhash.com/createHash
GET /minha_chave/ Este endpoint é utilizado para obter o valor da chave especificada.
curl -k https://postmyhash.com/minha_chave/
Onde eu encontro o usuario e senha? rsrsrs
La na documentação eu explico, mas quando vc cria a chave, o user e senha é definido por você mesmo, assim uma pessoa não poderá alterar a chave de outro projeto sem ter o usuário e senha.
@fbenatti
Montei um projetinho OpenSource, vou publicar no Github assim que tiver tempo, mas segue o link com a documentação de uso https://postmyhash.com/
Open, porém fechado. kkkk
Não é mais fácil ensinar a todos como que obter um token? Vai que você decide não pagar mais o domínio ou a máquina na Digital Ocean..
@GabrielRF, eu não sou o proprietario do TOKEN, apenas criei esse workaround para facilitar o uso, até que se ache uma solução definitiva. Suas colocações estão corretas. E claro, isso se o pessoal quiser usar o workaround, caso eles não queiram, dai teremos que aguardar a solução definitiva.
@GabrielRF, eu não sou o proprietario do TOKEN, apenas criei esse workaround para facilitar o uso, até que se ache uma solução definitiva. Suas colocações estão corretas.
de quem é o Token afinal? no caso a gente vai conseguir ter acesso a geraçao do token a hora que quiser de graça? Vai ter restriçao de uso? ainda nao entendi Vi que tem um dominio associado e uma maquina virtual paga a ideia é a galera rachar esses custos para ter acesso ao token?
@ils15, pensei que fosse, você, onde você obteve ac
Postaram um novo token aqui
REQUEST_TOKEN = ( "tE8l0X/+zoQBOGSLejnUSKS/7bymdZxNwHUdAjZ1Ersq46eFVL7gZgI/1vCVjn2I08GwmBWRv3yfC9NNyEDqh705rIcC64JJ+sSJW+jKpi4xXT/JWhD3qMJeQRSmNzbDziocdHlBJ+N7yQYe63D7mTDw12mRuwnXHXc1I7JJYty7GenkqxPomGHJvFxsc1N8wfOaXFY3P7Pf5Pf09OtIe2I5NaAS6VmfLk5J13HnEgXYAyVeYH4L9ItStp3aG0Em1MCnxm7wHqhSy6BN8Pg1J2w9ng12WSBNpmUXAeemC1SRV1dJ0T5OB2wGFce+l0vQLj2/0j8Zt5/8YQ3kZ05u3g==" )
tem que mudar para
https://proxyapp.correios.com.br/v3/app-validation"
mas o problema maior é que ta dando muita problema na conexao
aqui
ERROR:root:Erro ao buscar encomenda NL478350305BR: Cannot connect to host proxyapp.correios.com.br:443 ssl:default [Não há endereço associado com o nome]
direto
@ils15, pensei que fosse você, onde você conseguiu esse novo token?
@ils15, pensei que fosse, você, onde você obteve ac
Postaram um novo token aqui REQUEST_TOKEN = ( "tE8l0X/+zoQBOGSLejnUSKS/7bymdZxNwHUdAjZ1Ersq46eFVL7gZgI/1vCVjn2I08GwmBWRv3yfC9NNyEDqh705rIcC64JJ+sSJW+jKpi4xXT/JWhD3qMJeQRSmNzbDziocdHlBJ+N7yQYe63D7mTDw12mRuwnXHXc1I7JJYty7GenkqxPomGHJvFxsc1N8wfOaXFY3P7Pf5Pf09OtIe2I5NaAS6VmfLk5J13HnEgXYAyVeYH4L9ItStp3aG0Em1MCnxm7wHqhSy6BN8Pg1J2w9ng12WSBNpmUXAeemC1SRV1dJ0T5OB2wGFce+l0vQLj2/0j8Zt5/8YQ3kZ05u3g==" ) tem que mudar para https://proxyapp.correios.com.br/v3/app-validation" mas o problema maior é que ta dando muita problema na conexao aqui ERROR:root:Erro ao buscar encomenda NL478350305BR: Cannot connect to host proxyapp.correios.com.br:443 ssl:default [Não há endereço associado com o nome] direto
@ils15, pensei que fosse você, onde você conseguiu esse novo token?
postaram aqui
subi um endpoint temporario pra gente usar os tokens gerados manualmente.
infelizmente nao tem nenhum token funcionando (pelo menos nenhum que eu tenha encontrado)
F
F
Postaram um novo token aqui
REQUEST_TOKEN = ( "tE8l0X/+zoQBOGSLejnUSKS/7bymdZxNwHUdAjZ1Ersq46eFVL7gZgI/1vCVjn2I08GwmBWRv3yfC9NNyEDqh705rIcC64JJ+sSJW+jKpi4xXT/JWhD3qMJeQRSmNzbDziocdHlBJ+N7yQYe63D7mTDw12mRuwnXHXc1I7JJYty7GenkqxPomGHJvFxsc1N8wfOaXFY3P7Pf5Pf09OtIe2I5NaAS6VmfLk5J13HnEgXYAyVeYH4L9ItStp3aG0Em1MCnxm7wHqhSy6BN8Pg1J2w9ng12WSBNpmUXAeemC1SRV1dJ0T5OB2wGFce+l0vQLj2/0j8Zt5/8YQ3kZ05u3g==" )
tem que mudar para
https://proxyapp.correios.com.br/v3/app-validation"
mas o problema maior é que ta dando muita problema na conexao
aqui
ERROR:root:Erro ao buscar encomenda NL478350305BR: Cannot connect to host proxyapp.correios.com.br:443 ssl:default [Não há endereço associado com o nome]
direto
Testei AGORA e está funcionando lindamente! Obrigado!
Dessa vez parece que está mais difícil, vou instalar uma vm pra debugger android aqui e entrar na brincadeira.
Dessa vez parece que está mais difícil, vou instalar uma vm pra debugger android aqui e entrar na brincadeira.
Meu token nao expirou até hoje hueuheuhhe segue funcionando normalmente
agora parece q o token expirou
WoAH5n3OQui/naI7zBWVOEOLbYx7xlm/yvA9QPGEBW4g2Z9IcshdF7dD7NlPRTrpi6tgZZ88kOQTm6ZE6Q0Wk5LTprrXP2jatpIAr8/1nKWRbwvv9+iSbpTFo18pqLow89197siHy39XrYJDPZj34t0pUx7rFiTEUxAvkbA8GhPDkcB42oaJE9YL8kNezlgzW1Zn7LGEnYQ95uDpm6V69At7Vh/tqrIaLlCPwlMFFoIfvhSF2Etxo4+6EOSjMSubEN7FW378d29UCE6BpRdUnz1viQCyZ4LbIHijtAtczNl+SF0GGpivEi0x6aeFQbq9GGJXdEMiLW/68dT+M3Rx0A==
agora parece q o token expirou
agora parece q o token expirou
expirou mesmo, mas já mandaram um novo ! \o/
agora parece q o token expirou
agora parece q o token expirou
expirou mesmo, mas já mandaram um novo ! \o/
já expirou
Estive tentando instalar a versão 5.1.17 do app dos correios no emulador para dar uma olhada usando o HTTP ToolKit, mas sem sucesso. A nova versão só tem disponível na web via xapk e eu até consigo instalar, mas o app quebra ao iniciar.
Estive tentando instalar a versão 5.1.17 do app dos correios no emulador para dar uma olhada usando o HTTP ToolKit, mas sem sucesso. A nova versão só tem disponível na web via xapk e eu até consigo instalar, mas o app quebra ao iniciar.
Eu consegui, olha o que eu achei, é util?
Estive tentando instalar a versão 5.1.17 do app dos correios no emulador para dar uma olhada usando o HTTP ToolKit, mas sem sucesso. A nova versão só tem disponível na web via xapk e eu até consigo instalar, mas o app quebra ao iniciar.
Eu consegui, olha o que eu achei, é util?
Aqui tentei e deu esse erro:
{
"error": {
"code": 403,
"message": "The request is missing a valid API key.",
"status": "PERMISSION_DENIED"
}
}
Estive tentando instalar a versão 5.1.17 do app dos correios no emulador para dar uma olhada usando o HTTP ToolKit, mas sem sucesso. A nova versão só tem disponível na web via xapk e eu até consigo instalar, mas o app quebra ao iniciar.
Eu consegui, olha o que eu achei, é util?
Não tem relação com o token dos correios. São métricas do firebase.
Estive tentando instalar a versão 5.1.17 do app dos correios no emulador para dar uma olhada usando o HTTP ToolKit, mas sem sucesso. A nova versão só tem disponível na web via xapk e eu até consigo instalar, mas o app quebra ao iniciar.
Eu consegui, olha o que eu achei, é util?
Não tem relação com o token dos correios.
São métricas do firebase.
Resolvi postar né, vai que é útil... rsrsrs
subi um endpoint temporario pra gente usar os tokens gerados manualmente.
Atualizei
subi um endpoint temporario pra gente usar os tokens gerados manualmente.
Atualizei
Como assim gerado manualmente? Como você gera ele manualmente? Da pra automatizar não?
subi um endpoint temporario pra gente usar os tokens gerados manualmente.
Atualizei
Como assim gerado manualmente? Como você gera ele manualmente? Da pra automatizar não?
Gerado pelo método clássico, HTTP Toolkit. Até então eu não sei alguma forma de automatizar.
Eles estão usando o Bouncy Castle. Parece ser um RSA SHA256 com chaves de encriptação.
Mas essa chave estaria onde?
Eles estão usando o Bouncy Castle. Parece ser um RSA SHA256 com chaves de encriptação.
Mas essa chave estaria onde?
Dentro do binário do app.
Então vou descompilar ele rsrs
Alguém com um token valido? Agradeço
Galera, tava aqui descompilando o APK, eu não manjo nada de Java nem Kotlin....
Esse é o mais interessante ao meu ver...
Consegui também essa chave, veja se é util
stamp-cert-sha256 https://easyupload.io/lmzlfa
Será que um desses caras, tem alguma relação com o que estamos procurando?
Adicionando mais um print útil....
Alguem de JAVA/Kotlin pra dar uma força?
Finalmente achei o arquivo que faz o token @GabrielRF consegue dar uma força igual da ultima vez?
Criei um grupo pra gente discutir isso no WhatsApp, quem quiser ajudar é so chamar
https://chat.whatsapp.com/C12b8OJcfgR2hsFVcnf299
package e7;
import android.content.Context;
import android.content.res.Configuration;
import android.security.keystore.KeyGenParameterSpec;
import android.support.v4.media.Ao.SyQm;
import java.math.BigInteger;
import java.security.Key;
import java.security.KeyPairGenerator;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.cert.Certificate;
import java.security.spec.AlgorithmParameterSpec;
import java.util.Calendar;
import java.util.Locale;
import javax.crypto.Cipher;
import javax.security.auth.x500.X500Principal;
/* loaded from: classes.dex */
class f implements a {
/* renamed from: a reason: collision with root package name */
protected final String f9105a = c();
/* renamed from: b reason: collision with root package name */
protected final Context f9106b;
public f(Context context) {
this.f9106b = context;
e(context);
}
private void d(Context context) {
Locale locale = Locale.getDefault();
try {
k(Locale.ENGLISH);
Calendar calendar = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();
calendar2.add(1, 25);
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");
keyPairGenerator.initialize(j(context, calendar, calendar2));
keyPairGenerator.generateKeyPair();
} finally {
k(locale);
}
}
private void e(Context context) {
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
if (keyStore.getKey(this.f9105a, null) == null) {
d(context);
}
}
private PrivateKey g() {
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
Key key = keyStore.getKey(this.f9105a, null);
if (key != null) {
if (key instanceof PrivateKey) {
return (PrivateKey) key;
}
throw new Exception("Not an instance of a PrivateKey");
}
throw new Exception("No key found under alias: " + this.f9105a);
}
private PublicKey h() {
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
Certificate certificate = keyStore.getCertificate(this.f9105a);
if (certificate == null) {
throw new Exception("No certificate found under alias: " + this.f9105a);
}
PublicKey publicKey = certificate.getPublicKey();
if (publicKey != null) {
return publicKey;
}
throw new Exception("No key found under alias: " + this.f9105a);
}
private void k(Locale locale) {
Locale.setDefault(locale);
Configuration configuration = this.f9106b.getResources().getConfiguration();
configuration.setLocale(locale);
this.f9106b.createConfigurationContext(configuration);
}
@Override // e7.a
public byte[] a(Key key) {
PublicKey h10 = h();
Cipher i10 = i();
i10.init(3, h10, f());
return i10.wrap(key);
}
@Override // e7.a
public Key b(byte[] bArr, String str) {
PrivateKey g10 = g();
Cipher i10 = i();
i10.init(4, g10, f());
return i10.unwrap(bArr, str, 3);
}
protected String c() {
return this.f9106b.getPackageName() + ".FlutterSecureStoragePluginKey";
}
protected AlgorithmParameterSpec f() {
return null;
}
protected Cipher i() {
return Cipher.getInstance("RSA/ECB/PKCS1Padding", SyQm.iLEpbcD);
}
protected AlgorithmParameterSpec j(Context context, Calendar calendar, Calendar calendar2) {
KeyGenParameterSpec.Builder builder = new KeyGenParameterSpec.Builder(this.f9105a, 3);
return builder.setCertificateSubject(new X500Principal("CN=" + this.f9105a)).setDigests("SHA-256").setBlockModes("ECB").setEncryptionPaddings("PKCS1Padding").setCertificateSerialNumber(BigInteger.valueOf(1L)).setCertificateNotBefore(calendar.getTime()).setCertificateNotAfter(calendar2.getTime()).build();
}
}
Mensagem secreta seria essa string? ou "secret key"
VGhpcyBpcyB0aGUga2V5IGZvciBhIHNlY3VyZSBzdG9yYWdlIEFFUyBLZXkK
Pedi o GPT pra resumir isso em um javascript
const crypto = require('crypto');
// Geração de uma chave AES (simulando uma chave armazenada)
const aesKey = crypto.randomBytes(32); // 256 bits
// Dados a serem cifrados
const plaintext = 'Esta é uma mensagem secreta';
// Cifragem usando a chave AES
const iv = crypto.randomBytes(16); // Vetor de inicialização de 128 bits
const cipher = crypto.createCipheriv('aes-256-cbc', aesKey, iv);
let encryptedData = cipher.update(plaintext, 'utf8', 'base64');
encryptedData += cipher.final('base64');
console.log('Texto cifrado:', encryptedData);
// Decifragem usando a chave AES
const decipher = crypto.createDecipheriv('aes-256-cbc', aesKey, iv);
let decryptedData = decipher.update(encryptedData, 'base64', 'utf8');
decryptedData += decipher.final('utf8');
console.log('Texto decifrado:', decryptedData);
// Geração de um par de chaves RSA (simulando a geração de chave no Android)
const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
modulusLength: 2048,
publicKeyEncoding: {
type: 'pkcs1',
format: 'pem'
},
privateKeyEncoding: {
type: 'pkcs1',
format: 'pem'
}
});
console.log('Chave pública RSA:', publicKey);
console.log('Chave privada RSA:', privateKey);
// Assinatura e verificação de assinatura
const dataToSign = 'Dados a serem assinados';
const signature = crypto.sign('sha256', Buffer.from(dataToSign), privateKey);
console.log('Assinatura:', signature.toString('base64'));
const isVerified = crypto.verify(
'sha256',
Buffer.from(dataToSign),
publicKey,
Buffer.from(signature, 'base64')
);
console.log('Verificação de assinatura:', isVerified);
E muito parecido com a resolução da issue #53
@jhowbhz Eu larguei isso já. Os Correios estão ativamente bloqueando os acessos. Não está valendo a pena tanto trabalho para corrigir um problema deles mesmos, que é a lentidão nas notificações.
@jhowbhz Eu larguei isso já. Os Correios estão ativamente bloqueando os acessos. Não está valendo a pena tanto trabalho para corrigir um problema deles mesmos, que é a lentidão nas notificações.
Que pena chefe.... eu tava gostando só pelo desafio mesmo rsrsrs
Então, a API ainda existe e daria pra continuar usando, se alguém continuar de onde o @jhowbhz parou com as infos da criptografia ?
Eu to aqui pra ajudar no que precisar....
Palavra chave: AndroidKeyStore Caminho: https://stackoverflow.com/questions/22378328/android-keystore-can-a-user-key-be-retrieved-by-root-if-he-setuid-to-that-user
Creio que não vale mais a pena compartilhar a resolução por aqui pois provavelmente algum espirito de p*** está fazendo o trabalho sujo para os correios e dificultando nossa integração ao inves de se ocupar em melhorar aquela pocaria de site.
Enquanto o caminho deveria ser democratizar o acesso à informação ainda há programadores que se vendem aos governos em troca de favores escusos.
De toda forma ainda continua sendo muito facil basta um pouco de determinação. Forte abraço e viva o #bitcoin ;*
@tegila
Puts, parece que o caminho é bem por aí mesmo... Eu to sem nada de android aqui no PC, fiz uma limpa. Mas eu queria mesmo era ficar quebrando essa "criptografia" até uma hora que vai ser virtualmente impossível os correios alterarem. Esses negocio de token e app de celular só chegam até um certo nível, não tem como inviabilizar totalmente.
Vai ficar na guerrinha que estamos hoje: um vai e crackeia o outro corre e arruma. Até um cansar ou chegar no limite da tecnologia mesmo.
Se eu tivesse o conhecimento necessário entraria de boa nisso, toda vez q os caras alterasse ia dar uns 10 minutos de risada, pegar um copão de breja e já ia cair de cabeça em cima pra crackear de novo kkkk
@tegila Mano, tava pensando. Será que a versão ios do app dos correios também ta guardando essa key num lugar que não da pra recuperar?
Voltou a dar falha na autenticação, mesmo restartando o Script por aqui, com mais alguém está ocorrendo?