Из журнала Adventurer #6, Рыбинск, 30.03.1997  SHRSOFT +-------------===============-----------+ +--- Методы защиты программного кода ---+ +-------------===============-----------+ Обзорная статья На текущий момент сушествуют нес- колько методов защиты программного кода. Перечислю их. 1.Защита инвертированием по маске. ( В простонародье - "КСОРКА") Широко известный и применяемый метод. Часто используется с применением в каче- стве маски регистра R и отличается ред- ким однообразием, хотя изредка попада- ются настоящие программные шедевры. Ма- лоэффективен, хотя часто требуется не- мало времени для взлома. Яркий пример использования : копировщик L-Copy ( ав- тор: Лаптев ). 2.Защита при помощи разных "извратов". "Изврат" - код, написанный с использова- нием специально запутанных алгоритмов, с целью скрыть прямой адрес запуска какой- либо подпрограммы или запутывание самой программы. Отличается неограниченным ко- личеством вариантов, но используется сравнительно редко, т.к. рассчитан на слабое знание ассемблера и принципов программирования. В настоящее время ма- лоэффективен. Примеры встречаются повсе- местно, например: махинации со стеком, условными переходами и "неявный" выход через стек на нужный адрес. 3.Метод с использованием ПИ-кода или раз- новидностей шитого кода. ПИ-код - ассемблер для абстрактной ма- шины, некая промежуточная стадия между машинным кодом и языком высокого уровня. Шитый код - специфический вариант того- же ПИ-кода. Очень крутой метод защиты, в общем, по- хожий на метод 2, но исключительно редко применяющийся на ПК класса Spectrum. Не- достаток: "неслабый" размер кода и более низкое, чем у "чистого" кода быстродейс- твие. Эффективность метода очень высокая и взлом по зубам только очень искушенным программистам. Пример: любая программа, откомпилированная на Паскале, язык Форт. На Spectrum'е такой код может генериро- вать компилятор BLAST (остальные генери- руют "извраты", см.выше). 4.Метод с использованием криптографичес- ких алгоритмов и паролей. Широко используемый на мощных ПК и в разных шпионских "конторах" метод. Осно- ван на самых разнообразных математичес- ких алгоритмах, цель которых - путем жутких расчетов получить из исходного информационного блока и ключевого масси- ва (пароля) некий файл, раскодировать который может только тот, кто имеет этот пароль. Взломать такой файл можно только после изучения килограмм сорока специ- альной математической литературы, после чего вы смело можете предлагать свою кандидатуру на должность директора ЦРУ. На Spectrum'е не эффективен, т.к. пароль никому, кроме себя показывать нельзя, иначе через пару дней его узнает вся страна. 5.Метод, основанный на использовании IM2. В отличие от вышеперечисленных мне не попадался, так что обьясняю умозритель- но. Основан на "увязке" основной прог- раммы и ISR (от англ.- "подпрограмма об- работки прерываний" - Interrupt Service Routine) с целью организовать контроль (например, считать контрольную сумму) основной программы на предмет посяга- тельств извне. Тут открывается широкое поле для экспериментов. Можно, к приме- ру, организовать передачу данных через ISR от одного массива данных к другому или использовать ISR для динамического кодирования неиспользуемых на текущий момент подпрограмм и т.д. Сложность ме- тода в необходимости глубокой проработки и "увязки" алгоритмов ISR и программы, дабы избежать багов и задержек в работе программы из-за апериодичной работы ISR, связанной со сложностью определения вре- мени от DI до EI. Очень перспективный и многообещающий метод. Думается, что все остальные варианты защиты программного кода являются не бо- лее, чем частными случаями вышеперечис- ленных или их комбинациями. Использова- ние недокументированных команд Z80 не включено в статью по причине тривиальной - в последнее время они фактически хоро- шо всем известны. Буду рад любой информации по методам защиты информации и сотрудничеству в этой сфере. Шпинев Роман Евгеньевич (SHRSOFT).