Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #51, ФЕВРАЛЬ 2005 г.

Несетевая защита

Крис Касперски ака мыщъх

Спецвыпуск: Хакер, номер #051, стр. 051-100-5


624 (http://sed.free.fr/624) – малоизвестный простенький упаковщик. Работает шесть дней в неделю по 24 часа, а в воскресенье отдыхает. Шутка! Но добавить его к своей коллекции все-таки стоит.

Upx (http://upx.sourceforge.net) – легендарный кросс-платформенный упаковщик, работающий на множестве платформ от Atari до Linux. Никак не препятствует отладке и, что хуже всего, содержит встроенный распаковщик, позволяющий вернуть защищенный файл в первородный вид, но после небольшой доработки (спасибо исходным текстам!), приобретает весь необходимый набор защитных методик. Намного лучше доработать Upx, чем использовать любой из существующих навесных протекторов, поскольку всякий клон Upx'а приходится исследоваться индивидуально и хакер не может использовать общие схемы. Естественно, для модернизации упаковщика вам понадобятся антиотладочные приемы, о технике которых мы сейчас и поговорим.

Антиотладочные приемы

Большинство антиотладочных приемов по своей природе системно-зависимы и препятствуют переносу защищенной программы на другие платформы, поэтому пользоваться ими следует с большой осторожностью и осмотрительностью, тщательно тестируя каждую строку кода.

Паразитные файловые дескрипторы

В большинстве (если не во всех) *nix-систем запущенный нормальным образом файл получает в свое распоряжение три дескриптора – 0 (stdin), 1 (stdout), 2 (stderr). GDB и подобные ему отладчики создают дополнительные дескрипторы и не закрывают их. Чтобы обнаружить отладчик, достаточно попытаться закрыть дескриптор номер 3, и если эта операция завершится успешно, значит, нас отлаживают по полной программе!

Готовый пример реализации может выглядеть, например, так:

if (close(3)==-1)

printf ("all ok\n");

else

printf ("fuck off,debugger!\n");

Аргументы командной строки и окружение

Оболочка типа Bash автоматически подставляет имя запускаемого файла в переменную окружения "_". Отладчики же оставляют ее пустой (см. таблицу). Наблюдаются некоторые различия и с нулевым аргументом командой строки: Bash и подавляющее большинство остальных оболочек подставляют сюда текущее имя файла, а GDB – имя файла с полным путем (впрочем, ALD таким путем распознать не удается).

Назад на стр. 051-100-4  Содержание  Вперед на стр. 051-100-6