
DLL sideloading/proxying with Nim!
يتيح لك هذا المستودع إنشاء ملفات Nim DLL بسهولة لاستخدامها في التحميل الجانبي/التحميل عبر البروكسي. إذا لم تكن على دراية بمفهوم التحميل الجانبي لـ DLL، ألقِ نظرة على هذه التدوينة.
ضع ملف DLL الأصلي (أو عدة ملفات DLL) الذي تريد تمرير الاستدعاءات عبره في مجلد build بهذا المستودع ثم نفّذ الأمر make.
سيؤدي هذا إلى إنشاء ملفّي .dll في مجلد out:
إذا نجح التحميل الجانبي، يجب أن تظهر نافذة رسالة منبثقة و/أو يتم إنشاء ملف على سطح المكتب.
لتسليح الحمولة فعليًا، يمكنك إلقاء نظرة على مستودع OffensiveNim للحصول على أفكار ومقتطفات برمجية جاهزة للاستخدام :).
dllproxy.nim هو ملف DLL الوسيط الذي سينفّذ حمولتك ويُمرّر استدعاءات الدوال الأصلية إلى ملفات DLL الأصليةgen_def.py يحلّل جدول صادرات ملف DLL الأصلي وينشئ ملف تعريف الوحدة (.def).ثم يتم تمرير ملف .def إلى الرابط (linker) في وقت الترجمة من أجل تمرير استدعاءات الدوال الأصلية.
NimMain من جدول صادرات ملف Nim DLLانظر مقالة Microsoft
لاحظ السطر الأخير في ملف .def هذا:
EXPORTS
GetFileVersionInfoA=ZCnerzNI.GetFileVersionInfoA @1
GetFileVersionInfoByHandle=ZCnerzNI.GetFileVersionInfoByHandle @2
GetFileVersionInfoExA=ZCnerzNI.GetFileVersionInfoExA @3
GetFileVersionInfoExW=ZCnerzNI.GetFileVersionInfoExW @4
GetFileVersionInfoSizeA=ZCnerzNI.GetFileVersionInfoSizeA @5
GetFileVersionInfoSizeExA=ZCnerzNI.GetFileVersionInfoSizeExA @6
GetFileVersionInfoSizeExW=ZCnerzNI.GetFileVersionInfoSizeExW @7
GetFileVersionInfoSizeW=ZCnerzNI.GetFileVersionInfoSizeW @8
GetFileVersionInfoW=ZCnerzNI.GetFileVersionInfoW @9
VerFindFileA=ZCnerzNI.VerFindFileA @10
VerFindFileW=ZCnerzNI.VerFindFileW @11
VerInstallFileA=ZCnerzNI.VerInstallFileA @12
VerInstallFileW=ZCnerzNI.VerInstallFileW @13
VerLanguageNameA=ZCnerzNI.VerLanguageNameA @14
VerLanguageNameW=ZCnerzNI.VerLanguageNameW @15
VerQueryValueA=ZCnerzNI.VerQueryValueA @16
VerQueryValueW=ZCnerzNI.VerQueryValueW @17
NimMain @19 NONAME PRIVATE
يخبر هذا السطر الأخير الرابط أساسًا بإزالة اسم دالة NimMain. يؤدي تجميع ملف DLL وتمرير ملف .def أعلاه إلى الرابط إلى ظهور الإدخال التالي عند الاطلاع على جدول صادرات .dll:
