Script Python para busca de padrões regex em arquivos binários (como .so de apps Flutter/Android), com suporte automático para detecção e decodificação de strings Base64.
- ✅ Extrai strings de arquivos binários
- ✅ Detecta e decodifica automaticamente strings Base64
- ✅ Suporta múltiplos padrões regex via arquivo JSON
- ✅ Suporta arrays de regex para um mesmo padrão
- ✅ Busca case-insensitive
- ✅ Remove duplicatas automaticamente
- ✅ Output colorido e organizado
- ✅ Mostra contexto completo de strings decodificadas
- Python 3.6+ (geralmente pré-instalado no macOS)
- Comando
strings(pré-instalado no macOS/Linux)
Nenhuma! O script usa apenas bibliotecas padrão do Python.
# Clone o repositório
git clone https://github.com/RedTeamBrasil/FlutterLibappSearch.git FlutterLibappSearch
cd FlutterLibappSearch
# Torne o script executável (opcional)
chmod +x search_patterns.pypython3 search_patterns.py --file <arquivo_alvo> --json <arquivo_json># Forma básica
python3 search_patterns.py --file libapp.so --json regexes.json
# Forma curta com aliases
python3 search_patterns.py -f libapp.so -j regexes.json
# Limitando número de resultados
python3 search_patterns.py -f libapp.so -j regexes.json --max-results 50
# Sem cores (útil para logs)
python3 search_patterns.py -f libapp.so -j regexes.json --no-color
# Ver ajuda
python3 search_patterns.py --helpO arquivo JSON deve conter pares chave-valor onde:
- Chave: Nome descritivo do padrão
- Valor: Regex (string) ou array de regex
{
"Firebase": "[a-z0-9.-]+\\.firebaseio\\.com",
"AWS_API_Key": "AKIA[0-9A-Z]{16}",
"Amazon_AWS_S3_Bucket": [
"//s3-[a-z0-9-]+\\.amazonaws\\.com/[a-z0-9._-]+",
"//s3\\.amazonaws\\.com/[a-z0-9._-]+",
"[a-z0-9.-]+\\.s3\\.amazonaws\\.com"
],
"Google_API_Key": "AIza[0-9A-Za-z\\-_]{35}",
"IP_Address": "(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])"
}Você pode usar o arquivo de regex do projeto apkleaks como referência.
O script exibe resultados organizados e coloridos:
═══════════════════════════════════════════════════════════
Busca de Padrões Regex em Arquivo Binário
═══════════════════════════════════════════════════════════
Arquivo alvo: libapp.so
Arquivo JSON: regexes.json
Extraindo strings do arquivo binário...
✓ 45230 strings extraídas
Verificando e decodificando strings Base64...
✓ 128 strings Base64 decodificadas com sucesso
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Padrão: Firebase
Regex: [a-z0-9.-]+\.firebaseio\.com
✓ Encontrado(s) 2 resultado(s) único(s):
→ myapp.firebaseio.com
→ secret-api.firebaseio.com
Decodificado: {"url":"https://secret-api.firebaseio.com","key":"abc123"}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Padrão: Google_API_Key
Regex: AIza[0-9A-Za-z\-_]{35}
✓ Encontrado(s) 1 resultado(s) único(s):
→ AIzaSyDxVxBvXxBvXxBvXxBvXxBvXxBvXxBvXxB
═══════════════════════════════════════════════════════════
Busca concluída!
Total de padrões processados: 52
Total de matches encontrados: 87
═══════════════════════════════════════════════════════════
| Argumento | Alias | Obrigatório | Descrição |
|---|---|---|---|
--file |
-f |
✅ | Arquivo alvo para busca (ex: libapp.so) |
--json |
-j |
✅ | Arquivo JSON com padrões regex |
--max-results |
-m |
❌ | Número máximo de resultados por padrão (padrão: 20) |
--no-color |
- | ❌ | Desabilita cores no output |
--help |
-h |
❌ | Exibe ajuda |
- 🔐 Análise de segurança: Encontrar secrets, tokens e credenciais em binários
- 📱 Engenharia reversa de apps: Extrair URLs, APIs e configurações de apps Flutter/Android
- 🔍 Auditoria de código: Verificar vazamento de informações sensíveis
- 🛡️ Pen testing: Identificar pontos de ataque e configurações expostas
O script detecta automaticamente strings Base64 válidas usando os seguintes critérios:
- Comprimento mínimo de 16 caracteres
- Comprimento múltiplo de 4
- Contém apenas caracteres válidos:
A-Z,a-z,0-9,+,/,= - Decodificação resulta em texto UTF-8 legível
Quando uma string Base64 é encontrada:
- É decodificada automaticamente
- A busca é feita no conteúdo decodificado
- O contexto completo decodificado é exibido no resultado
Inspirado no projeto apkleaks por dwisiswant0.