"С.П.Расторгуев, А.Е.Долгин "Как защитить информацию" (пособие по борьбе с хакерами)" - читать интересную книгу автора Включение в алгоритм элементов случайности делает "внешность"
задачи непредсказуемой. Пример этого способа приведен на прилагаемой дискете. ИЗМЕНЕНИЕ КОДИРОВКИ Более сложный способ - модификация кодов команд с изменением характера выполняемых операций (рис. 5.1). Делается это так. Написанный на ассемблере и уже отлаженный модуль транслируется в объектный код с получением листинга. На листинге, не обращая внимания на мнемонику, ищем участки с похожими закономерностями изменения величин кодов команд (вот где пригодится опыт решения математических задач, типа "найди закономерность", из популярных журналов). Затем выделяем найденные участки в отдельную подпрограмму и, используя подмеченную закономерность, составляем алгоритм ее преобразования в коды первого участка, второго, третьего... Этот алгоритм встраиваем вместо участков и по завершению преобразования подпрограммы - передаем ей управление. Как правило, с первой попытки полной аналогии с изъятым блоком не получается, поэтому нужно поманипулировать командами, переставить их местами, может быть - добавить лишние (тем не менее не нарушающими общего алгоритма), что-то заменить эквивалентной последовательностью. ПРОХОД "СВОИМ ХОДОМ" ПО ДАННЫМ Несмотря на кажущуюся простоту, одновременное использование некоторых байт как операторов и операндов является "высшим пилотажем" процессоров типа Z80, К580 и др. Дело в том, что у них основные коды однобайтовых пересылок и букв совпадают, к тому же у компьютеров с МП Z80 маловато ОЗУ (приходится его экономить). Вот и используют участки осмысленного текста - как для появляющихся на экране сообщений, так и для загрузки нужных регистров. Разумеется, некоторые буквы оказываются лишними при прогоне участка, как кода программы. Но, с другой стороны, вслед за "сообщением" можно поставить несколько команд, корректирующих результаты ненужных операций. Пример приведен в распечатке листинга игры "Jetpac" фирмы "Ultimate" для компьютера "Spectrum-48" на рис. 5.2 (для МП Z80). По ходу космической игры в верхней части экрана появляются надписи: "1UP" (результат 1 игрока), "HI" (лучший результат за всю игру) и "2UP" (2 игрок). При анализе текста программы выяснилось, что эти надписи образуют отдельную подпрограмму, осуществляющую пересылки некоторого значения из ячейки ОЗУ (адрес 0D055h) в стек и из аккумулятора в эту же ячейку (то есть сложный обмен значениями между регистром A, стеком и ОЗУ). Впрочем, то что легко программируется для 8-разрядных процессоров, вызывает определенные трудности на 16-разрядных: и характер операций у "буквенных" кодов другой, и однобайтовых команд мало (с двух - трехбайтовыми разбираться еще сложнее). Тем не менее, после некоторой тренировки можно и этот способ взять на вооружение. ЗАМЕНА БЛОКОВ Традиционный подход при использовании ветвления заключается в |
|
|