Защита своей программы + сборка + инсталляшка
1. Как защитить свою программу. Т.е. грамотно проработать ввод серийника, например, кол-во запусков, если серийник не введен. Тут я чайник и даже мыслей не имею как это грамотно сделать.
2. Как собрать программу, чтобы она запускалась без требований библиотек на машинах, на которых Visual не установлен.
3. Как создать инсталляшку. Стандартные средства почему-то отстутствуют. Юзаю visual 2005.
Спасибо.
Как создать инсталляшку
Например есть прога CreateInstall. http://www.createinstall.com
1. Как защитить свою программу. Т.е. грамотно проработать ввод серийника, например, кол-во запусков, если серийник не введен. Тут я
чайник и даже мыслей не имею как это грамотно сделать.
Никак :).
Судя по остальным вопросам, уровня подготовки не хватит, чтобы сделать это грамотно. Без обид. Хакеры нынче действительно хорошо подготовлены и поломать любую твою защиту смогут меньше, чем за сутки. Если, конечно, вообще заинтересуются программой (как в анекдоте про "неуловимого" Джона).
С другой стороны, среднестатистический пользователь всё тупее и тупее. Поэтому против него элементарно подойдут маленькие дешевые трюки типа "секретного" ключа в реестре. Особенно в ветке HKLM\Software\Classes\CLSID\. Ну положи там какую-нибудь величину, зависящую от компьютера. Например, запусти втихоря systeminfo и сделай нетривиальное преобразование "Original install date". Таким образом, дабы "поломать" твою программу придется залезать в её код, т.к. не будет универсального ключа, подходящего всем компьютерам.
Число запусков храни там же. Только сделай хотя бы простое преобразование, чтобы нельзя было понять, что именно означает число, допустим, 34565.
Вообще на эту тему заморачиваться смысла особого нет. Ибо защита, написанная и за день, и за месяц, ломается одинаково быстро. А свое потраченное время жалко.
Если действительно хочется сделать профессионально, то следует начать с изучения математики. А именно алгоритмов шифрования и цифровой подписи, аутентификации, разделения ключей. Потом изучить ассемблер. Далее понять в деталях принципы функционирования программ в операционной системе. Что такое DLL, что такое исполняемый модуль, как они связаны. Что кроется под словом "рантайм", как линкер собирает файл из объектных модулей. Как функционирует отладчик, и многое другое. Это потребует дофига времени. И даже после изучения всего этого (причем детальнейшего) потребуется еще огромная куча времени, чтобы написать нормальную защиту, которая потребует месяц, а то и два, работы хакера. Но даже при этом - вряд ли больше.
Игра не стоит свеч в проектах, написанных одним-двумя программистами.
Собственно из этого вопроса и вытекает невозможность написания хорошей защиты. В опциях проекта выбери Linker->C\C++->Code Generation. Runtime Library = Multi-thread или Multi-thread Debug. А перед этим почитай в MSDN, что это такое.
Кстати нащёт предыдущего поста, о том что надо учить ассемблер, то неправда, пусть лучше взломщики код сгенерированный языком более высокого уровня разгребают.
Вообщем когда он ломанёт, программа будет уже неактуальна ггг.
ps.я в защите валенок полный, но мысли сами напрашиваются.
Если напихать программу всевозможными ф-ями проверки лицензии, а потом в хаотичном порядке на каждом действии программы их проверять разными ф-ми, причём зделать так чтобы каждая часть контроллировала только часть той самой лиценции
Много проверок во всех подряд местах? Как мне кажется, если кто и сделает такое, то никто не будет устранять проверки, а просто взламывающий возьмётся искать, как бы так сделать, чтобы лицензия считалась правильной. Никто не делает патчи на один известный антивирус, но для него есть ключи и "вечный триал".
Много проверок во всех подряд местах? Как мне кажется, если кто и сделает такое, то никто не будет устранять проверки, а просто взламывающий возьмётся искать, как бы так сделать, чтобы лицензия считалась правильной. Никто не делает патчи на один известный антивирус, но для него есть ключи и "вечный триал".
Да но чтобы ему отгадать ключ лицензии - надо будет пройти все те проверки которые в хаотичном порядке и отвечают за данный кусок ключа, тоесть в итоге найти пересечение множеств всех этих проверок. так что помучатся таки придётся :p
Вообще да, но в любом случае проверки надо делать какие-нибудь хитрые. Если будет
if (!ok) Nafig();
то это просто изменится людьми для кого плохими, для кого хорошими на
if (0) Nafig();
поэтому всё-таки мозгами пошевелить придётся.