Можно определить, похож ли файл на сжатый формат путем выполнения file
команда.
file lorem.txt lorem.txt.gz
lorem.txt: ASCII text
lorem.txt.gz: gzip compressed data, from Unix, last modified: Thu Feb 7 02:10:44 2013, max compression
file
просто скажут "данные", если они не распознают формат. Кроме того, Вам решать для выяснения, что сжато или не (например, “Текст ASCII”, “PPM”, “аудио WAVE” является несжатым; “gzip сжал данные”, “изображение JPEG”, “аудио Vorbis” сжато).
Другой способ обнаружить, если файл выглядит сжатым, состоит в том, чтобы попытаться сжать его. Если Вы не можете значительно уменьшить размер, файл, вероятно, сжат или зашифрован.
wc -c somefile
gzip
То, что вы описываете, является функцией защиты от эксплуатации, которая называется рандомизация разметки адресного пространства (ASLR). По сути, ядро помещает самый верхний адрес стека вызовов функций программы на немного другой («случайный») адрес каждый раз, когда ядро загружает файл ELF программы с диска. Адреса в argv
и переменные среды, одной из которых является ваш шелл-код, при каждом вызове программы оказываются по разным адресам.
ASLR должен затруднить использование переполнения буфера и других уязвимостей, связанных со стеком. Злоумышленник должен написать код или что-то сделать, чтобы учесть различные адреса переменных и значений в стеке вызовов функций.
Похоже, вы можете отключить ASLR, выполнив что-то вроде:
echo 0 > /proc/sys/kernel/randomize_va_space
как пользователь root. Поскольку вы явно цитируете Ubuntu, приведенная выше команда отличается:
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space