TOOLS / Análisis PE

SideFinder

Aplicación para Windows que identifica y valida oportunidades de DLL sideloading en archivos PE y genera DLL de prueba, sideload o proxy.

SideFinder concentra en una sola interfaz el análisis de archivos PE, la priorización de candidatos y la validación de cargas de DLL. Automatiza la revisión de imports, la resolución de rutas, la reconstrucción de exports y las pruebas de carga.

El artículo DLL Sideloading made simple with SideFinder explica la técnica mediante un caso práctico. Esta página documenta las funciones y opciones de SideFinder.

Capacidades principales

  • Analiza ejecutables y DLL x86 y x64, incluyendo imports normales, retardados y enlazados.
  • Clasifica posibles candidatos mediante un scoring contextual.
  • Comprueba arquitectura, firma Authenticode, CFG, CET, subsistema y uso de LoadLibrary.
  • Resuelve rutas de búsqueda, KnownDLLs, dependencias ausentes y DLL situadas junto a la aplicación.
  • Cruza el análisis estático con los módulos observados durante la ejecución.
  • Escanea directorios completos y permite recuperar los resultados para continuar el análisis.
  • Enriquece los hallazgos con la base comunitaria de HijackLibs.
  • Genera DLL de prueba, de sideloading o proxy y puede compilarlas automáticamente.

Requisitos

El análisis PE funciona directamente desde la aplicación. Para compilar las DLL generadas y ejecutar pruebas con un clic se necesita una cadena de C++ compatible:

  • Visual Studio Build Tools con la carga Desarrollo para el escritorio con C++.
  • MinGW-w64 con g++.exe disponible en PATH.

SideFinder busca cl.exe, vswhere.exe, vcvarsall.bat, g++.exe y x86_64-w64-mingw32-g++.exe. Si no encuentra un compilador, puede generar el código fuente y los archivos de compilación, pero no producirá automáticamente la DLL final.

Analizar un binario

Arrastra el ejecutable o su acceso directo a la ventana, o utiliza Load Binary para seleccionarlo. SideFinder procesa el PE y presenta tres bloques.

Target Info

Muestra la ruta efectiva, arquitectura, firma y protecciones del objetivo. Comprueba estos datos antes de generar una DLL: la arquitectura de ambos artefactos debe coincidir.

Import Table

  • Imports: dependencias resueltas normalmente durante la carga.
  • Delay Imports: dependencias que se resuelven cuando el programa las utiliza.
  • Bound Imports: información de imports enlazados previamente, cuando está disponible.

Sideload Candidates

La tabla reúne los candidatos y los ordena por puntuación. Sus columnas sirven para entender por qué una DLL aparece en esa posición:

IndicadorCómo interpretarlo
HijackableLa resolución de ruta podría permitir cargar una copia colocada junto al ejecutable.
App DLLEs una dependencia propia del directorio o paquete de la aplicación.
DelaySu carga puede producirse más tarde dentro del flujo de uso.
MissingEstá referenciada, pero no se encontró en las rutas evaluadas.
DocumentedExiste una coincidencia en la base local de HijackLibs.
ExportsNúmero de funciones expuestas; un valor alto suele aumentar la complejidad del proxy.

La puntuación ordena los candidatos para decidir cuáles probar primero. La confirmación llega al ejecutar la prueba de carga.

Validar un candidato

Selecciona una fila y pulsa Test Sideload. SideFinder genera una DLL de prueba con una rutina MessageBox, intenta compilarla, prepara los archivos necesarios y ejecuta el objetivo.

La aparición del mensaje confirma ejecución de código, pero revisa también que:

  • El proceso corresponde al binario que pretendías analizar.
  • La DLL se cargó desde la ruta esperada.
  • La aplicación continúa iniciándose y conserva sus funciones principales.
  • No aparecen errores de plugins, inicialización o dependencias.

Si la prueba ejecuta código pero rompe la aplicación, repítela utilizando una DLL proxy que preserve la biblioteca original.

Ejecutar análisis dinámico

Pulsa Run Dynamic Analysis para observar los módulos cargados durante la ejecución. SideFinder mantiene el proceso activo durante la ventana de análisis, recoge las DLL observadas y actualiza la tabla de candidatos.

El análisis solo cubre las rutas de ejecución alcanzadas durante ese periodo. Si una dependencia se carga al abrir un menú o realizar una acción concreta, interactúa con la aplicación durante la captura o repite la prueba con el flujo adecuado.

Escanear un directorio

Utiliza Scan Directory y selecciona la carpeta que quieras revisar. Por defecto, SideFinder recorre hasta tres niveles de subdirectorios.

Al terminar aparece un resumen por binario con el número de candidatos confirmados y potenciales. Haz doble clic sobre una fila para cargar ese ejecutable en la ventana principal.

El botón Scan Results permite volver al resumen sin repetir el escaneo.

En directorios grandes conviene acotar primero la ruta para reducir el tiempo de análisis y los resultados duplicados.

Activar HijackLibs

Abre Tools, activa Enable HijackLibs y selecciona Update HijackLibs Database para descargar la versión más reciente de la base.

Cuando una fila muestre Documented, haz doble clic en el indicador para consultar las coincidencias conocidas, los binarios asociados y sus rutas.

La marca Documented confirma que HijackLibs contiene una entrada relacionada. La combinación debe probarse de nuevo porque puede variar entre versiones, rutas y configuraciones.

Buscar coincidencias en el sistema

Desde Tools > Scan System for Sideloading, SideFinder compara las rutas documentadas con las aplicaciones presentes en el equipo.

Valida cada resultado desde la ventana principal antes de considerarlo funcional.

Generar una DLL

Selecciona el candidato y pulsa Generate Proxy DLL. El generador permite controlar el tipo de biblioteca, la fuente de exports, el momento de ejecución y la carga de validación.

Proxy DLL y Sideload DLL

  • Proxy DLL: genera los exports necesarios y reenvía las llamadas a una copia renombrada de la biblioteca legítima. Es la opción indicada cuando el programa necesita su funcionalidad original.
  • Sideload DLL: expone los símbolos esperados mediante implementaciones mínimas. Resulta útil para validar rápidamente una carga, pero puede degradar funciones o provocar el cierre de la aplicación.

En modo proxy debes mantener la DLL original junto a la generada con el nombre alternativo configurado.

Fuente de exports

La EAT de la DLL original suele ser la fuente recomendada porque describe lo que la biblioteca expone realmente. La información derivada de la IAT se limita a las funciones que el binario analizado importa y podría dejar fuera exports utilizados por plugins u otros módulos.

Punto de ejecución

  • DllMain: ejecuta la rutina cuando el loader adjunta la DLL al proceso. Es directo, pero conviene mantener el trabajo realizado dentro de DllMain al mínimo.
  • Export seleccionado: retrasa la rutina hasta que la aplicación invoque una función concreta. Requiere verificar que esa ruta se alcanza de forma fiable.

Carga de validación

  • MessageBox: muestra un aviso al cargarse la DLL y permite comprobar el flujo de ejecución.
  • Custom: entrega una plantilla para incorporar lógica propia al proxy.
  • Shellcode Runner: lee una carga binaria desde un archivo externo y la ejecuta mediante el método seleccionado.

El archivo externo puede utilizar extensiones como .dat, .ini o .txt. También puede añadirse al final de un archivo portador, como una imagen. Este mecanismo no convierte la carga en indetectable; simplemente separa sus datos de la DLL y debe evaluarse frente a los controles del entorno.

Método de ejecución

Las opciones disponibles ejecutan la rutina dentro del proceso que ha cargado la DLL:

  • Callbacks: reutilizan una API que invoca una función proporcionada por el programa. Su comportamiento y restricciones dependen de la API elegida.
  • Thread Pool: programa el trabajo sobre la infraestructura del pool de hilos del proceso, evitando crear explícitamente un hilo dedicado.
  • Fibers: convierte o utiliza un hilo como fibra y transfiere la ejecución a otro contexto cooperativo. El código generado debe devolver el control a la fibra original para no interrumpir el hilo.

La elección depende del momento en que se carga la DLL y de cómo debe continuar el proceso después de ejecutar la rutina.

Archivos generados

Después de pulsar Generate, SideFinder abre el directorio del proyecto. Incluye el código fuente, los archivos de compilación y una carpeta output con los binarios generados.

En un proxy típico, el directorio final contiene:

  • La DLL generada con el nombre que espera la aplicación, por ejemplo VERSION.dll.
  • La DLL legítima renombrada, por ejemplo notVERSION.dll.
  • El archivo externo de datos, cuando la configuración lo requiera.

Tras copiarlos junto al ejecutable, ejecuta la prueba y comprueba que el programa mantiene su funcionalidad.

Problemas habituales

No se genera la DLL

Comprueba que existe un compilador compatible, que su arquitectura coincide con el objetivo y que SideFinder puede localizarlo. Si no hay compilador, utiliza el proyecto generado y compílalo manualmente desde una consola configurada.

El MessageBox no aparece

Verifica la ruta de la DLL, el nombre exacto, la arquitectura y que estás iniciando el ejecutable analizado. Si es un delay import, reproduce la acción que provoca su carga.

La aplicación se cierra o pierde funciones

Genera una Proxy DLL, usa la EAT de la biblioteca original y comprueba que la DLL legítima renombrada está presente. Revisa también dependencias transitivas y ordinales.

El análisis dinámico no añade candidatos

Interactúa con las funciones relevantes durante la ventana de captura. Algunas DLL solo aparecen después de abrir un diálogo, cargar un plugin o acceder a una función específica.

HijackLibs no muestra documentación

Confirma que la integración está habilitada y actualiza la base. Si no aparecen coincidencias, la base local no contiene una entrada para ese candidato.

Compilar SideFinder desde el código fuente

El proyecto utiliza Dear ImGui y DirectX 11. Su Makefile permite generar un ejecutable estático de Windows desde Linux mediante MinGW-w64:

sudo apt install make mingw-w64
git clone https://github.com/mxngel/SideFinder.git
cd SideFinder
make

El resultado se guarda como SideFinder.exe. También están disponibles make debug, que crea una compilación con salida de consola, y make clean, que elimina los artefactos generados.

Licencia y componentes

SideFinder se publica bajo licencia MIT. El repositorio incluye Dear ImGui bajo su propia licencia MIT y puede integrar opcionalmente datos de HijackLibs.

RELATED / 01

Continúa explorando

Volver
No hay más entradas publicadas todavía.