
مُحمِّل يدوي لملفات PE يعمل على Windows ومبني بلغة Rust، يقوم بتعيين وتنفيذ ملفات قابلة للتنفيذ (x86/x64) من الذاكرة، مُظهرًا سلوك المُحمِّل الداخلي وهيكل PE لأغراض البحث التعليمي.
تطبيق Rust PE Loader / Manual Mapping
IronPE هو محمّل PE يدوي بأقل قدر من الوظائف مكتوب بلغة Rust لكل من ملفات PE ذات بنية x86 و x64.
هذا المشروع هو إعادة تنفيذ بلغة Rust لمشروعي السابق dotNetPELoader، الذي كان يطبق محمّل PE يدوي بلغة C#.
الهدف من IronPE هو استكشاف كيفية تحميل Windows للملفات التنفيذية المحمولة (PE) داخليًا، وإظهار كيف يمكن تنفيذ هذه العملية بلغة Rust.
وووواههههه!
إذا وجدت هذا المشروع مفيدًا أو تعليميًا، فأنا أقدر لك ⭐!
هذا المشروع مخصص لـ الأغراض التعليمية والبحثية فقط.
صُمم للمساعدة في فهم:
هذا المشروع مستوحى من تطبيقي السابق:
في ذلك المشروع، قمت بتنفيذ محمّل PE باستخدام .NET و WinAPI.
يعيد IronPE كتابة نفس المفهوم بلغة Rust، والتي توفر أمانًا أفضل للذاكرة مع السماح بالوصول لواجهات Windows API منخفضة المستوى.
الغرض من هذا المشروع تعليمي، لفهم أفضل لـ:
يقوم IronPE بالخطوات التالية لتنفيذ ملف PE من الذاكرة:
VirtualAllocLoadLibrary وGetProcAddressتحاكي هذه العملية سلوك محمّل PE الخاص بـ Windows.
لا يمكن تحميل PE من بنية x64 بواسطة محمّل x86، والعكس صحيح.
المتطلبات:
cargo, rustc)بناء المشروع:
cd IronPE
build.bat
IronPE.exe --coffee
IronPE.exe --x86 <x86_pe_file>
IronPE.exe --x64 <x64_pe_file>
مثال:
IronPE.exe --x86 Win32\mimikatz.exe
IronPE.exe --x64 x64\mimikatz.exe