سؤال

شاهدت Aslred DLL العنوان القائم على الصور لعملية 32 بت.
إنه ليس عشوائيًا تمامًا. انها مجرد احتمال عشوائي 1/2.

على سبيل المثال ، بمجرد تحميل DLL ثم يتم تحميل الصورة 0x12345678.
وأنا أقوم بتحميل الصورة مرة أخرى ، يتم تحميل الصورة 0x23456789. (تم تغيير العنوان الأساسي!)
لكنني أقوم بتحميل الصورة مرة أخرى
0x12345678
0x23456789
0x12345678
0x23456789

...

لماذا قاموا بتنفيذ مثل هذا؟
هل هو لتردد تقرير تحطم؟ (للحصول على عناوين تحطم نفسها من DLLs إعادة نشرها)

هل كانت مفيدة؟

المحلول

هذا حسب التصميم. عادةً ، يقوم Windows بتحديد عنوان أساسي مفضل لـ ASLR DLL عند تحميل DLL لأول مرة ، ثم يستمر في استخدام هذا العنوان حتى يتم إعادة تشغيل النظام. وبهذه الطريقة ، سيتم تعيين DLL في نفس العنوان في كل عملية يتم تحميلها ، مما يسمح بمشاركة صفحات التعليمات البرمجية.

ومع ذلك ، إذا تم تفريغ DLL من كل عملية ، فقد يحدد النظام أحيانًا عنوان قاعدة مختلف في المرة التالية التي يتم فيها تحميل DLL. يقوم بذلك لتقليل تجزئة مساحة العنوان الظاهري ، وليس لأسباب أمنية. هذا ما يبدو أنه يحدث في قضيتك.

نصائح أخرى

تم توثيقه على أنه في واحدة من 1 من 256 عناوين البداية الممكنة.

لكنني لم أكن أعتقد أنها تنطبق على عملية ، ولكن لمشاركة DLL.

ASLR: ليس بشكل افتراضي لصور العملية. إنه شيء ما ، من أجل التوافق. (3)

العنوان تخطيط الفضاء العشوائي (ASLR)

يقوم ASLR بنقل الصور القابلة للتنفيذ إلى مواقع عشوائية عندما يقوم النظام بتمهيد ، مما يجعل من الصعب على رمز الاستغلال أن يعمل بشكل متوقع. بالنسبة للمكون لدعم ASLR ، يجب أن تدعم جميع المكونات التي يتم تحميلها أيضًا ASLR. على سبيل المثال ، إذا كان A.Exe يستهلك B.DLL و C.DLL ، فيجب على الثلاثة دعم ASLR. بشكل افتراضي ، ستعمل Windows Vista وبعد ذلك على عشوائي DLLs و Exes ، ولكن يجب أن تختار DLLs و Exes التي تم إنشاؤها بواسطة ISVs لدعم ASLR باستخدام خيار رابط /DynamicBase.

تقوم ASLR أيضًا بعشوائية الكومة وذاكرة المكدس:

  • عندما ينشئ التطبيق كومة في Windows Vista وبعد ذلك ، سيقوم مدير Heap بإنشاء هذا الكومة في موقع عشوائي للمساعدة في تقليل فرصة تنجح محاولة استغلال تخطي عازلة قائمة على الكومة. يتم تمكين التوزيع العشوائي للكومة افتراضيًا لجميع التطبيقات التي تعمل على Windows Vista ثم لاحقًا.

  • عندما يبدأ مؤشر ترابط في عملية مرتبطة بـ /DynamicBase ، يقوم Windows Vista ثم بنقل مكدس مؤشر الترابط إلى موقع عشوائي للمساعدة في تقليل فرصة تنجح استغلال تجاوز المخزن المؤقت القائم على المكدس.

قام بتثبيت Win8 RC X64 الجديد أمس.

احذر!

kernel32.dll (إصدار 64 بت) لها عنوان أساسي مختلف في عمليات مختلفة (في جلسة واحدة ، بالطبع). فقط NTDLL.DLL BASE عنوان لا يزال ثابتا. اضطررت إلى تغيير الكود ، لم يعد بإمكانك الاعتماد على مكتبة التحميل الدائمة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top