Check if ASLR is enabled
#3
فحص هيدر PE وتحقق من ASLR

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

unit uCheckASLR;

interface

uses
  Windows
;

function 
CheckASLR(const FileName: string): Boolean;

implementation

const
 
 IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE = $0040;
 
 IMAGE_DIRECTORY_ENTRY_BASERELOC = 5;

function 
CheckASLR(const FileName: string): Boolean;
var
 
 hFile: THandle;
 
 hMapping: DWORD;
 
 pMap: Pointer;
 
 dwSize: DWORD;
 
 IDH: PImageDosHeader;
 
 INH: PImageNtHeaders;
 
 ISH: PImageSectionHeader;
 
 n: Word;
 
 dwRelocAddr, dwRelocSize: DWORD;
begin
  Result 
:= False;
 
 hFile := CreateFile(PChar(FileName), GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
 
 if hFile <> INVALID_HANDLE_VALUE then
  begin
    dwSize 
:= GetFileSize(hFile, nil);
 
   hMapping := CreateFileMapping(hFile, nil, PAGE_READONLY, 0, dwSize, nil);
 
   if hMapping <> 0 then
    begin
      pMap 
:= MapViewOfFile(hMapping, FILE_MAP_READ, 0, 0, 0);
 
     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 <> 0) then
              begin
                for n 
:= 0 to INH.FileHeader.NumberOfSections - 1 do
 
               begin
                  if ISH
.VirtualAddress = dwRelocAddr then
                  begin
                    if 
(ISH.Misc.VirtualSize <> 0) and  (ISH.PointerToRawData <> 0) and (ISH.SizeOfRawData <> 0) then
                      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


الملفات المرفقة
.rar   ASLR Checker.rar (الحجم : 2.11 ك ب / التحميلات : 17)
سبحان الله وبحمده سبحان الله العظيم
[-] كل من 3 users say قال شكرا ل Agmcz على المشاركة المفيدة
  • محمد عبد العزيز, mobile, wadoud
الرد


الردود في هذا الموضوع
Check if ASLR is enabled - بواسطة Agmcz - 28-12-2017, 03:18 AM
RE: Check if ASLR is enabled - بواسطة مبرمج حر - 07-01-2018, 02:17 PM
RE: Check if ASLR is enabled - بواسطة Agmcz - 07-01-2018, 11:34 PM
RE: Check if ASLR is enabled - بواسطة Agmcz - 08-04-2018, 01:34 PM
RE: Check if ASLR is enabled - بواسطة Agmcz - 01-05-2018, 02:52 AM
RE: Check if ASLR is enabled - بواسطة Agmcz - 01-05-2018, 03:31 PM
RE: Check if ASLR is enabled - بواسطة Agmcz - 16-05-2018, 01:16 AM
RE: Check if ASLR is enabled - بواسطة Agmcz - 30-05-2018, 06:45 PM
RE: Check if ASLR is enabled - بواسطة Agmcz - 11-06-2018, 02:04 AM
RE: Check if ASLR is enabled - بواسطة AX302 - 11-06-2018, 05:11 AM
RE: Check if ASLR is enabled - بواسطة Agmcz - 11-06-2018, 05:22 AM
RE: Check if ASLR is enabled - بواسطة Agmcz - 05-10-2019, 12:40 AM

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم