Analise de log #181
Replies: 6 comments
-
|
Este log contém o código fonte HTML e JavaScript de uma página de redirecionamento intermediária, comumente usada em redes de publicidade agressiva (AdWare), esquemas de afiliados ou campanhas de distribuição de malware/phishing.
Isso manipula o histórico do navegador. O objetivo geralmente é quebrar o botão "Voltar". Se o usuário tentar voltar para a página anterior, ele pode ficar preso num loop ou ser redirecionado para outra página de anúncio, impedindo-o de sair do ciclo malicioso.
|
Beta Was this translation helpful? Give feedback.
-
|
Aqui está um relatório técnico forense detalhado da execução sequencial deste código. O script opera como um Traffic Distribution System (TDS) do lado do cliente, executando uma série de verificações antes de decidir como rotear o usuário.
|
Beta Was this translation helpful? Give feedback.
-
|
Analisar o payload de uma URL maliciosa ou de tracking (como a clGmF.znc-2pIq... do seu log) é um processo de Engenharia Reversa. O objetivo é transformar aquela "sopa de letrinhas" em dados legíveis (JSON, XML ou texto plano) para entender quem é o alvo e quem é o atacante.
Parte do payload extraída do seu logpayload = "rcsn_JupvZwDx0-yzYATBQCx_OETFZGjHY-TJEKxLOMG_JOmPMQ2RJ-iTNUmVMWz_MYjZAa0bM-jddeifZgD_gi2jMkTlU-5nNoypZqy_cs3tJujvP-XxByvzcAH_NCjDcEmFl-wHdIFJ9Kw_bM3NBO1Pc-CRZS0TdUn_IW9XMYCZZ-6bbc2d5el_agWhQi9jN-jlUm0nOoT_IqyrNsgt" def decode_base64url(data): resultado = decode_base64url(payload) print(f"--- Tentativa de Decodificação UTF-8 ---")
|
Beta Was this translation helpful? Give feedback.
-
|
Aqui está o processo de decodificação da string Base64URL que você forneceu.
Seu payloadpayload = "rcsn_JupvZwDx0-yzYATBQCx_OETFZGjHY-TJEKxLOMG_JOmPMQ2RJ-iTNUmVMWz_MYjZAa0bM-jddeifZgD_gi2jMkTlU-5nNoypZqy_cs3tJujvP-XxByvzcAH_NCjDcEmFl-wHdIFJ9Kw_bM3NBO1Pc-CRZS0TdUn_IW9XMYCZZ-6bbc2d5el_agWhQi9jN-jlUm0nOoT_IqyrNsgt" 1. Corrigir formato Base64URL para Base64 PadrãoTroca '-' por '+' e '_' por '/'safe_payload = payload.replace('-', '+').replace('_', '/') 2. Adicionar Padding (o sinal de igual '=') se necessáriowhile len(safe_payload) % 4 != 0: try: except Exception as e: Conclusão Final
|
Beta Was this translation helpful? Give feedback.
-
|
Aqui estão os payloads extraídos do log "limpos" para a sua análise.
Dica para sua ferramenta de análise
|
Beta Was this translation helpful? Give feedback.
-
|
Aqui está um script Python robusto projetado para replicar a funcionalidade de uma "Receita CyberChef" localmente.
import base64
import math
import binascii
import string
from itertools import cycle
# --- CONFIGURAÇÃO: Cole aqui os payloads extraídos ---
PAYLOADS = {
"Payload_Principal (Form)": "rcsn_JupvZwDx0-yzYATBQCx_OETFZGjHY-TJEKxLOMG_JOmPMQ2RJ-iTNUmVMWz_MYjZAa0bM-jddeifZgD_gi2jMkTlU-5nNoypZqy_cs3tJujvP-XxByvzcAH_NCjDcEmFl-wHdIFJ9Kw_bM3NBO1Pc-CRZS0TdUn_IW9XMYCZZ-6bbc2d5el_agWhQi9jN-jlUm0nOoT_IqyrNsgt",
"Payload_Secundario (History)": "Pp2qhr0sY_XuRviwPxT-EzmAcBnCJ_pEZFDG0H3-MJWKULzMN_TOlPiQZRD-QT3UNVjWk_4YMZTaYbz-Nd2eNfmgZ_DiAjxkZlT-ZnkoYpjqg_ysZtDuYv2-OxSyZzyAc_3CJDjEPFW-hHpIcJ3KR_vMcNnOlPi-YRWSNTrUJ_nWNXpYZZD-0b2cNdTeQ_5gMhjiIj2-Jlnmpnvob_mqVrpsZtD-0v2wNxTyQ_5AMBjCID2-"
}
# Chaves prováveis baseadas na URL do seu log (fastblow.com/clGmF.znc-2pIq/...)
POSSIBLE_XOR_KEYS = ["clGmF", "znc", "2pIq", "fastblow"]
def shannon_entropy(data):
"""Calcula a entropia para saber se é criptografado (Alto > 7.5)"""
if not data:
return 0
entropy = 0
for x in range(256):
p_x = float(data.count(x))/len(data)
if p_x > 0:
entropy += - p_x*math.log(p_x, 2)
return entropy
def xor_decrypt(data, key):
"""Replica a operação 'XOR' do CyberChef com uma chave"""
key_bytes = key.encode('utf-8')
return bytes([b ^ k for b, k in zip(data, cycle(key_bytes))])
def extract_strings(data, min_length=4):
"""Replica a operação 'Strings' para achar texto legível"""
result = ""
current_string = ""
for byte in data:
char = chr(byte)
if char in string.ascii_letters or char in string.digits or char in "._-/:":
current_string += char
else:
if len(current_string) >= min_length:
result += current_string + " "
current_string = ""
if len(current_string) >= min_length:
result += current_string
return result
def cyberchef_pipeline(name, payload_str):
print(f"\n{'='*60}")
print(f"ANALISANDO: {name}")
print(f"{'='*60}")
# 1. Correção e Decode Base64URL
# Substitui - por + e _ por /
safe_str = payload_str.replace('-', '+').replace('_', '/')
# Adiciona padding (=)
while len(safe_str) % 4 != 0:
safe_str += '='
try:
raw_bytes = base64.b64decode(safe_str)
print(f"[+] Decode Sucesso! Tamanho: {len(raw_bytes)} bytes")
except Exception as e:
print(f"[!] Erro no Decode: {e}")
return
# 2. Análise Hexadecimal (Magic Bytes)
hex_head = binascii.hexlify(raw_bytes[:16]).decode('utf-8')
print(f"[i] Magic Bytes (Hex): {hex_head}...")
# 3. Entropia (Detecção de Criptografia)
entropy = shannon_entropy(raw_bytes)
print(f"[i] Entropia de Shannon: {entropy:.4f}")
if entropy > 7.5:
print(" -> ALTA Probabilidade de ser Criptografado ou Comprimido.")
else:
print(" -> Baixa Entropia (pode ser texto simples ou código ofuscado).")
# 4. Tentativa de Strings Simples
strs = extract_strings(raw_bytes)
if strs:
print(f"[i] Strings visíveis (sem XOR): {strs[:100]}...")
else:
print("[i] Nenhuma string legível encontrada (Blob binário).")
# 5. Ataque XOR (Receita CyberChef)
print("\n--- TENTATIVA DE DECRIPTOGRAFIA XOR (Heurística) ---")
found_something = False
for key in POSSIBLE_XOR_KEYS:
decrypted = xor_decrypt(raw_bytes, key)
# Verifica se "nasceu" alguma string legível após o XOR
decrypted_strs = extract_strings(decrypted, min_length=5)
# Se encontrarmos palavras comuns de web/json
keywords = ["http", "www", "json", "id", "user", "campaign", "browser"]
score = sum(1 for k in keywords if k in decrypted_strs.lower())
if score > 0 or len(decrypted_strs) > 20:
print(f"[!!!] KEY POTENCIAL ENCONTRADA: '{key}'")
print(f" Conteúdo: {decrypted_strs[:100]}...")
found_something = True
if not found_something:
print("[*] XOR com chaves padrão da URL não revelou texto claro óbvio.")
# --- Execução Principal ---
if __name__ == "__main__":
for nome, dados in PAYLOADS.items():
cyberchef_pipeline(nome, dados)Como interpretar a saída
|
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
Beta Was this translation helpful? Give feedback.
All reactions