Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1161542096
Belorus
2006-10-22 22:34
2006.11.12
Профайлер...


15-1161508815
Cyrax
2006-10-22 13:20
2006.11.12
Патч для Promt XT Family от лицензионного соглашения


15-1161474464
PHPDeveloper
2006-10-22 03:47
2006.11.12
Осеннее обострение?


6-1150711485
kolj
2006-06-19 14:04
2006.11.12
передача файлов через TserverSocket TclientSocket


1-1159106424
fs_more
2006-09-24 18:00
2006.11.12
Передача данных в сообщении (SendMessage / PostMessage)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский