
Object Pascal (Delphi) 라이브러리로, 재배치, 임포트, TLS 및 원격 프로세스 메모리 읽기를 포함한 Windows PE 파일의 파싱, 매핑, 로딩 및 덤핑을 지원합니다.
NativePe는 Delphi용 Object Pascal로 작성된 Windows Portable Executable 라이브러리입니다.
이 프로젝트는 PE 파싱, 매핑, 로딩, 재배치, 임포트 및 익스포트 처리, 덤핑, 프로세스 메모리 읽기, 그리고 관련 Windows 내부 구조에 중점을 둡니다. 동일한 소스 트리에서 Win32 및 Win64 빌드를 지원합니다.
NativePe는 연구 프로젝트입니다. 정상적이거나, 특이하거나, 손상되었거나, 악의적인 대규모 PE 파일 집합에 대해 테스트되었지만, 모든 가능한 PE 파일을 올바르게 처리한다고 주장하지는 않습니다.
동기 중 일부는 개인적인 것입니다. 2000년대 초반에 Delphi를 사용했었고, 현대적인 Delphi로 저수준 Windows 개발을 다시 다루고 싶었습니다.
NativePe는 또한 Object Pascal이 여전히 PE 및 Windows 내부 구조 연구에 사용될 수 있음을 보여주기 위한 실용적인 실험이기도 합니다.
NativePe의 PE 처리 코어는 hasherezade의 libpeconv를 Object Pascal로 포팅/재구현한 것입니다.
코드는 Object Pascal로 다시 작성되었지만, 핵심 모듈 분할과 많은 공개 연산, 검증 경로, 제어 흐름 결정, 폴백 규칙, 진단, 테스트는 libpeconv 소스에서 파생되었습니다. 따라서 NativePe는 포팅한 libpeconv 기능에 대한 클린룸 또는 독립적으로 설계된 구현이 아닙니다.
현재 차분 하네스에서 사용하는 libpeconv 리비전은 커밋 0fc25f680e03699d33ef3b2034a6724365f3d1a4입니다.
libpeconv를 공개한 hasherezade에게 감사드립니다. 소스 수준의 관계는 docs/PROVENANCE.md를, 저작자 표시 및 라이선스 고지는 THIRD-PARTY-NOTICES.md를 참조하십시오.
NativePe는 libpeconv의 단순한 구문 변환 그 이상입니다. 현재 프로젝트는 포팅된 코어 주변에 NativePe 특유의 기능과 Delphi/Windows 통합을 추가합니다.
여기에는 API Set 해석, 플러그 가능한 WinAPI/NTAPI/직접 시스템 콜 메모리 프로바이더, 보안 쿠키 초기화, PE 재활용 헬퍼, 그리고 관련 통합 코드가 포함됩니다. 이러한 부분은 고정된 libpeconv 코어에 직접적인 소스 모듈 대응물이 없습니다.
저장소에는 NativePe 특유의 Delphi 테스트 프로젝트, 실제 환경 픽스처, 코퍼스 도구, 그리고 Windows 통합 테스트도 포함되어 있습니다.
자세한 내용은 docs/FEATURES.md에 있습니다.
NativePe는 TNativePeMemoryProvider를 통해 PE 로직과 선택된 운영 체제 메모리 연산을 분리합니다.
현재 내장된 백엔드는 다음과 같습니다:
TWinApiMemoryProviderTNtApiMemoryProviderTSyscallMemoryProvider기존 훅 경로는 직접 시스템 콜 기반 메모리 보호를 위한 선택적 UseSyscalls 호환 스위치도 유지합니다.
docs/MEMORY-PROVIDERS.md를 참조하십시오.
NativePe는 여러 테스트 계층을 사용합니다:
2026년 9월 25일에 문서화된 차분 실행은 NativePe와 고정된 libpeconv 하네스로 30,159개의 동일한 코퍼스 경로를 처리했습니다. 결과 수준에서 30,147개의 경로가 일치했고 12개가 달랐습니다. 해당 실행에서 NativePe는 워커 충돌을 기록하지 않았고, libpeconv 하네스는 6건을 기록했습니다. 이 결과는 이 코퍼스와 이 하네스만을 설명하며 일반적인 우월성을 입증하지 않습니다.
이 실행은 벤치마크 품질의 성능 실행이 아니므로, 타이밍 데이터는 성능 주장에 사용되지 않습니다. 외부 코퍼스와 악성코드 샘플은 NativePe와 함께 배포되지 않습니다.
docs/TESTING.md, docs/CORPUS-RESULTS.md, docs/LIBPECONV-COMPARISON.md를 참조하십시오.
NativePe는 Delphi 12 Athens로 개발되었습니다.
NativePe.groupproj를 열어 포함된 데모, 테스트, 코퍼스 러너, 프로세스 덤프 도구, 실제 환경 테스트 프로젝트를 빌드하십시오.
주요 라이브러리 소스는 src 아래에 있습니다. 프로젝트는 Delphi 유닛 검색 경로에 src를 추가하고 필요한 NativePe.* 유닛을 참조하여 NativePe를 직접 사용할 수도 있습니다.
포함된 프로젝트는 Win32와 Win64를 모두 지원합니다.
다음 예제는 PE 이미지를 매핑하고, 재배치를 적용하고, 임포트를 해석합니다. 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.
Delphi 유닛 검색 경로에 src를 추가하고 PE 파일을 유일한 인수로 하여 프로그램을 실행하십시오.
저장소에는 여러 실행 파일과 헬퍼 스크립트가 포함되어 있습니다. 주요 진입점은 docs/BINARIES.md에 문서화되어 있습니다.
중요: NativePeDemo.exe는 제공된 PE 파일을 로드하고 실행합니다. 신뢰할 수 있는 테스트 파일에만 사용하십시오. 코퍼스 러너는 정적 PE 처리를 위해 설계되었으며 PE 진입점이나 TLS 콜백을 의도적으로 실행하지 않습니다.
NativePe는 연구 및 테스트 프로젝트로 활발히 사용되고 있습니다. 새로운 PE 엣지 케이스가 발견됨에 따라 API와 구현 세부 사항은 여전히 변경될 수 있습니다.
광범위한 테스트는 위험을 줄이지만 완전한 정확성의 증명은 아닙니다. 신뢰할 수 없는 PE 파일은 신뢰할 수 없는 입력으로 취급하고, 악성코드를 다룰 때는 적절한 격리를 사용하십시오.
NativePe의 독자적인 기여는 MIT License에 따라 공개됩니다.
제3자 프로젝트에서 파생된 코드는 THIRD-PARTY-NOTICES.md에 설명된 해당 업스트림 고지 및 라이선스 조건을 유지합니다.