Задача: снять защиту с программы, которая защищена от копирования. Путём экспериментов удалось выяснить, что программа имеет привязку к определённому компьютеру. При копировании на другой компьютер, программа видит разницу, и работать отказывается.
К сожалению, рассказать, что за программа, и против кого работаем, я не могу. Всё по работе и всё строго конфиденциально.
Решение: скачиваем программу PEiD для определения компилятора, выясняем, что программа написана на Visual Studio C#. Качаем программу ILSpy в качестве дизассемблера и ставим на неё плагин Reflexil, позволяющий модифицировать код и сохранять изменения.
Открыв исполняемый файл дизассемблером, изучаем механизм защиты. Программа считывает контрольные суммы всех важных файлов, в том числе себя самой, получает данные о процессоре компьютера, шифрует данные, проверяет наличие файла лицензии, сверяет хеши полученных данных с хешами файла. Далее проверяет наличие двух секретных ключей в реестре, и если хоть одна из вышеперечисленных проверок не прошла успешно, закрывает доступ к функциям программы путём блокирования рабочей вкладки.
Рабочая вкладка блокируется установкой свойства Enabled в ноль. Возникает мысль заменить этот ноль на единицу :) Меняем.
Было:

Стало:

Теперь всё работает на любом компьютере! С точки зрения программы, происходит следующее: исполняемый файл модифицирован, компьютер не соответствует лицензии, или файла лицензии нет вообще, но доступ к рабочим функциям нужно дать всё равно :)
Но по своим соображением, я не стал останавливаться на лёгкой победе, а потратил еще пару дней, разобрался в механизме шифрования, и написал свой собственный проект на C#, который генерировал файлы лицензий для любого компьютера. Вуаля!
Нужно будет не забыть, что если придётся писать программу, содержимое которой необходимо защитить, .NET технологиями пользоваться не стоит. Вообще, из меня вышел бы отличный Четырнадцатый в отряде гномов! Меня очень заводит, когда удаётся силой разума проникнуть туда, куда другие люди силой разума старались меня не пустить :)
Записал на случай, если через пару лет придётся проделать это снова.
No comments:
Post a Comment