Volver al inicio

QReaper - Analisis Anti-Quishing

Herramienta de analisis de phishing oculto en QR codes. Detecta URLs maliciosas en emails, PDFs e imagenes mediante pipeline de 5 etapas: decodificacion, analisis estatico de URLs, sandbox con headless browser, scoring de riesgo y generacion de informes.

Mi rol

Desarrollador del modulo de decodificacion: extraccion de QR de imagenes, emails .eml y PDFs, preprocesamiento de imagenes con CLAHE, binarizacion Otsu, y escalado adaptativo.

Impacto

Proyecto de equipo (5 personas) para el Master en Ciberseguridad en Evolve Academy. Modulo de decodificacion completo con 6 tecnicas de preprocesamiento de imagen para deteccion robusta de QR.

Reto

Los filtros de email no pueden leer QR codes porque son imagenes, haciendo invisible la URL maliciosa hasta que un humano la escanea. El ataque quishing esta en auge en 2026 y las organizaciones no tienen herramientas automaticas de deteccion.

Solución

Pipeline modular de 5 etapas con contratos explicitos entre modulos. El decode aplica 6 tecnicas de preprocesamiento (grayscale, Otsu normal/invertido, upscaling, CLAHE, adaptive threshold) para maximizar la deteccion. Dual PDF engine (pdf2image + PyMuPDF fallback). Fixtures-as-code para datos de test reproducibles.

Pipeline de analisis

  1. Decodificación: decode.decode(file_path) -> list[str]: extracción de QR de imágenes, emails .eml y PDFs.
  2. Análisis estático de URLs: analisis_url.analizar_url(url) -> dict: análisis estático de la URL.
  3. Sandbox con headless browser: sandbox.detonar(url) -> dict: ejecución en sandbox con navegador headless.
  4. Scoring de riesgo: scoring.puntuar(signals, sandbox) -> dict: scoring de riesgo de la señal.
  5. Generación de informes: informe.generar_informe(result, format) -> str: generación del informe.

Arquitectura

Pipeline modular: decode.decode(file_path) -> list[str] -> analisis_url.analizar_url(url) -> dict -> sandbox.detonar(url) -> dict -> scoring.puntuar(signals, sandbox) -> dict -> informe.generar_informe(result, format) -> str. Desarrollo contract-driven con CONTRATOS.md. Branch-per-module en Git.

qreaper.esInstagramInforme de la práctica (PDF, 129 KB)