Delphi World - Ещё одна защита ваших shareware программ и как её снять
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Ещё одна защита ваших shareware программ и как её снять

Автор: Bad_guy
WEB сайт: http://cracklab.narod.ru

Многие люди стремятся заниматься программированием, но существует и такая часть компьютерных профессионалов, как крэкеры, причём крэкеры не стесняются обычно заниматья и программированием тоже.

Существует слух, что крэкер серьёзной программы не напишет, с этим мнением мне лично сложно согласиться, однако если представить человека погружённого в крэк целиком, естественно можно предположить, что серьёзнее кеймекера он программы не напишет. Всё же большинство крэкеров не абсолютные энтузиасты и равно как и крэком любят заниматься и программироаванием, а может даже больше программированием, к коим я, собственно говоря, и отношусь.

... Время шло, мой опыт рос, и в один прекрасный момент мою голову поразила мысль о том, что надо бы интернет - то как-нибудь окупать, вот и решил я тогда взять ноги в руки, прокопать как следует свои дельфовые проекты и создать коммерческий продукт. Есть идея - есть дело и через пару недель мой первый коммерческий проект был закончен, не буду вам говорить что это за программа, скажу лишь что продавать её я решил только на западе, потому что у нас в стране хроническая привычка покупать софт только в переходах метро, может быть конечно это и неплохо, ну да ладно...

Во время написания этой программы я не мог не удилить внимания её защите, ведь можно сказать это моя слабость, а можно и - специализация, но защиту эту поленившись я конечно придумал не 100% надёжности, да и понадеялся, что за её цену на Западе даже и руки не станет пачкать никакой крэкер (зря я конечно так-то сам ведь знаю, что здесь энтузиазм главное), кстати, почитав конференцию шароварщиков я понял, что выход крэка не подрывает целиком их бизнес, только малая доля потенциальных покупателей использует крэк, остальные - всё равно купят (для России я думаю дело всё-таки обстоит иначе), ну, пожалуй хватит лирики...

Суть моего метода защиты в программе была такова: Сначала я написал всю программу. Назвав её Freeware, можно было бы её выкладывать, но как бы не так (теперь я вообще наверно не одной фриверки не напишу - деньжатами запахло), затем я стал предпринимать попытки навешать всяких нагов и ограничений и это у меня тоже получилось. Защита была организована так: решено было использовать ключ, регистрационное имя в вычисление ключа не входило. В тех местах, где было ограничение (например, вместо окна сохранения, нажав кнопку "сохранить" вы получаете сообщение "Отключено в незарегверсии") я вставил вызов процедуры-пустышки, программа шла в ту пустышку, пустышка усиленно что-то шифровала, складывала, делила и _ВСЕГДА_ возвращала значение переменной, допустим число "17", этот значение сравнивалось с оригиналом и если не совпадало, происходил выход из программы, а если совпадало, то в переменную где было "17" записывался "0" и программа спокойно продолжала работать. В чём сила, брат, спросите вы ? А вот в чём вся сила: адрес этой вызываемой процедуры был не указан внутри кода, то есть было сделано не так:


Call 40152A

а вот так:


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.

Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования