Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.01.01;
Скачать: CL | DM;

Вниз

ASLR - проблема в Delphi или Windows?   Найти похожие ветки 

 
ProgRAMmer Dimonych ©   (2011-09-15 12:54) [0]

Пытаюсь скомпилировать приложение, которое бы каждый раз загружалось по разным адресам. Прописал

{$DYNAMICBASE ON}

Флаг ASLR в EXEшнике выставляется. Секция .reloc тоже имеется какая-никакая. Но при каждом запуске hInstance оказывается равным $00400000. Я что-то неправильно понимаю касательно ASLR или стоит заглянуть в какие-нибудь ещё настройки?

Delphi 2010, Windows 7 x64


 
CRLF   (2011-09-15 14:54) [1]

Process Explorer для скомпиленного таким образом экзешника выдаёт: "Adress space load randomization: Disabled".


 
han_malign   (2011-09-16 09:33) [2]

потому что некоторые размеро-фобы(включая MS) режут из PE для EXE Relocation таблицу...


 
ProgRAMmer Dimonych ©   (2011-09-16 10:05) [3]

> [1] CRLF   (15.09.11 14:54)
> Process Explorer для скомпиленного таким образом экзешника
> выдаёт: "Adress space load randomization: Disabled".

Самое противное - что у меня как раз-таки пишет "Enabled". Но ImageBase остаётся стандартным и ужасно равным прописанному в заголовке.


> [2] han_malign   (16.09.11 09:33)
> потому что некоторые размеро-фобы(включая MS) режут из PE
> для EXE Relocation таблицу...

Релоки в моём EXEшнике есть, секция почти 64 КБ в длину и в PE Explorer"е отчётливо видно минимум 170 релоков, в основном для секции .text

-----

Так можно ли как-нибудь заставить загрузчик помещать всё-таки программу по условно-рандомному адресу? Или я неправильно понял идею ASLR?


 
han_malign   (2011-09-16 13:05) [4]

For a component to support ASLR, all components that it loads must also support ASLR. For example, if A.exe consumes B.dll and C.dll, all three must support ASLR.


 
ProgRAMmer Dimonych ©   (2011-09-16 13:23) [5]

> [4] han_malign   (16.09.11 13:05)
> For a component to support ASLR, all components that it
> loads must also support ASLR. For example, if A.exe consumes
> B.dll and C.dll, all three must support ASLR.

Это видел. Но вот в чём загвоздка: приложение не юзает ничего нестандартного (специально тестовое набросал, чтобы исключить влияние посторонних факторов). Более того, для пущей уверенности набросал минимальное приложение на FASM, импортирующее только GetModuleHandleW (kernel32.dll), MessageBoxW и wsprintfW (user32.dll) - тоже всегда грузит по одному и тому же адресу :( Флаг ASLR проверил самолично - на месте.


 
Игорь Шевченко ©   (2011-09-16 13:30) [6]

kernel32.dll, user32.dll - они не support нифига


 
sniknik ©   (2011-09-16 13:40) [7]

http://decker.no-ip.org/forum/index.php?showtopic=26342
> началась с того, что я поставил SP1 для Windows 7 ... и сразу же заметил работу этого ASLR ...
а до этого не работало.

???


 
ProgRAMmer Dimonych ©   (2011-09-16 14:04) [8]

> [7] sniknik ©   (16.09.11 13:40)
> http://decker.no-ip.org/forum/index.php?showtopic=26342
> > началась с того, что я поставил SP1 для Windows 7 ...
> и сразу же заметил работу этого ASLR ...
> а до этого не работало.
>
> ???


Хм, а вполне возможно. Следов установки SP1 не обнаружил.

Но ведь ASLR же, кажется, ещё с Висты тянется. Есть какая-нибудь возможность заставить Семёрку использовать ASLR без установки SP1?


> [6] Игорь Шевченко ©   (16.09.11 13:30)
> kernel32.dll, user32.dll - они не support нифига


Но ведь тогда автоматически весь софт не support?


 
Игорь Шевченко ©   (2011-09-16 15:05) [9]


> Но ведь тогда автоматически весь софт не support?


почему ? есть программы, которым эти DLL не нужны, наверное.

Я правда не понимаю, нафиг эта возможность вообще существует и какой от нее практический смысл, потому что DLL все равно перебазируются при загрузке, если их предпочтительный адрес занят.


 
DVM ©   (2011-09-16 15:15) [10]


> Игорь Шевченко ©   (16.09.11 15:05) [9]


> почему ? есть программы, которым эти DLL не нужны, наверное.

Я сталкивался с тем, что если в программе нет ни одного вызова WinApi то она системой вообще не считается за программу. Ругается.


 
Игорь Шевченко ©   (2011-09-16 16:36) [11]

DVM ©   (16.09.11 15:15) [10]

.386
.model flat, stdcall

.code
main:
ret
end main


не ругается


 
Inovet ©   (2011-09-16 16:52) [12]

> [10] DVM ©   (16.09.11 15:15)
> если в программе нет ни одного вызова WinApi

Интересно, что такая программа может практически полезного делать.


 
Игорь Шевченко ©   (2011-09-16 16:54) [13]

Inovet ©   (16.09.11 16:52) [12]

Диски, например, при запуске системы проверять


 
Inovet ©   (2011-09-16 17:00) [14]

> [13] Игорь Шевченко ©   (16.09.11 16:54)
> Диски, например, при запуске системы проверять

Имеется ввиду запуск в системе а не до неё, а диски возможно проверять без вызовов АПИ?


 
Игорь Шевченко ©   (2011-09-16 17:06) [15]

Inovet ©   (16.09.11 17:00) [14]

Программа autochk.exe не использует ни одной функции из kernel32.dll, user32.dll и т.п., тех, которые реализуют WinAPI


 
RTFM   (2011-09-18 10:54) [16]

>>> kernel32.dll, user32.dll - они не support нифига

Бред.

http://blogs.msdn.com/b/michael_howard/archive/2006/05/26/address-space-layout-randomization-in-windows-vista.aspx

Vista:
1. kernel32.dll (0x77c10000)
2. kernel32.dll (0x77350000)


 
Игорь Шевченко ©   (2011-09-18 11:22) [17]

RTFM   (18.09.11 10:54) [16]


> Бред.


Может быть. Исходил из того, что
"system DLLs were carefully based to avoid relocations and bound to speed up loading"


 
ProgRAMmer Dimonych ©   (2011-09-19 09:38) [18]

> [9] Игорь Шевченко ©   (16.09.11 15:05)
> Я правда не понимаю, нафиг эта возможность вообще существует
> и какой от нее практический смысл, потому что DLL все равно
> перебазируются при загрузке, если их предпочтительный адрес
> занят.

Вроде как считается круто для защиты от переполнения буфера. Для Delphi-софта эта проблема как-то не так актуальна, конечно, но зато из-за ASLR могут возникать проблемы, если нужно работать с ImageBase"ами и структурой PE-файла (защита всякая).


 
ProgRAMmer Dimonych ©   (2011-09-19 09:41) [19]

> [10] DVM ©   (16.09.11 15:15)
> Я сталкивался с тем, что если в программе нет ни одного
> вызова WinApi то она системой вообще не считается за программу.
> Ругается.

С таблицей импорта не сталкивался, а вот под XP SP2 случалось видеть такое поведение, если у программы была пустой секция данных.



Страницы: 1 вся ветка

Текущий архив: 2012.01.01;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.008 c
15-1316145972
vajo
2011-09-16 08:06
2012.01.01
Win XP. Проблема входа в систему.


2-1316502373
i2e
2011-09-20 11:06
2012.01.01
ShortString - max 255 символов. А String?


3-1269469439
adigozelov
2010-03-25 01:23
2012.01.01
TNT+ADO


6-1249372147
Ливр
2009-08-04 11:49
2012.01.01
проблема: в Webbrowser е проблемы с вводом с клавиатуры


2-1316988773
Krema
2011-09-26 02:12
2012.01.01
Иероглифы в справке