Check if ASLR is enabled
#3
فحص هيدر 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


الملفات المرفقة
.rar   ASLR Checker.rar (الحجم : 2.11 ك ب / التحميلات : 14)
سبحان الله وبحمده سبحان الله العظيم
[-] كل من 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 ) ضيف كريم