Agmcz
(عضو بفريق مجلة دلفي للعرب)
******

تاريخ الإنتساب : 19-08-2010
تاريخ الميلاد : إخفاء تاريخ الميلاد
التوقيت المحلي : 25-09-2018 في 12:27 AM
الحالة :

Agmcz معلومات المنتدى
إنضم إلينا : 19-08-2010
آخر زيارة (مخفي)
إجمالي المشاركات : 580 (0.2 مشاركات في اليوم الواحد | 1.41 في المئة من إجمالي المشاركات)
(إيجاد مشاركات العضو)
اجمالي المواضيع : 31 (0.01 مواضيع في اليوم | 0.39 في المئه من اجمالي المواضيع)
(إيجاد مواضيع العضو)
فترة البقاء متصل : (مخفي)
الأعضاء المحالين: 0
Total Thanks Received: 128 (0.04 3.19 per day | 4012 percent of total 3.19)
(Find All Threads Thanked ForFind All Posts Thanked For)
Total Thanks Given: 78 (0.03 1.94 per day | 4027 percent of total 1.94)
(Find All Thanked ThreadsFind All Thanked Posts)

بيانات العضو Agmcz
مراسلة خاصة : أكتب لـ Agmcz رسالة خاصة .
  
معلومات إضافية عن Agmcz
Sex: Male

توقيع Agmcz
سبحان الله وبحمده سبحان الله العظيم

RE: Check if ASLR is enabled 3
Check if ASLR is enabled مصادر دلفي مفتوحة تعليمية
فحص هيدر PE وتحقق من ASLR

PHP كود :
{************************************
Coded by Agmcz                    *
Hints by naquadria                *
Date2018-01-07                  *
************************************}

unit uCheckASLR;

interface

uses
  Windows
;

function 
CheckASLR(const FileNamestring): Boolean;

implementation

const
 
 IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE = $0040;
 
 IMAGE_DIRECTORY_ENTRY_BASERELOC 5;

function 
CheckASLR(const FileNamestring): Boolean;
var
 
 hFileTHandle;
 
 hMappingDWORD;
 
 pMapPointer;
 
 dwSizeDWORD;
 
 IDHPImageDosHeader;
 
 INHPImageNtHeaders;
 
 ISHPImageSectionHeader;
 
 nWord;
 
 dwRelocAddrdwRelocSizeDWORD;
begin
  Result 
:= False;
 
 hFile := CreateFile(PChar(FileName), GENERIC_READFILE_SHARE_READ or FILE_SHARE_WRITEnilOPEN_EXISTING00);
 
 if hFile <> INVALID_HANDLE_VALUE then
  begin
    dwSize 
:= GetFileSize(hFilenil);
 
   hMapping := CreateFileMapping(hFilenilPAGE_READONLY0dwSizenil);
 
   if hMapping <> 0 then
    begin
      pMap 
:= MapViewOfFile(hMappingFILE_MAP_READ000);
 
     if pMap <> nil then
      begin
        IDH 
:= PImageDosHeader(pMap);
 
       if IDH.e_magic IMAGE_DOS_SIGNATURE then
        begin
          INH 
:= PImageNtHeaders(DWORD(pMap) + LongWord(IDH._lfanew));
 
         if INH.Signature IMAGE_NT_SIGNATURE then
          begin
            if 
(INH.OptionalHeader.DllCharacteristics and IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE) = IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE then
            begin
              ISH 
:= PImageSectionHeader(DWORD(pMap) + LongWord(IDH._lfanew) + SizeOf(DWORD) + SizeOf(INH.FileHeader) + INH.FileHeader.SizeOfOptionalHeader);
 
             dwRelocAddr := INH.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress;
 
             dwRelocSize := INH.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].Size;
 
             if (dwRelocAddr <> 0) and (dwRelocSize <> 0then
              begin
                for n 
:= 0 to INH.FileHeader.NumberOfSections do
 
               begin
                  if ISH
.VirtualAddress dwRelocAddr then
                  begin
                    if 
(ISH.Misc.VirtualSize <> 0) and  (ISH.PointerToRawData <> 0) and (ISH.SizeOfRawData <> 0then
                      Result 
:= True;
 
                   Break;
 
                 end;
 
                 Inc(ISH);
 
               end;
 
             end;
 
           end;
 
         end;
 
       end;
 
       UnmapViewOfFile(pMap);
 
     end;
 
     CloseHandle(hMapping);
 
   end;
 
   CloseHandle(hFile);
 
 end;
end;

end

(07-01-2018, 02:17 PM)مبرمج حر كتب : مشكوور اخي
لكن ما فائدتها ! ممكن مثال عملي
(مقتبس من حل تمرين chimera#01 من منتدى AT4RE)
هي نوع من أنواع الحماية قامت شركة مايكروسوفت بإضافتها في أنظمة التشغيل خاصتها منذ صدور نظام التشغيل فيستا كمحاولة لمنع التنبؤ بعناوين الذاكرة التي يتم فيها تحميل البرامج التنفيذية, هذه الطريقة كان هدفها جعل لودر نظام التشغيل يحمل البرنامج التنفيدي في عنوان عشوائي في كل يتم فيها تشغيله وعند إعادة التشغيل الجهاز.

يعني عند عدم تفعيل ASLR  يكون عنوان ImageBase ثابت موقعه
على غرار تفعيل والذي سيكون متغير.
ألق نظرة هنا
How can I enable DEP/NX and ASLR on a Delphi 2006 or earlier executable?
يتم إستعمال التوجيه SetPEOptFlags
كود :
//{$SetPEOptFlags $100} //to set the ASLR flag
//{$SetPEOptFlags $40} //to set the DEP flag
{$SetPEOptFlags $140} //to set both DEP + ASLR in one line