Ещё одна защита ваших shareware программ и как её снять
Автор: Bad_guy
WEB сайт: http://cracklab.narod.ru
Многие люди стремятся заниматься программированием, но существует и такая часть компьютерных профессионалов, как крэкеры, причём крэкеры не стесняются обычно заниматья и программированием тоже.
Существует слух, что крэкер серьёзной программы не напишет, с этим мнением мне лично сложно согласиться, однако если представить человека погружённого в крэк целиком, естественно можно предположить, что серьёзнее кеймекера он программы не напишет. Всё же большинство крэкеров не абсолютные энтузиасты и равно как и крэком любят заниматься и программироаванием, а может даже больше программированием, к коим я, собственно говоря, и отношусь.
... Время шло, мой опыт рос, и в один прекрасный момент мою голову поразила мысль о том, что надо бы интернет - то как-нибудь окупать, вот и решил я тогда взять ноги в руки, прокопать как следует свои дельфовые проекты и создать коммерческий продукт. Есть идея - есть дело и через пару недель мой первый коммерческий проект был закончен, не буду вам говорить что это за программа, скажу лишь что продавать её я решил только на западе, потому что у нас в стране хроническая привычка покупать софт только в переходах метро, может быть конечно это и неплохо, ну да ладно...
Во время написания этой программы я не мог не удилить внимания её защите, ведь можно сказать это моя слабость, а можно и - специализация, но защиту эту поленившись я конечно придумал не 100% надёжности, да и понадеялся, что за её цену на Западе даже и руки не станет пачкать никакой крэкер (зря я конечно так-то сам ведь знаю, что здесь энтузиазм главное), кстати, почитав конференцию шароварщиков я понял, что выход крэка не подрывает целиком их бизнес, только малая доля потенциальных покупателей использует крэк, остальные - всё равно купят (для России я думаю дело всё-таки обстоит иначе), ну, пожалуй хватит лирики...
Суть моего метода защиты в программе была такова:
Сначала я написал всю программу. Назвав её Freeware, можно было бы её выкладывать, но как бы не так (теперь я вообще наверно не одной фриверки не напишу - деньжатами запахло), затем я стал предпринимать попытки навешать всяких нагов и ограничений и это у меня тоже получилось. Защита была организована так:
решено было использовать ключ, регистрационное имя в вычисление ключа не входило. В тех местах, где было ограничение (например, вместо окна сохранения, нажав кнопку "сохранить" вы получаете сообщение "Отключено в незарегверсии") я вставил вызов процедуры-пустышки, программа шла в ту пустышку, пустышка усиленно что-то шифровала, складывала, делила и _ВСЕГДА_ возвращала значение переменной, допустим число "17", этот значение сравнивалось с оригиналом и если не совпадало, происходил выход из программы, а если совпадало, то в переменную где было "17" записывался "0" и программа спокойно продолжала работать. В чём сила, брат, спросите вы ? А вот в чём вся сила: адрес этой вызываемой процедуры был не указан внутри кода, то есть было сделано не так:
а вот так:
Mov eax, regprocaddr
Call eax
|
причём если regprocaddr не был известен (был равен 0 в незарегистрированной версии), то конечно программа показывала сообщение "Отключено в незарегверсии" и не шла в тот код, regprocaddr же каждый пользователь получал следующим образом:
regcode, который присылался пользователю состоял из двух частей long integerов, в строковом формате, эти две части xorились и это и есть regprocaddr. Теперь было так: если regprocaddr > 0 тогда программа попадала на этот код:
Mov eax, regprocaddr
Call eax
|
и если regprocaddr был неправильный, то программа вызывала черт знает что вместо процедуры и естественно вылезал exception, а если даже и попадала в какую-то процедуру, то всё равно вероятность того, что та процедура вернёт в переменную значение "17" нулевая и программа всё равно завершит работу.
Вы, прочитав всё вышесказанное, скажете: а я обойду твою процедуру и сравнение с "17" тоже, согласен, но вы никогда не сможете подобрать regcode и обязательно должны будете попатчить программу, а этот портит всю красоту взлома, а, да я ещё не так прост и вам будет надо патчить прогу в 7-10 местах так-то, а теперь представьте себе ваш патчер, который будет пропатчивать 60-100 байт - во веселье-то.
Так что, как видите, мною была осуществлена 100% защита от подбора ключа и слабенькая защитка от патча (расситанная в основном на отсутствие упорста у крэкера). Для полного понта я ещё и запаковал программу компрессором, ну ещё одна подножка неупорному крэкеру (в моей голове уже давно зараждается мысль "поправить" исходники UPX и таким образом создать свой компрессор). Самая главная пакость этого метода защиты (для меня) это то, что зная один правильный регистрационный код можно сделать кеймекер и я даже не узнаю какой из "законопослушных" "зарегистрированных" пользователей так постарался. А вообще я не жадный, получу 100$, а потом уж пускай хоть всю изломают эту защиту - для меня программа (интернет) уже окупится.
P.S. Вот найдите теперь эту мою crackme.exe и потренируйтесь на практике, а то я уверен, что многие кто это всё прочитал не очень врубились в смысл.
Удачи вам в вашей деятельности, чем бы вы ни занимались, Bad_guy.
|