Защита программного обеспечения
Защита программного обеспечения Прозаическое отступление
За то время, которое я провел в Интернете, я посетил множество сайтов, на которых выложены так называемые cracks, keygens, licenses к различным программам. А на одном из них мне встретилась интересная фраза: "Защита программного обеспечения — это замок на двери вашей программы. Очень часто ключ к этому замку лежит прямо перед дверью или спрятан под ковриком, на котором Вы стоите." Метко и в точку, не правда ли?
Эта статья предназначена для тех разработчиков программного обеспечения, которые еще не сталкивались с профессиональной защитой от незарегистрированного использования.
Материал статьи показывает примеры защиты программного обеспечения для Windows9x (и NT, раз уж на то пошло).
Эта статья раскрывает далеко не все приемы защиты программного обеспечения. Бытует мнение, что хакеры (а точнее кракеры (англ. "crackers")) это уникальные специалисты, с которыми могут бороться лишь такие же кракеры. В большинстве случаев это так и применимо лишь к немногим группам: ex-UCL, Phrozen Crew (www.phrozencrew.org), EbolaVirusCrew (www.ebolaviruscrew.com), The Damned Souls (www.theds.com), OriON, UCF.
В остальных случаях противостоять кракеру/реверсеру в состоянии любой программист и поставить неразрешимую задачу нерадивому взломщику.
ШАРОВАРЫ
Существуют две большие проблемы, касающиеся нелицензионного использования шароварных (коммерческих) программ. Первая — это как не позволить взломщику превратить шароварную версию в полнофункциональную. Вторая — не допустить использования зарегистрированной копии на других компьютерах.
Как создать shareware-продукт
Предлагая коммерческую версию своей программы, автор, прежде всего, преследует 2 цели: показать пользователю возможности программы и, заинтересовав его, предложить купить эту программу. На сегодняшний день наиболее популярны следующие виды создания shareware-продуктов:
1. Demo version. Потенциальный покупатель получает "обрезанную" программу, в которой начисто отсутствуют некоторые функции. Определяющим является то, что теоретически и практически такую демо-версию невозможно превратить в полнофункциональную. Пример: база данных по производителям холодильников содержит в демо-версии данные только по одному региону России. После регистрации заказчику высылается полная база данных.
2. Incomplete software fuctionality. Коммерческая версия программы, которая содержит функции, становящиеся доступными только после регистрации. Важно заметить, что эти функции недоступны только во время периода оценки программы. Сейчас, когда рынок программного обеспечения раздут до невозможности, когда у каждой программы найдется как минимум один аналог, важно представить пользователю уникальные функции, часть из которых ему стоит продемонстрировать, а остальные он должен купить. Пример: графический редактор с полностью работающими графическими функциями, но с отсутствием возможности сохранить результат работы. Главное — правильный выбор функций для их закрытия.
3. Термин использования. Наиболее популярный вид защиты. В этом случае программа предстает перед пользователем "во всей красе". Все функции работают на протяжении определенного отрезка времени, и по его прошествии пользователя просят зарегистрироваться, после чего программа отказывается загружаться. Даже МелкоСофт использует такую схему защиты в бета-версиях своих продуктов.
4. Навязчивое поведение. На всем протяжении срока оценки программы (в простонародье — trial) программа старается досадить пользователю чем-нибудь навязчивым. Например, окном с предложением запуститься при каждом запуске или добавлением строки "Register, mortal user!!!":~) в выходной файл.
5. Upgrade. Новая версия программы изволит установиться, если была установлена более старая ЗАРЕГИСТРИРОВАНАЯ версия.
ПУТИ ВЗЛОМА И ЗАЩИТЫ
В большинстве случаев множество коммерческих продуктов "ломается" по причине того, что авторы программы не имеют понятия о тех методах, которыми пользуются взломщики. Сейчас будут рассмотрены наиболее простые методы взлома и методы защиты от них.
Взлом программ с ограниченным сроком действия.
В данном случае есть несколько методов, которые доступны не только взломщикам, но и простым людям. Один из путей обмана защиты — установить до инсталляции дату на несколько лет (можно и десятков), а после установки программы, которая будет действовать всего несколько недель, перевести дату назад и юзать программу до старости;-).
Первый способ защиты — проверять дату выпуска текущей версии с датой, установленной на этом компьютере, и если разница составляет, например, больше 6 месяцев, то предложить обновить версию и не загружать программу дальше. Более радикальный способ — каждый день проверять дату, и если она была переведена назад, то... "Деинсталлировать программу или уличить пользователя в мошенничестве", — подумаете Вы. НЕ НУЖНО ЭТОГО ДЕЛАТЬ! Ведь в системе пользователя мог произойти сбой даты, времени и т.п. Вот на этот период нужно просто приостановить работоспособность программы. А еще лучше — предложить пользователю вернуть системные часы к правильной дате.
Второй способ — вести внутренний таймер и сравнивать его значения со значением часов. Это иногда довольно сложно реализовать, но, поверьте, овчинка стоит выделки.
Третий способ — для Интернет-программ. С моей точки зрения он наиболее коварен. Во время работы программы можно запрашивать время и дату у так называемых time-сервиров. Этим самым Вы не только защитите часы от перевода времени, но и сделаете доброе дело — подкорректируете работу пользователя по атомным часам:-).
Четвертый способ направлен против тех пользователей, которым не лень раз в месяц (к примеру) деинсталлировать программу и, инсталлировав ее снова, запустить на новый триальный срок. Данные о днях использования можно хранить в системном реестре и не удалять их оттуда при деинсталляции. Альтернативой этому может быть создание неприметного файла в каталоге Windows, который будет выполнять собой роль счетчика и флага окончания trial-срока программы.
Пятый способ защиты при использовании счетчика запусков основан на хранении данных о количестве запусков. Опять же может использоваться реестр, файл и т.п. Естественно, если взломщик увидит что-либо подобное "YourProgramRunsLeft=0", он уже будет знать, где копать. Поэтому эти строки (ключи в реестре) и их значения рекомендуется криптовать тем же банальным XOR'ом наряду со ВСЕМИ остальными строками (ключами в реестре), так или иначе относящимися к Вашей программе.
Шестой способ при использовании счетчика заключается в изменении даты времени какого-нибудь файла. Например, при истечении одного дня изменить дату файла readme.txt с 01.01.2000 на 01.01.1999 и т.д.
Методы взлома без модификации кода
Очень часто случается, что сразу после выхода программы вслед за ней выходит keygenerator, который определяет правильные регистрационные данные для введенного имени (компании, е-мэйла), которые зарегистрируют эту программу.
Есть несколько приемов, которые сведут возможность написания кейгена практически к нулю.
Первое — использование ассиметричного алгоритма шифрования. Благо на бескрайних просторах Сети такой информации навалом. Наиболее приемлемы в данному случает криптоалгоритмы с открытым ключом (Open-key), в которых используются общий и секретный ключи. Используя имя пользователя как строку для криптования и регистрационный номер как ключ, который известен только Вам, можно полностью исключить написание keygen'а.
Второй способ — не вычислять ключ для введенного имени и сравнивать его с ключом, который введен пользователем. Это лишь на руку взломщику. Гораздо проще по двум (3,4,5:) алгоритмам вычислять контрольную сумму имени и сравнивать ее с контрольной суммой введенного ключа. Если этот способ применен правильно, то для поиска регистрационных данных будет пригоден только Bruteforcing, что для кейгена не подходит (Представьте себе: проверено 10231121 из 1.E34 комбинаций. Время работы: больше года. Please wait:-)))).
Продолжение следует.
P.S. Спасибо за помощь в написании статьи:
GoKs ( goks@theds.com ) and Rotting Corpse ( rotting@theds.com )
Digitally yours, Олег Сквернюк (c) компьютерная газета
За то время, которое я провел в Интернете, я посетил множество сайтов, на которых выложены так называемые cracks, keygens, licenses к различным программам. А на одном из них мне встретилась интересная фраза: "Защита программного обеспечения — это замок на двери вашей программы. Очень часто ключ к этому замку лежит прямо перед дверью или спрятан под ковриком, на котором Вы стоите." Метко и в точку, не правда ли?
Эта статья предназначена для тех разработчиков программного обеспечения, которые еще не сталкивались с профессиональной защитой от незарегистрированного использования.
Материал статьи показывает примеры защиты программного обеспечения для Windows9x (и NT, раз уж на то пошло).
Эта статья раскрывает далеко не все приемы защиты программного обеспечения. Бытует мнение, что хакеры (а точнее кракеры (англ. "crackers")) это уникальные специалисты, с которыми могут бороться лишь такие же кракеры. В большинстве случаев это так и применимо лишь к немногим группам: ex-UCL, Phrozen Crew (www.phrozencrew.org), EbolaVirusCrew (www.ebolaviruscrew.com), The Damned Souls (www.theds.com), OriON, UCF.
В остальных случаях противостоять кракеру/реверсеру в состоянии любой программист и поставить неразрешимую задачу нерадивому взломщику.
ШАРОВАРЫ
Существуют две большие проблемы, касающиеся нелицензионного использования шароварных (коммерческих) программ. Первая — это как не позволить взломщику превратить шароварную версию в полнофункциональную. Вторая — не допустить использования зарегистрированной копии на других компьютерах.
Как создать shareware-продукт
Предлагая коммерческую версию своей программы, автор, прежде всего, преследует 2 цели: показать пользователю возможности программы и, заинтересовав его, предложить купить эту программу. На сегодняшний день наиболее популярны следующие виды создания shareware-продуктов:
1. Demo version. Потенциальный покупатель получает "обрезанную" программу, в которой начисто отсутствуют некоторые функции. Определяющим является то, что теоретически и практически такую демо-версию невозможно превратить в полнофункциональную. Пример: база данных по производителям холодильников содержит в демо-версии данные только по одному региону России. После регистрации заказчику высылается полная база данных.
2. Incomplete software fuctionality. Коммерческая версия программы, которая содержит функции, становящиеся доступными только после регистрации. Важно заметить, что эти функции недоступны только во время периода оценки программы. Сейчас, когда рынок программного обеспечения раздут до невозможности, когда у каждой программы найдется как минимум один аналог, важно представить пользователю уникальные функции, часть из которых ему стоит продемонстрировать, а остальные он должен купить. Пример: графический редактор с полностью работающими графическими функциями, но с отсутствием возможности сохранить результат работы. Главное — правильный выбор функций для их закрытия.
3. Термин использования. Наиболее популярный вид защиты. В этом случае программа предстает перед пользователем "во всей красе". Все функции работают на протяжении определенного отрезка времени, и по его прошествии пользователя просят зарегистрироваться, после чего программа отказывается загружаться. Даже МелкоСофт использует такую схему защиты в бета-версиях своих продуктов.
4. Навязчивое поведение. На всем протяжении срока оценки программы (в простонародье — trial) программа старается досадить пользователю чем-нибудь навязчивым. Например, окном с предложением запуститься при каждом запуске или добавлением строки "Register, mortal user!!!":~) в выходной файл.
5. Upgrade. Новая версия программы изволит установиться, если была установлена более старая ЗАРЕГИСТРИРОВАНАЯ версия.
ПУТИ ВЗЛОМА И ЗАЩИТЫ
В большинстве случаев множество коммерческих продуктов "ломается" по причине того, что авторы программы не имеют понятия о тех методах, которыми пользуются взломщики. Сейчас будут рассмотрены наиболее простые методы взлома и методы защиты от них.
Взлом программ с ограниченным сроком действия.
В данном случае есть несколько методов, которые доступны не только взломщикам, но и простым людям. Один из путей обмана защиты — установить до инсталляции дату на несколько лет (можно и десятков), а после установки программы, которая будет действовать всего несколько недель, перевести дату назад и юзать программу до старости;-).
Первый способ защиты — проверять дату выпуска текущей версии с датой, установленной на этом компьютере, и если разница составляет, например, больше 6 месяцев, то предложить обновить версию и не загружать программу дальше. Более радикальный способ — каждый день проверять дату, и если она была переведена назад, то... "Деинсталлировать программу или уличить пользователя в мошенничестве", — подумаете Вы. НЕ НУЖНО ЭТОГО ДЕЛАТЬ! Ведь в системе пользователя мог произойти сбой даты, времени и т.п. Вот на этот период нужно просто приостановить работоспособность программы. А еще лучше — предложить пользователю вернуть системные часы к правильной дате.
Второй способ — вести внутренний таймер и сравнивать его значения со значением часов. Это иногда довольно сложно реализовать, но, поверьте, овчинка стоит выделки.
Третий способ — для Интернет-программ. С моей точки зрения он наиболее коварен. Во время работы программы можно запрашивать время и дату у так называемых time-сервиров. Этим самым Вы не только защитите часы от перевода времени, но и сделаете доброе дело — подкорректируете работу пользователя по атомным часам:-).
Четвертый способ направлен против тех пользователей, которым не лень раз в месяц (к примеру) деинсталлировать программу и, инсталлировав ее снова, запустить на новый триальный срок. Данные о днях использования можно хранить в системном реестре и не удалять их оттуда при деинсталляции. Альтернативой этому может быть создание неприметного файла в каталоге Windows, который будет выполнять собой роль счетчика и флага окончания trial-срока программы.
Пятый способ защиты при использовании счетчика запусков основан на хранении данных о количестве запусков. Опять же может использоваться реестр, файл и т.п. Естественно, если взломщик увидит что-либо подобное "YourProgramRunsLeft=0", он уже будет знать, где копать. Поэтому эти строки (ключи в реестре) и их значения рекомендуется криптовать тем же банальным XOR'ом наряду со ВСЕМИ остальными строками (ключами в реестре), так или иначе относящимися к Вашей программе.
Шестой способ при использовании счетчика заключается в изменении даты времени какого-нибудь файла. Например, при истечении одного дня изменить дату файла readme.txt с 01.01.2000 на 01.01.1999 и т.д.
Методы взлома без модификации кода
Очень часто случается, что сразу после выхода программы вслед за ней выходит keygenerator, который определяет правильные регистрационные данные для введенного имени (компании, е-мэйла), которые зарегистрируют эту программу.
Есть несколько приемов, которые сведут возможность написания кейгена практически к нулю.
Первое — использование ассиметричного алгоритма шифрования. Благо на бескрайних просторах Сети такой информации навалом. Наиболее приемлемы в данному случает криптоалгоритмы с открытым ключом (Open-key), в которых используются общий и секретный ключи. Используя имя пользователя как строку для криптования и регистрационный номер как ключ, который известен только Вам, можно полностью исключить написание keygen'а.
Второй способ — не вычислять ключ для введенного имени и сравнивать его с ключом, который введен пользователем. Это лишь на руку взломщику. Гораздо проще по двум (3,4,5:) алгоритмам вычислять контрольную сумму имени и сравнивать ее с контрольной суммой введенного ключа. Если этот способ применен правильно, то для поиска регистрационных данных будет пригоден только Bruteforcing, что для кейгена не подходит (Представьте себе: проверено 10231121 из 1.E34 комбинаций. Время работы: больше года. Please wait:-)))).
Продолжение следует.
P.S. Спасибо за помощь в написании статьи:
GoKs ( goks@theds.com ) and Rotting Corpse ( rotting@theds.com )
Digitally yours, Олег Сквернюк (c) компьютерная газета
Компьютерная газета. Статья была опубликована в номере 50 за 2000 год в рубрике soft :: безопасность