Форум: "Прочее";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];
ВнизЧто есть Виста Найти похожие ветки
← →
TUser © (2006-10-19 20:34) [40]
> для разработчиков, особенно программ администрирования,
> разработчики Висты очень много свиней подложили :-)
А именно? Я не вникал, но реклама вроде обещала кучу вкусностей. ВинФС, дот нет форева и прочее.
← →
Eraser © (2006-10-19 20:47) [41]> [40] TUser © (19.10.06 20:34)
запретили интерактивные сервисы (с т.з. безопасности это правильно в общем то..), убрали GINA, убрали winlogon notification packages.
как теперь добраться до logon-экрана, особенно когда не один юзер не залогинен - понятия не имею.
← →
TUser © (2006-10-19 21:37) [42]> как теперь добраться до logon-экрана, особенно когда не один юзер не залогинен - понятия не имею.
А нафига?
← →
Rouse_ © (2006-10-19 22:43) [43]Ребят, рассуждаете как пользователи, а сайт-то все-же для программистов.
Меня более всего беспокоит запрет исполнения кода из секции данных, на который наложено ограничение в висте, а также запрет работы неподписанных драйверов кроме как в незащищенном режиме, которого быть не должно при нормальном старте системы. Беспокоит наличие привелегированного режима работы приложения, который включается при наличии цифровой подписи Microsoft, бо если моей служебной утилите захотелось спрочитать что-то из АП моего рутового процесса, который она обязана обслуживать, данная утилита получит дуплетом по всем выпирающим органам как ведущяя себя неподобающим образом...
Вот это меня беспокоит, а не память, видюха и остальная мишура...
← →
Eraser © (2006-10-19 23:17) [44]> [42] TUser © (19.10.06 21:37)
для программы удаленного администрирования, к примеру )
> [43] Rouse_ © (19.10.06 22:43)
да, точно не разбирался, но по-моему обычные приложения, даже под аккаунтом админа, выполняются по-моему с урезаными привелегиями и не хило restricted токеном... :( пока в свойствах не поставишь галочку "Run as admin" - отказывается признавать, что текущий юзер - админ. Намудрили там, разбираться надо, а ни литературы, ни внятных публикаций от MS пока что нету :(
← →
Petr V.Abramov (2006-10-19 23:20) [45]> Rouse_ © (19.10.06 22:43) [43]
> Меня более всего беспокоит запрет исполнения кода из секции данных,
так это в 2003 есть. И это, вообще говоря, должно было быть в любой ОС, работающей на проце начиная с 386. Защищает от "ошибки переполнения буфера"
> если моей служебной утилите захотелось спрочитать что-то из АП моего
> рутового процесса, который она обязана обслуживать, данная утилита
> получит дуплетом
а как помнится, люди ругались, когда из-под доса на win переходили... это не тронь, сюда не нажимай.
Все эти фичи аппаратно поддерживаются начиная с i386
← →
Rouse_ © (2006-10-20 00:02) [46]
> > Меня более всего беспокоит запрет исполнения кода из секции
> данных,
> так это в 2003 есть. И это, вообще говоря, должно было
> быть в любой ОС, работающей на проце начиная с 386. Защищает
> от "ошибки переполнения буфера"
Петрух, пффф...
Переполнение буффера и исполнение кода из сеции данных это абсолютно разные вещи. Переполнение стороиться на отсутствие проверок в С++ в момент доступа к той или иной области памяти, к примеру: (один из вариантов) на несовершенстве механизма SEH, когда вместо финализации происходит вызов кода расположенногло в стеке из-за того что секция SEH Фреймов была затерта или самое простое - адрес возврата в стеке поменялся...
А исполнение кода расположенного в секции данных - это обычный трик с call-ом с некоторыми пермутациями, который начиная в ХР SP2 вполне возможно может быть был отключен технологией Data Execution Protection, которая почемуто не совсем работает :)
← →
Petr V.Abramov (2006-10-20 00:45) [47]> Rouse_ © (20.10.06 00:02) [46]
не...
как к стеку-то доступ получется? не в стеке же строки в C++ хранятся?
← →
Rouse_ © (2006-10-20 00:50) [48]в стеке лежат SEH фреймы :)
← →
Германн © (2006-10-20 00:53) [49]Скорее всего меня никто не поймёт тут. :-(
Но ещё раз повторюсь - "хорошую вещь Вистой не назовут!" :-)
Сколько крови у меня выпила та Виста, котор(ую)ая (я имею в виду) имеет меня уже более 10 лет! :-)
← →
Petr V.Abramov (2006-10-20 00:55) [50]> Rouse_ © (20.10.06 00:50) [48]
ну и пусть лежат :) переполнение-то начинается с сегмента данных. редко бывают локальные, лежащие в стеке, переменнные, которые можно переполнить.
зайдм с другой стороны. DEP для понтов сделали или для чего-то?
← →
Eraser © (2006-10-20 01:04) [51]> [47] Petr V.Abramov (20.10.06 00:45)
хех, с пом. переполнения стека, либо еще
есть разновидность занижения размера буффера на 1 :)
самый простой вариант - когда используется статический буффер для строки типаchar buf[10]
для ввода данных исп. ф-я strcpy, а размер вводимых данных не проверяется, т.о. можно загадить стек только так )) ну эт конечно простейший вариант.
хорошо подобные уязвимости описаны у Ховарда "Безопасный код".
← →
vuk © (2006-10-20 01:06) [52]to Rouse_:
> если моей служебной утилите захотелось спрочитать что-то из АП моего
> рутового процесса, который она обязана обслуживать, данная утилита
> получит дуплетом
А менее перректално сделать обмен данными не судьба? :)
>А исполнение кода расположенного в секции данных - это обычный трик с
>call-ом с некоторыми пермутациями
Это вроде как получается, что все VCL-ное пойдет псу под хвост?
← →
Rouse_ © (2006-10-20 01:08) [53]Удалено модератором
← →
Petr V.Abramov (2006-10-20 01:08) [54]> используется статический буффер для строки типа
в смысле char buf[10] - локальный? тогда да
но кто ж несколько сот байт локально объявит? или на то расчет и срабатывает??? тады....
← →
Суслик © (2006-10-20 01:09) [55]ответ на сабж
женский пол от ВИСТ
...
картежное что-то, я думаю.
← →
Gero © (2006-10-20 01:10) [56]> [55] Суслик © (20.10.06 01:09)
http://www.google.com/search?q=%D0%92%D0%B8%D1%81%D1%82%D0%B0
← →
Gero © (2006-10-20 01:11) [57]http://www.vista.com.ua/
← →
Rouse_ © (2006-10-20 01:12) [58]Удалено модератором
← →
Eraser © (2006-10-20 01:15) [59]> [54] Petr V.Abramov (20.10.06 01:08)
ну да, это только если локальный, говорят в ранних масдайных версиях винды часто практиковали char buf[255] подобными конструкциями )
а вот если буффер в динамической памяти - тады нада переполнять кучу.
вот примерчик http://www.w00w00.org/files/articles/heaptut.txt и опять же Ховард хорошо объясняет )
← →
vuk © (2006-10-20 01:16) [60]Удалено модератором
← →
Petr V.Abramov (2006-10-20 01:17) [61]> Rouse_ © (20.10.06 01:08) [53]
сам такой. ну говорил. ну может, и не всегда работает. ну к стеку и DS как относится?
у i386 есть сегменты данных, кода и стека, это аппаратный факт. Win это использует не полной, это тоже факт, где-то мной читаемый. DEP -попытка исправить сию родовую травму.
в [47]-то я где неправ?
← →
Rouse_ © (2006-10-20 01:27) [62]
> До какой степени? :)
98 SE - NT 2003
> Если вспомнить, как из метода объекта оконная процедура
> получается, то все может статься...
Ух ты :) Мы вообще-то о разных АП говорим, где у объектов (в общем понимании) еще не существует методов :) Не про VCL...
← →
Rouse_ © (2006-10-20 01:29) [63]
> в [47]-то я где неправ?
Как приеду - посидим, пиво попьем у меня дома - покажу :)
← →
vuk © (2006-10-20 01:33) [64]to Rouse_ © (20.10.06 01:27) [62]:
>98 SE - NT 2003
COM не подойдет? :)
>Мы вообще-то о разных АП говорим
АП ни при чем. Я про запрет выполнения кода. см AllocateHWND в исходниках VCL.
← →
Rouse_ © (2006-10-20 01:34) [65]
> COM не подойдет? :)
СОМ не моя специфика...
А AllocateHWND уже научилась из секции данных выполняться? :)
← →
vuk © (2006-10-20 01:41) [66]
const
InstanceCount = 313;
{ Object instance management }
type
PObjectInstance = ^TObjectInstance;
TObjectInstance = packed record
Code: Byte;
Offset: Integer;
case Integer of
0: (Next: PObjectInstance);
1: (Method: TWndMethod);
end;
type
PInstanceBlock = ^TInstanceBlock;
TInstanceBlock = packed record
Next: PInstanceBlock;
Code: array[1..2] of Byte;
WndProcPtr: Pointer;
Instances: array[0..InstanceCount] of TObjectInstance;
end;
var
InstBlockList: PInstanceBlock;
InstFreeList: PObjectInstance;
{ Standard window procedure }
{ In ECX = Address of method pointer }
{ Out EAX = Result }
function StdWndProc(Window: HWND; Message, WParam: Longint;
LParam: Longint): Longint; stdcall; assembler;
asm
XOR EAX,EAX
PUSH EAX
PUSH LParam
PUSH WParam
PUSH Message
MOV EDX,ESP
MOV EAX,[ECX].Longint[4]
CALL [ECX].Pointer
ADD ESP,12
POP EAX
end;
{ Allocate an object instance }
function CalcJmpOffset(Src, Dest: Pointer): Longint;
begin
Result := Longint(Dest) - (Longint(Src) + 5);
end;
function MakeObjectInstance(Method: TWndMethod): Pointer;
const
BlockCode: array[1..2] of Byte = (
$59, { POP ECX }
$E9); { JMP StdWndProc }
PageSize = 4096;
var
Block: PInstanceBlock;
Instance: PObjectInstance;
begin
if InstFreeList = nil then
begin
Block := VirtualAlloc(nil, PageSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
Block^.Next := InstBlockList;
Move(BlockCode, Block^.Code, SizeOf(BlockCode));
Block^.WndProcPtr := Pointer(CalcJmpOffset(@Block^.Code[2], @StdWndProc));
Instance := @Block^.Instances;
repeat
Instance^.Code := $E8; { CALL NEAR PTR Offset }
Instance^.Offset := CalcJmpOffset(Instance, @Block^.Code);
Instance^.Next := InstFreeList;
InstFreeList := Instance;
Inc(Longint(Instance), SizeOf(TObjectInstance));
until Longint(Instance) - Longint(Block) >= SizeOf(TInstanceBlock);
InstBlockList := Block;
end;
Result := InstFreeList;
Instance := InstFreeList;
InstFreeList := Instance^.Next;
Instance^.Method := Method;
end;
{ Free an object instance }
procedure FreeObjectInstance(ObjectInstance: Pointer);
begin
if ObjectInstance <> nil then
begin
PObjectInstance(ObjectInstance)^.Next := InstFreeList;
InstFreeList := ObjectInstance;
end;
end;
var
UtilWindowClass: TWndClass = (
style: 0;
lpfnWndProc: @DefWindowProc;
cbClsExtra: 0;
cbWndExtra: 0;
hInstance: 0;
hIcon: 0;
hCursor: 0;
hbrBackground: 0;
lpszMenuName: nil;
lpszClassName: "TPUtilWindow");
function AllocateHWnd(Method: TWndMethod): HWND;
var
TempClass: TWndClass;
ClassRegistered: Boolean;
begin
UtilWindowClass.hInstance := HInstance;
{$IFDEF PIC}
UtilWindowClass.lpfnWndProc := @DefWindowProc;
{$ENDIF}
ClassRegistered := GetClassInfo(HInstance, UtilWindowClass.lpszClassName,
TempClass);
if not ClassRegistered or (TempClass.lpfnWndProc <> @DefWindowProc) then
begin
if ClassRegistered then
Windows.UnregisterClass(UtilWindowClass.lpszClassName, HInstance);
Windows.RegisterClass(UtilWindowClass);
end;
Result := CreateWindowEx(WS_EX_TOOLWINDOW, UtilWindowClass.lpszClassName,
"", WS_POPUP {!0}, 0, 0, 0, 0, 0, 0, HInstance, nil);
if Assigned(Method) then
SetWindowLong(Result, GWL_WNDPROC, Longint(MakeObjectInstance(Method)));
end;
procedure DeallocateHWnd(Wnd: HWND);
var
Instance: Pointer;
begin
Instance := Pointer(GetWindowLong(Wnd, GWL_WNDPROC));
DestroyWindow(Wnd);
if Instance <> @DefWindowProc then FreeObjectInstance(Instance);
end;
← →
Rouse_ © (2006-10-20 01:48) [67]хм.. и где собственно оно?
← →
vuk © (2006-10-20 01:50) [68]MakeObjectInstance что делает по-твоему?
← →
vuk © (2006-10-20 01:55) [69]Хотя.... MS пишет, что при таких флагах все должнго быть нормально.
← →
Rouse_ © (2006-10-20 02:01) [70]ща погодь, я под IDA дебажу... сек проверим...
← →
Rouse_ © (2006-10-20 02:16) [71]Да не.. даже не пахнет :)
kernel32.dll:7C809A81 kernel32_VirtualAlloc:
kernel32.dll:7C809A81 mov edi, edi
kernel32.dll:7C809A83 push ebp
kernel32.dll:7C809A84 mov ebp, esp
kernel32.dll:7C809A86 push dword ptr [ebp+14h]
kernel32.dll:7C809A89 push dword ptr [ebp+10h]
kernel32.dll:7C809A8C push dword ptr [ebp+0Ch]
kernel32.dll:7C809A8F push dword ptr [ebp+8]
kernel32.dll:7C809A92 push 0FFFFFFFFh
kernel32.dll:7C809A94 call near ptr kernel32_VirtualAllocEx
kernel32.dll:7C809A99 pop ebp
kernel32.dll:7C809A9A retn 10h
kernel32.dll:7C809AA2 kernel32_VirtualAllocEx: ; CODE XREF: kernel32.dll:7C809A94p
kernel32.dll:7C809AA2 push 10h
kernel32.dll:7C809AA4 push offset unk_7C809AF0
kernel32.dll:7C809AA9 call near ptr unk_7C8024CB
kernel32.dll:7C809AAE mov eax, [ebp+0Ch]
kernel32.dll:7C809AB1 test eax, eax
kernel32.dll:7C809AB3 jnz short loc_7C809AFC
kernel32.dll:7C809AB5
kernel32.dll:7C809AB5 loc_7C809AB5: ; CODE XREF: kernel32.dll:7C809B08j
kernel32.dll:7C809AB5 and dword ptr [ebp-4], 0
kernel32.dll:7C809AB9 push dword ptr [ebp+18h]
kernel32.dll:7C809ABC push dword ptr [ebp+14h]
kernel32.dll:7C809ABF lea eax, [ebp+10h]
kernel32.dll:7C809AC2 push eax
kernel32.dll:7C809AC3 push 0
kernel32.dll:7C809AC5 lea eax, [ebp+0Ch]
kernel32.dll:7C809AC8 push eax
kernel32.dll:7C809AC9 push dword ptr [ebp+8]
kernel32.dll:7C809ACC call ds:off_7C801190
kernel32.dll:7C809AD2 mov [ebp-20h], eax
kernel32.dll:7C809AD5 or dword ptr [ebp-4], 0FFFFFFFFh
kernel32.dll:7C809AD9 test eax, eax
kernel32.dll:7C809ADB jl loc_7C80C946
kernel32.dll:7C809AE1 mov eax, [ebp+0Ch]
kernel32.dll:7C809AE4
kernel32.dll:7C809AE4 loc_7C809AE4: ; CODE XREF: kernel32.dll:7C80C94Ej
kernel32.dll:7C809AE4 call near ptr unk_7C80250B
kernel32.dll:7C809AE9 retn 14h
4 колла, второстепенны с 1 шлюзом, ничего интересного по вопросу...
← →
Германн © (2006-10-20 02:28) [72]Далее идёт "труднопереводимый диалог Лёши с Сашей" с использованием "местного диалекта". :-)
← →
vuk © (2006-10-20 10:53) [73]to Rouse_:
>ща погодь, я под IDA дебажу... сек проверим...
С пушки по воробьям? Ты смотри, что написано в исходнике, я его не просто так приводил. А написано там, что выделяется память и туда прописывается бинарный код заглушки-переходника, которая обеспечивает вызов метода объекта. Потом этот блок являться оконной процедурой создаваемого окна. То есть как раз и получаем исполняемый код в области данных.
Но при этом MS пишет, что если на блок памяти поставлен флаг PAGE_EXECUTE_READWRITE, то такой код выполнять будет можно.
http://msdn.microsoft.com/security/productinfo/XPSP2/memoryprotection/exec_imp.aspx
← →
Игорь Шевченко © (2006-10-20 11:05) [74]vuk © (20.10.06 10:53) [73]
> То есть как раз и получаем исполняемый код в области данных.
Почему в "области данных" ?
← →
vuk © (2006-10-20 11:18) [75]А где? Насколько я понимаю, все, что выделяется VisrtualAlloc будет считаться областью данных. Может быть, я не прав. Но насколько я понимаю, под выполнением динамически сгенерированного кода подразумеваются именно такие приемы. Покопался в интернете, нашел упоминания, что до XP SP2 флаги типа PAGE_EXECUTE_READWRITE хотя и были, но вроде как особого влияния на работу не оказывали и защита попросту не работала. Поэтому многие игнорировали необходимость (если следовать документации) их установки. Теперь игнорировать не получится.
← →
Игорь Шевченко © (2006-10-20 12:27) [76]vuk © (20.10.06 11:18) [75]
> А где? Насколько я понимаю, все, что выделяется VisrtualAlloc
> будет считаться областью данных.
Областью данных, на мой взгляд, является то, что не имеет атрибута PAGE_EXECUTE :)
← →
ZeroDivide © (2006-10-20 13:13) [77]Сам я на Vista переходить небуду, подожду следующей версии. Вообще у меня дома на одном компе стоит w2k, на другом w98SE(железо не позволяет поставить w2k). XP мне ни к какому месту не нужен. Виста тоже не нужна. Красивый шел я не люблю, а если приспичит, то сроронние разработчики уже написали этих шелов 3 кучи. Дырки в безопастности, также, залатаны уже сторонними разработчиками достаточно надежно. Вообще больше от MS, кроме того что уже есть, мне ничего не нужно. DirectX 10, по последним данным, выйдет и для w2k/XP систем, так что в Крайзис можно будет поиграть.
Кстати, о поиграть: Вряд ли на системе с увеличеным количеством бекграундных сервисов и увеличеным соответственно требованием к памяти, игрули будут идти быстрее!
Что же касается программирования, то да... учитывать то, что ЭТО может быть запущено еще и под Vista, в конечном счете придеться. К счастью, проблем не так много. На тему перевода Delphi-кода под Vista, недавно появилась хорошая статья:
http://www.installationexcellence.com/articles/VistaWithDelphi/Index.html
Мои проги еще лет 5-8 должны быть совместимы с 98-ми виндами... вот это меня волнует куда больше, чем Vista.
← →
ISP © (2006-10-20 13:32) [78]Кстати:
Корпорация Microsoft сообщила новые условия лицензирования версий Windows Vista, приобретенных в розницу (retail). Согласно этим правилам, операционную систему можно будет установить только на одном компьютере. Если пользователь решит сделать апгрейд, то купленная им ранее копия Vista на нем не встанет. По словам Microsoft, этот шаг является еще одним способом борьбы с пиратством, одной из причин которого корпорация считает возможность переносить копии Windows на другие компьютеры. Напомним, что до сих пор лицензия предусматривала возможность установки Windows на новый компьютер после деинсталляции на старом.
Кроме этого, ограничения вводятся и на использование Vista на приложениях наподобие VMware и Virtual PC. Версии Windows Vista Home Basic и Premium нельзя будет использовать в качестве "гостевых" операционных систем во время работы с виртуальной машиной. Для этого нужно будет купить версию Vista Business или Ultimate Edition.
http://www.3dnews.ru/news/kupil_vista_sidi_na_starom_pk-186531/
← →
Игорь Шевченко © (2006-10-20 13:45) [79]
> Согласно этим правилам, операционную систему можно будет
> установить только на одном компьютере
Собственно и раньше было то же самое.
> Если пользователь решит сделать апгрейд, то купленная им
> ранее копия Vista на нем не встанет
Да, конечно, ее потребуется повторно активировать. Но то же самое сейчас происходит с Windows XP
← →
Vaitek__ (2006-10-20 14:06) [80]А не будет ли запрета на активацию, в случае большого изменения аппаратной конфигурации (смена материки и проца например)?
Страницы: 1 2 3 вся ветка
Форум: "Прочее";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];
Память: 0.64 MB
Время: 0.049 c