Hackeando o Site da Wikipédia? Entendendo SSL Pinning no Android
Introdução
O SSL Pinning é uma das técnicas de segurança mais importantes para proteger a comunicação entre aplicativos móveis e servidores.
Neste artigo, você vai entender como essa proteção funciona e como ela pode ser contornada em versões antigas do Android — não para fins maliciosos, mas para compreender conceitos de segurança e realizar testes éticos.
⚠️ AVISO IMPORTANTE:
Este conteúdo é estritamente educacional.
Realizar testes de segurança sem autorização é ilegal.
Use esse conhecimento apenas em ambientes controlados e com permissão.
🎥 Vídeo Tutorial Completo
Confira o tutorial no YouTube:
👉 Hackeando o Site do Wikipédia? Android SSL Pinning
🧠 O que é SSL Pinning?
SSL Pinning (ou Certificate Pinning) é uma técnica que “fixa” o certificado SSL esperado dentro do aplicativo.
Isso significa que o app só aceita conexões com um certificado específico, impedindo ataques do tipo Man-in-the-Middle (MITM).
Como Funciona?
- Sem SSL Pinning: o app confia em qualquer certificado válido por uma Autoridade Certificadora (CA).
- Com SSL Pinning: o app confia apenas no certificado específico embutido no código.
🧰 Ferramentas Necessárias
- Emulador Nox (Android 5.1 ou inferior)
- Fiddler Classic (para interceptação de tráfego)
- Certificado SSL (gerado pelo Fiddler)
- Aplicativo Wikipedia (ou outro app para teste)
⚙️ Passo a Passo: Configurando o Ambiente
1. Instalação do Emulador Nox
Baixe e instale o emulador Nox Player com Android 5.1.
Configure a versão para Android 5.1.1, pois versões antigas possuem menos proteções.
💡 Por que Android 5?
- Sistema de certificados mais permissivo
- Menos camadas de defesa
- Facilita testes e interceptações
2. Configuração do Fiddler Classic
- Abra o Fiddler Classic
- Vá em
Tools > Options > HTTPS - Marque:
- “Capture HTTPS CONNECTs”
- “Decrypt HTTPS traffic”
- Clique em
Actions > Export Root Certificate to Desktop
3. Configurando o Proxy no Emulador
No Nox:
Settings > Wi-Fi > Long press na rede > Modify Network
Proxy hostname: 10.0.2.2
Proxy port: 8888
4. Instalando o Certificado no Android
- Transfira o certificado
.cerpara o emulador - Vá em
Settings > Security > Install from storage - Escolha o certificado Fiddler e instale como CA raiz
🔍 Interceptando o Tráfego da Wikipedia
- Inicie o Fiddler Classic
- Abra o app Wikipedia no emulador
- Navegue por alguns artigos
- Observe as requisições no Fiddler
Exemplo de Requisição
GET /api/rest_v1/page/summary/Internet HTTP/1.1
Host: pt.wikipedia.org
User-Agent: WikipediaApp/2.7
Accept: application/json
Exemplo de Resposta
{
"type": "standard",
"title": "Internet",
"extract": "A Internet é um sistema global de redes de computadores..."
}
🧩 O que Podemos Observar
- Headers HTTP: User-Agent, cookies, tokens
- Payload JSON: dados enviados/recebidos
- URLs e endpoints da API
- Parâmetros de requisição
🕵️♂️ Detectando Emuladores
Exemplo simples de detecção:
public boolean isEmulator() {
return Build.FINGERPRINT.contains("generic")
|| Build.MODEL.contains("Emulator")
|| Build.MANUFACTURER.contains("Genymotion")
|| Build.HARDWARE.contains("goldfish");
}
Contornos possíveis
- Modificar propriedades do sistema
- Usar emuladores menos conhecidos
- Aplicar patches no APK
⚗️ Possíveis Explorações (Contexto Educacional)
1. Análise de APIs
import requests
response = requests.get(
"https://pt.wikipedia.org/api/rest_v1/page/summary/Python",
headers={"User-Agent": "WikipediaApp/2.7"}
)
print(response.json()["extract"])
2. Teste de Força Bruta (Somente em Ambientes Autorizados)
import requests
def test_login(username, password):
response = requests.post(
"https://example.com/api/login",
json={"user": username, "pass": password}
)
return response.status_code == 200
weak_passwords = ["123456", "password", "admin"]
for pwd in weak_passwords:
if test_login("admin", pwd):
print(f"Senha fraca encontrada: {pwd}")
3. Análise de Tokens JWT
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Use ferramentas como jwt.io para inspecionar tokens.
🛡️ Como Desenvolvedores Devem se Proteger
Exemplo em Java (Android)
public class SSLPinningExample {
public OkHttpClient createSecureClient() {
CertificatePinner pinner = new CertificatePinner.Builder()
.add("api.example.com", "sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=")
.build();
return new OkHttpClient.Builder()
.certificatePinner(pinner)
.build();
}
}
Exemplo em Kotlin
val pinner = CertificatePinner.Builder()
.add("api.wikipedia.org", "sha256/++MBgDH5WGvL9Bcn5Be30cRcL0f5O+NyoXuWtQdX1aI=")
.build()
val client = OkHttpClient.Builder()
.certificatePinner(pinner)
.build()
🧱 Outras Boas Práticas
- Verificação de root/jailbreak
- Ofuscação de código
- Detecção de ferramentas de análise
- Criptografia adicional no payload
- Rate limiting no backend
📊 Comparação: Com vs Sem SSL Pinning
| Aspecto | Sem SSL Pinning | Com SSL Pinning |
|---|---|---|
| Interceptação | Fácil | Bloqueada |
| MITM Attack | Vulnerável | Protegido |
| Análise de tráfego | Simples | Difícil |
| Certificado falso | Aceito | Rejeitado |
| Segurança | Baixa | Alta |
⚖️ Aspectos Legais e Éticos
✅ Uso Permitido
- Testar seus próprios apps
- Pesquisa de segurança com permissão
- Programas de bug bounty
- Ambientes educacionais controlados
❌ Uso Proibido
- Interceptar dados de terceiros
- Roubar credenciais
- Explorar vulnerabilidades
- Compartilhar dados interceptados
📜 Lei nº 12.737/2012 (Lei Carolina Dieckmann)
Invadir dispositivo informático alheio é crime.
Pena: Detenção de 3 meses a 1 ano + multa
📚 Recursos para Aprender Mais
Cursos e Certificações
- eJPT — eLearnSecurity Junior Penetration Tester
- CEH — Certified Ethical Hacker
- OSCP — Offensive Security Certified Professional
Ferramentas Adicionais
- Burp Suite — alternativa profissional ao Fiddler
- mitmproxy — proxy de código aberto
- Frida / Objection — instrumentação dinâmica
Plataformas de Prática Legal
🧾 Comandos Úteis
netstat -an | findstr "8888" # verificar porta
adb push certificate.cer /sdcard/ # transferir certificado
adb install app.apk # instalar APK
adb logcat | grep "Wikipedia" # logs em tempo real
openssl s_client -connect wikipedia.org:443 -showcerts # extrair certificado
🧭 Conclusão
O SSL Pinning é uma camada essencial de segurança em aplicativos móveis.
Compreender seu funcionamento ajuda a:
- Desenvolver apps mais seguros
- Realizar auditorias éticas
- Entender riscos de segurança mobile
- Promover boas práticas no desenvolvimento
Próximos Passos
- 📺 Assistir ao vídeo completo no YouTube
- 🧪 Praticar em ambientes controlados
- 🔍 Estudar Frida para bypass moderno
- 🐞 Explorar programas de bug bounty legítimos
Lembre-se:
Com grandes poderes vêm grandes responsabilidades.
Use esse conhecimento para proteger, não para atacar.
🎥 Assista ao tutorial completo:
https://youtu.be/kYo-U0wvd7M
Gostou do post?
Deixe seu like e ajude a divulgar o conteúdo!