Вопрос 1
При удалении файла прежде всего по каталожной записи проверяется, можно ли его удалить (не установлен ли атрибут «только для чтения»), а затем делаются две вещи:
· первый байт имени удаляемого файла заменяется на специальный символ с кодом E516 (он отображается как русская буква «х»; вероятно, разработчики системы FAT считали, что этот код не может встретиться в имени файла);
· все записи таблицы FAT, соответствующие кластерам удаляемого файла, заполняются нулями, т.е. кластеры объявляются свободными. Как видно из описанной процедуры, в момент удаления файла его данные не стираются с диска, однако информация о размещении файла портится. При дальнейшей эксплуатации диска эти кластеры могут быть использованы для хранения других файлов. Если размер файла превышал один кластер, то нет гарантии, что его удастся восстановить в случае нечаянного удаления, даже если пользователь спохватится сразу же.При удалении файла с диска собственно удаления его содержимого не происходит. Система лишь стирает первый символ имени файла, и обычные программы перестают его "видеть" (именно поэтому иногда не удается восстановить первую букву имени файла, хотя в большинстве случаев имена файлов, созданных под Windows, продублированы). Если вы только что удалили файл, его еще можно восстановить, так как в дескрипторе сохранились все поля, кроме первого байта имени файла. Но если на диск записать новые файлы, то содержимое кластеров удаленного файла будет изменено и восстановление станет невозможным.Кроме того, система стирает все номера кластеров в FAT, считая их более незанятыми.Однако поскольку при удалении файла все номера его кластеров в FAT обнуляются, при попытке восстановления остается лишь предположить, что файл не был фрагментирован и все его кластеры идут последовательной цепочкой. Имея указатель на начало удаленного файла (этот указатель тоже сохраняется при удалении файла), программа считывает ПРЕДПОЛАГАЕМОЕ содержимое файла из соответствующего количества последовательных кластеров.Таким образом, в некоторых случаях (впрочем, довольно редких) даже при 0% Ущерба файл невозможно полностью восстановить (как правило, его начало будет правильным, а дальше будет включено содержимое других файлов)... Существуют и иные случаи, когда некоторые кластеры восстанавливаемого файла были повторно использованы и вновь освобождены - они выглядят неиспользованными, но их содержимое изменилось.Вопрос 2Под исследованием программы обычно понимают именно процесс получения ее алгоритма. Все средства исследования ПО можно разбить на два класса: статические и динамические. Первые оперируют исходным кодом программы как данными и строят ее алгоритм без исполнения. Они являются более универсальными в том смысле, что теоретически могут получить алгоритм всей программы, в т.ч. и тех блоков, которые никогда не получат управления.Дизассемблер - средство статического исследования ПО. Он предназначен исключительно для решения задач построения алгоритма и формирует на выходе ассемблерный текст алгоритма. Помимо этого можно предложить "декомпиляторы", генерирующие из исполняемого кода программу на языке высокого уровня. Для защиты программ от статического исследования необходимо применять методы защиты от исследования файла с ее исполняемым кодом, хранящемся на внешнем носителе.В этом случае защита может быть основана на шифровании секретной части программы.Таким образом, защищаемая от исследования программа должна включать следующие компоненты:
инициализатор;
зашифрованную секретную часть;
деструктор (деициниализатор).
Инициализатор должен обеспечивать выполнение следующих функций:
сохранение параметров операционной среды функционирования (векторов прерываний, содержимого регистров процессора и т.д.);
запрет всех внутренних и внешних прерываний, обработка которых не может быть запротоколирована в защищаемой программе;
загрузка в оперативную память и дешифрование кода секретной части программы;
передача управления секретной части программы.
Секретная часть программы предназначена для выполнения основных целевых функций программы и защищается шифрованием для предупреждения внесения в нее программной закладки.
Деструктор после выполнения секретной части программы должен выполнить следующие действия:
обнуление секретного кода программы в оперативной памяти;
восстановление параметров операционной системы (векторов прерываний, содержимого регистров процессора и т.д.), которые были установлены до запрета неконтролируемых прерываний;
выполнение операций, которые невозможно было выполнить при запрете неконтролируемых прерываний;
освобождение всех незадействованных ресурсов компьютера и завершение работы программы.
Для защиты программ от исследования с помощью дизассемблеров можно использовать и такой способ, как усложнение структуры самой программы с целью запутывания злоумышленника, который дизассемблирует эту программу. Например, можно использовать разные сегменты адреса для обращения к одной и той же области памяти. В этом случае злоумышленнику будет трудно догадаться, что на самом деле программа работает с одной и той же областью памяти.
Шифрование. Самый простой и эффективный способ противодействия. Подразумевает, что определенная часть кода никогда не появляется в свободном виде. Код дешифруется только перед передачей ему управления. То есть вся программа или ее часть находится в зашифрованном виде, а расшифровывается только перед тем как исполниться. Соответственно, чтобы проанализировать ее код надо воспользоваться отладчиком, а его работу можно очень и очень осложнить! Шифрование и дешифрование (динамическое изменение кода). Более продвинутый способ шифрования, который не просто дешифрует часть кода при исполнении, но и шифрует его обратно, как только он был исполнен. При такой защите хакеру придется проводить все время с отладчиком, и взлом защиты затянется на очень и очень долгое время.
Использование виртуальных машин. Еще одна модернизация шифрования. Способ заключается в том, чтобы не просто шифровать и дешифровать целые фрагменты кода целиком, а делать это покомандно, подобно тому, как действует отладчик или виртуальная машина: взять код, преобразовать в машинный и передать на исполнение, и так пока весь модуль не будет исполнен. Этот способ гораздо эффективнее предыдущих, так как функции приложения вообще никогда не бывают открытыми для хакера. Естественно, что его трудно реализовать, но реализовав, можно оградить себя от посягательств любых хакеров. Но в этом способе кроется недостаток - производительность, ведь на подобное транслирование требуется много времени, и, соответственно, способ хорош для защиты только для критических участков кода.Запутывание кода. Наиболее часто встречающийся метод защиты ПО от исследования – обфускация, или запутывание кода. Под этим термином подразумевается приведение исполняемого кода к виду, сохраняющему функциональность программы, но затрудняющему анализ и понимание алгоритмов работы. Другими словами, запутывание так изменяет программу, что ее обратное преобразование будет экономически невыгодным (а физически очень трудновыполнимым). В основном этот способ защиты приложения используется для защиты про-
грамм от воссоздания исходного кода (декомпиляции) и незаконного использования, нарушения авторских прав программистов. Основная функция защиты программного обеспечения заключается не только в том, чтобы приложение нельзя было незаконно использовать, копировать или модифицировать, но и в том, чтобы не дать хакеру возможности изучить эту программу, применив излюбленный метод – пошаговый режим отладки. Тут уже может помочь нетипичное расположение стека (область памяти, где хранятся данные программы), его размер или варианты применения. Ведь при анализе с помощью специальных программ хакер может отбросить ненужный кусок кода или данных, в результате функционирование программы может оказаться невозможным или неправильным.С помощью запутывания можно перемешать в программе куски кода или действия так, что логика работы становится совершенно непонятной. Кроме того, при запутывании могут вставляться новые куски неисполняемого (неиспользуемого) кода, а существующие блоки кода могут быть модифицированы таким образом, чтобы они использовались в нескольких частях программы одновременно.
Билет 19
