Механизм самогенерируемых кодов является очень эффективным, но и крайне сложным в реализации. Суть его в том, что исполняемые коды программы вырабатываются самой программой в процессе ее выполнения. Эти, создаваемые вновь, коды представляют собой коды АД. Самогенерируемые коды получаются в результате выполнения некоторого набора обычных операций над определенным, заранее рассчитанным массивом данных. Этим массивом может являться фрагмент действительно исполняемого "штатного" кода или неким осмысленным текстом. Примером самогенерации кодов может служить механизм защиты от копирования, реализованный в пакете COPYLOCK.
Обманом дизассемблера называют такой стиль программирования, который позволяет "запугать" стандартный дизассемблер применением нестандартных приемов выполнения некоторых команд и нарушением общепринятых соглашений. Существуют следующие способы:
- нестандартная структура программы;
- скрытые переходы, вызовы процедур, возвраты из них и из прерываний;
- переходы и вызовы подпрограмм по динамически изменяемым адресам;
- модификация исполняемых кодов.
Для направления дизассемблера по ложному следу часто применяют скрытые переходы, вызовы и возвраты, использующие нестандартные реализации команд JMP, CALL, INT, RET, IRET. Например, рассмотрим обычный "открытый" переход:
…
jmp label ; Обычный переход
…
label:
…
Теперь рассмотрим скрытый переход:
…
mov ax, offsei label ; Адрес перехода
push ax ; заносится в стек
ret ; Скрытый переход
…
label:
…
Аналогичная идея для скрытого прерывания int 13h:
…
pushf ; Флаги в стек
push cs ; Содержимое сегмента кода в стек
mov si, offset label ; Адрес возврата
push si ; в стек
xor si, si ; "Запутывание"
mov es, si
jmp dword ptr es: [13h * 4] ; Скрытый вызов прерывания
…
label:
…
В распоряжении злоумышленника имеются дополнительные возможности, например, использование стека таким образом, чтобы сделать практически невозможным применение стандартных отладочных средств для анализа "своего" кода. Например, можно назначить стек прямо в тело исполняемого кода. Для этого указатель вершины стека SP должен указывать в область кода. Тогда обработка отладчиком первого же
прерывания (обычно трассировочного) неминуемо уничтожит участок исследуемой программы. Другим эффективным приемом может быть использование стека не только для хранения текущих данных, но и для активного участия в непосредственной работе программы. Например, пакет CONVOY фирмы "Элиас" использует стек для разархивации файлов.
1. Cohen F. Computer Viruses. Theory and Experiments. Adv.Comput.Syst.Secur., Vol 3, Norwood (Mass.), 1988.pp.l-19.
2. Защита информации в компьютерных системах. Изд-во СПбГТУ, 1993.- 102 с.
3. Operating System Security for Midrange and Large Computers: Market Overview // Operating System Int. - McGrow НД1 Inc. NJ USA, 1991, pp. 102-165.
4. Безрукое Н.Н. Компьютерная вирусология: Справочное руководство, Киев, 1991.
5. Защита программ от дизассемблеров и отладчиков // Компьютер Пресс,1992,N4,с.49-54.
Создание информационно-безопасного программного обеспечения является актуальной проблемой, от успешного решения которой зависит эффективность создаваемого программного продукта общего и специального назначения. Основные характеристики ситуации, в которой создается новое ПО можно описать следующим образом:
- наличие широкого спектра языков различного уровня;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.