Проблема с нулевыми байтами в шелл-коде существует только в тех случаях, когда он внедряется с использованием переполнения при обработке строк в стандартной библиотеке строк на языке Си, где нулевой байт означает конец строки, поэтому копирование на нем останавливается. Использование переполнения буфера строкой в стиле C было самым популярным подходом к внедрению шелл-кода в середине 90-х годов. В настоящее время большая часть кода C (AFAIK) защищена от этого с помощью других функций (либо набор OpenBSD strlcpy / strlcat, набор * _s (), либо доморощенные функции) и менее старых сред, поскольку C ++ уже получил библиотеку строк без нулевого байта. прекращение. В настоящее время в большинстве эксплойтов некоторые программные ошибки используются в качестве слишком маленького буфера или неправильной проверки входящего значения, когда оно должно находиться в пределах некоторых границ.
Я не анализировал код, который вы связали, но, похоже, он использует некорректную обработку TLV в двоичных данных. В любом случае он безопасен для нулевых значений благодаря обработке двоичных данных (но может использоваться иным способом).