hack from hell
От: x64 Россия http://x64blog.name
Дата: 22.02.09 09:52
Оценка: :))) :))) :)
Улыбнуло (из исходников NTFS NT4):

        //
        //  Here is the  "M A R K   L U C O V S K Y"  hack from hell.
        //
        //  It's here because Mark says he can't avoid sending me double beginning
        //  backslashes win the Win32 layer.
        //

        if ((OplockCleanup.FileObject->FileName.Length > sizeof( WCHAR )) &&
            (OplockCleanup.FileObject->FileName.Buffer[1] == L'\\') &&
            (OplockCleanup.FileObject->FileName.Buffer[0] == L'\\')) {

            OplockCleanup.FileObject->FileName.Length -= sizeof( WCHAR );

            RtlMoveMemory( &OplockCleanup.FileObject->FileName.Buffer[0],
                           &OplockCleanup.FileObject->FileName.Buffer[1],
                           OplockCleanup.FileObject->FileName.Length );

            *FullFileName = *OriginalFileName = OplockCleanup.FileObject->FileName;

            //
            //  If there are still two beginning backslashes, the name is bogus.
            //

            if ((OplockCleanup.FileObject->FileName.Length > sizeof( WCHAR )) &&
                (OplockCleanup.FileObject->FileName.Buffer[1] == L'\\')) {

                Status = STATUS_OBJECT_NAME_INVALID;
                try_return( Status );
            }
        }
JID: x64j@jabber.ru
Re: hack from hell
От: Michael Chelnokov Украина  
Дата: 22.02.09 10:29
Оценка:
Здравствуйте, x64, Вы писали:

x64> // It's here because Mark says he can't avoid sending me double beginning

x64> // backslashes win the Win32 layer.

Вполне обычная ситуация для проектов, над которыми работает более одного человека.
Re: hack from hell
От: Alexander G Украина  
Дата: 22.02.09 12:13
Оценка:
Здравствуйте, x64, Вы писали:

x64>(из исходников NTFS NT4):


Интересно, их раздают под NDA или они просто так валяются ?
Русский военный корабль идёт ко дну!
Re[2]: hack from hell
От: PaulMinelly  
Дата: 22.02.09 13:33
Оценка: 1 (1)
Здравствуйте, Alexander G, Вы писали:

AG>Здравствуйте, x64, Вы писали:


x64>>(из исходников NTFS NT4):


AG>Интересно, их раздают под NDA или они просто так валяются ?


На торрентах может каждый скачать часть исходников винды, чуть ли не Вин2000 на 400Мб. Там есть такие емейилы как "письма детям", "империя в огне" которых только заголовки присутствуют к сожалениею, а тела самих писем отсутствуют. Вот их бы очень хотелось почитать
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: hack from hell
От: ononim  
Дата: 22.02.09 15:10
Оценка:
забавно а что если Length поставить в 3, и сделать так чтобы Buffer заканчивался на конце валидной страницы памяти. Свалится на выделенной строчке или там где-то раньше проверки еще есть?
x64>Улыбнуло (из исходников NTFS NT4):
x64>
x64>        if ((OplockCleanup.FileObject->FileName.Length > sizeof( WCHAR )) &&
x64>            (OplockCleanup.FileObject->FileName.Buffer[1] == L'\\') &&
x64>            (OplockCleanup.FileObject->FileName.Buffer[0] == L'\\')) {

x64>        }
x64>
Как много веселых ребят, и все делают велосипед...
Re[2]: hack from hell
От: MShura  
Дата: 22.02.09 21:42
Оценка:
O>забавно а что если Length поставить в 3, и сделать так чтобы Buffer заканчивался на конце валидной страницы памяти. Свалится на выделенной строчке или там где-то раньше проверки еще есть?

x64>>Улыбнуло (из исходников NTFS NT4):

x64>>
x64>>        if ((OplockCleanup.FileObject->FileName.Length > sizeof( WCHAR )) &&
O>x64>            (OplockCleanup.FileObject->FileName.Buffer[1] == L'\\') &&
x64>>            (OplockCleanup.FileObject->FileName.Buffer[0] == L'\\')) {

x64>>        }
x64>>


Тоже неплохо будет, если Length будет 3, а Buffer NULL.
Еще забавней будет, если запрос на выделение N байт памяти будет выделяться только N/2
Re[3]: hack from hell
От: Alexander G Украина  
Дата: 22.02.09 21:47
Оценка:
Здравствуйте, MShura, Вы писали:

MS>Тоже неплохо будет, если Length будет 3, а Buffer NULL.

MS>Еще забавней будет, если запрос на выделение N байт памяти будет выделяться только N/2

А что мелочится, стукнуть кувалдой по работающему винту и всё
Русский военный корабль идёт ко дну!
Re[3]: hack from hell
От: ononim  
Дата: 22.02.09 22:11
Оценка:
O>>забавно а что если Length поставить в 3, и сделать так чтобы Buffer заканчивался на конце валидной страницы памяти. Свалится на выделенной строчке или там где-то раньше проверки еще есть?
x64>>>Улыбнуло (из исходников NTFS NT4):
x64>>>
x64>>>        if ((OplockCleanup.FileObject->FileName.Length > sizeof( WCHAR )) &&
O>>x64>            (OplockCleanup.FileObject->FileName.Buffer[1] == L'\\') &&
x64>>>            (OplockCleanup.FileObject->FileName.Buffer[0] == L'\\')) {

x64>>>        }
x64>>>


MS>Тоже неплохо будет, если Length будет 3, а Buffer NULL.

MS>Еще забавней будет, если запрос на выделение N байт памяти будет выделяться только N/2
Ну смысл проверки OplockCleanup.FileObject->FileName.Length > sizeof( WCHAR ) чтоб не свалится в последующих двух строчках. Но ведь OplockCleanup.FileObject->FileName.Length > sizeof( WCHAR ) совсем не означает что OplockCleanup.FileObject->FileName.Length >= 2*sizeof( WCHAR ). Одна из типичных ошибок кстати при работе с UNICODE_STRING.
Как много веселых ребят, и все делают велосипед...
Re[4]: hack from hell
От: Alexander G Украина  
Дата: 22.02.09 22:34
Оценка:
Здравствуйте, ononim, Вы писали:

O>Одна из типичных ошибок кстати при работе с UNICODE_STRING.


Одна из типичных ошибок кстати при работе со структурами — отсутствие выравнивания.
Если на нечётном байте страница памяти кончилась, значит строка не была выровнена.

Смысл той проверки — проверить длину с учётм того, что передана корректная UNICODE_STRING. Безопасно проверить некорректную UNICODE_STRING намного сложнее.
Русский военный корабль идёт ко дну!
Re[5]: hack from hell
От: ononim  
Дата: 22.02.09 22:44
Оценка:
O>>Одна из типичных ошибок кстати при работе с UNICODE_STRING.
AG>Одна из типичных ошибок кстати при работе со структурами — отсутствие выравнивания.
AG>Если на нечётном байте страница памяти кончилась, значит строка не была выровнена.

AG>Смысл той проверки — проверить длину с учётм того, что передана корректная UNICODE_STRING. Безопасно проверить некорректную UNICODE_STRING намного сложнее.

Ну так я спрашивал изначально — что является входными данными этого кода? Ежели то что пришло из юзермода — то совсем плохо.. А ежели что нет — все равно код "не красивый". Учитывая то что чтобы сделать его красивее достаточно добавить 3 символа
Как много веселых ребят, и все делают велосипед...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.