
Biblioteca Object Pascal (Delphi) para analizar, mapear, cargar y volcar archivos PE de Windows, con reubicaciones, importaciones, TLS y lectura de memoria de procesos remotos.
NativePe es una biblioteca de Portable Executable de Windows escrita en Object Pascal para Delphi.
El proyecto se centra en el análisis, mapeo, carga, reubicación, manejo de importaciones y exportaciones, volcado, lectura de memoria de procesos y aspectos relacionados con las tripas de Windows. Soporta compilaciones Win32 y Win64 desde el mismo árbol de código fuente.
NativePe es un proyecto de investigación. Ha sido probado contra un gran conjunto de archivos PE normales, inusuales, malformados y hostiles, pero no pretende manejar correctamente todos los archivos PE posibles.
Parte de la motivación es personal. Usé Delphi alrededor de principios de los 2000 y quería revisitar el desarrollo de bajo nivel en Windows con Delphi moderno.
NativePe es también un experimento práctico para demostrar que Object Pascal todavía puede usarse para la investigación de PE y las tripas de Windows.
El núcleo de procesamiento de PE de NativePe es un port/reimplementación en Object Pascal de libpeconv de hasherezade.
El código fue reescrito en Object Pascal, pero la división del módulo central y muchas operaciones públicas, rutas de validación, decisiones de flujo de control, reglas de respaldo, diagnósticos y pruebas se derivaron del código fuente de libpeconv. NativePe, por lo tanto, no es una implementación limpia o diseñada de forma independiente de la funcionalidad de libpeconv que porta.
La revisión de libpeconv usada por el arnés diferencial actual es el commit 0fc25f680e03699d33ef3b2034a6724365f3d1a4.
Gracias a hasherezade por publicar libpeconv. Consulte docs/PROVENANCE.md para la relación a nivel de código fuente y THIRD-PARTY-NOTICES.md para avisos de atribución y licencia.
NativePe es más que una traducción de sintaxis de libpeconv. El proyecto actual añade funcionalidad específica de NativePe e integración con Delphi/Windows alrededor del núcleo portado.
Esto incluye resolución de API Set, proveedores de memoria WinAPI/NTAPI/llamada directa al sistema conectables, inicialización de security-cookie, ayudantes de reciclaje de PE y código de integración relacionado. Estas partes no tienen contraparte directa en el módulo fuente del núcleo de libpeconv fijado.
El repositorio también contiene proyectos de prueba Delphi específicos de NativePe, fixtures del mundo real, herramientas de corpus y pruebas de integración con Windows.
Más detalles en docs/FEATURES.md.
NativePe separa la lógica de PE de las operaciones de memoria del sistema operativo seleccionadas a través de TNativePeMemoryProvider.
Los backends integrados actuales son:
TWinApiMemoryProviderTNtApiMemoryProviderTSyscallMemoryProvider en Win64La ruta de hook existente también conserva su interruptor de compatibilidad opcional UseSyscalls para protección de memoria basada en llamadas directas al sistema.
Consulte docs/MEMORY-PROVIDERS.md.
NativePe usa varias capas de pruebas:
La ejecución diferencial documentada del 25 de septiembre de 2026 procesó 30.159 rutas de corpus idénticas con NativePe y el arnés de libpeconv fijado. A nivel de resultado, 30.147 rutas coincidieron y 12 difirieron. NativePe no registró caídas de workers en esa ejecución; el arnés de libpeconv registró seis. Estos resultados describen únicamente este corpus y estos arneses y no establecen una superioridad general.
La ejecución no fue una prueba de rendimiento con calidad de benchmark, por lo que sus datos de tiempo no se usan para afirmaciones de rendimiento. Los corpus externos y las muestras de malware no se distribuyen con NativePe.
Consulte docs/TESTING.md, docs/CORPUS-RESULTS.md y docs/LIBPECONV-COMPARISON.md.
NativePe se desarrolla con Delphi 12 Athens.
Abra NativePe.groupproj para compilar la demo incluida, las pruebas, el ejecutor de corpus, la herramienta de volcado de procesos y los proyectos de prueba del mundo real.
El código fuente de la biblioteca principal está en src. Los proyectos también pueden usar NativePe directamente añadiendo src a la ruta de búsqueda de unidades de Delphi y referenciando las unidades NativePe.* requeridas.
Tanto Win32 como Win64 son soportados por los proyectos incluidos.
El siguiente ejemplo mapea una imagen PE, aplica reubicaciones y resuelve importaciones. No llama al punto de entrada del PE.
program PeLoaderMinimal;
{$APPTYPE CONSOLE}
uses
System.SysUtils,
NativePe.BufferUtil,
NativePe.PeLoader;
var
Image: TAlignedBuf;
ImageSize: NativeUInt;
begin
if ParamCount <> 1 then
Halt(1);
Image := LoadPeExecutable(ParamStr(1), ImageSize);
if Image = nil then
Halt(1);
try
Writeln('Loaded at: 0x', IntToHex(NativeUInt(Image), SizeOf(Pointer) * 2));
Writeln('Virtual size: ', ImageSize);
finally
FreePeBuffer(Image, ImageSize);
end;
end.
Añada src a la ruta de búsqueda de unidades de Delphi y ejecute el programa con un archivo PE como su único argumento.
El repositorio contiene varios ejecutables y scripts auxiliares. Los puntos de entrada principales están documentados en docs/BINARIES.md.
Importante: NativePeDemo.exe carga y ejecuta el archivo PE proporcionado. Úselo solo con archivos de prueba de confianza. El ejecutor de corpus está diseñado para el procesamiento estático de PE y no ejecuta intencionalmente puntos de entrada de PE ni callbacks de TLS.