21 Декабря, 2006

DOS в функции MessageBox

Shred
Оригинальный текст и ссылка на исходник тут

Скампилив исходник на С#, наблюдаем переполнение функции Messagebox и после выдачи нескольких сообщений, машина послушно идёт в ребут(WinXP SP2). Но как же? Язык C# гарантирует выполнение приложения в своём собственном адресном пространстве и просто не может привести к такому краху. Но всё не так, как кажется.



  • 1) Используется флаг unsafe, что уже снимает все обязанности с Framework, т.к. используя этот флаг, приложение получает доступ к адресному пространству других приложений.

  • 2) На самом деле вызывается сишная функция
    [DllImport("user32.dll")]
    unsafe public static extern int MessageBoxA(uint hwnd, byte* lpText, byte* lpCaption, uint uType);

    и не используется безопасная C# функция.


Какой можно сделать вывод? Да приложение написано на C#, но импортируется уязвимая функция из С++. Дело закрыто, C# оправдан! :)

Кому лень кампилить тут лежит исходник и ехе'ха. Запускать советую в VMWare.
comments powered by Disqus