Если вы пытаетесь избежать нулей в шелл-коде, есть способы сделать это, которые в значительной степени описаны в каждом уроке по написанию шелл-кода.
Теперь заключительная часть с перезаписью адреса будет сложной, в зависимости от того, чтоиспользуется переполнение буфера.
В случае memcpy , символы \ 0 не являются проблемой, однако (и ваш вопрос достаточно расплывчат, что мне придется написать это)Скорее всего, вы не можете ввести их в stdin с помощью клавиатуры / в командной строке, поэтому вам нужно будет ввести данные из какого-то другого источника, например, передать его: ./buffercrash < exploit.txt
С strcpy , вы не можете иметь \0 символов, кроме последнего, так как он также завершит строку назначения, что означает, что вы можете совершенно правильно установить самый старший байт в \ 0.Теперь ваша проблема остается наименее значимым байтом: если это адрес стека, вам может повезти, добавив некоторые дополнительные переменные окружения, чтобы ваш целевой адрес изменился соответствующим образом.Если это просто адрес для шелл-кода, вы можете просто добавить +1 к адресу и вставить еще один заполняющий символ перед вашим шелл-кодом.
Так что все зависит от контекста и того, что именно вы пытаетесь сделатьОднако, если у вас есть уязвимость, связанная с переполнением буфера, \ 0 может остановить простые подходы, но с некоторой креативностью, скорее всего, будет что-то, чего можно достичь даже без \ 0 символов.