Переполняющиеся буфера - активные средства защиты

         

псевдокод уязвимой функции до защиты Pro-Police


Int32  random_number;                    // глобальный canary, генерируемый случ. образом

foo ()

{

       volatile int32 guard;             // локальная копия canary, охраняющая кадр

       char buf[128];                    // буфер идет перед всеми локальными переменными!

       char *p;                   // локальная переменная-указатель

      

       guard = random_number;            // копируем глобальный canary в лок. переменную

      

       gets

(buf);
                // вызываем уязвимую функцию

      

       if (guard != random_number) /* program halts */

}



Содержание раздела