Защита программы
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 16.01.02 14:19
Оценка:
Добрый день, уважаемые!

Приглашаю всех поделиться своим опытом по защите программ.

Пишу прогу на заказ, и вот встал перед вопросом — требуют писать защиту (логин/пароль). Прога завязана на интернет, то есть основную массу своей работы делает именно там.

В результате долгих размышлений и прочтения кучи статей пришел к выводу, что:

1. Надо бы юзать крипто (что-то типа RC5).
2. Если не крипто, то хотя-бы CRC32 как вспомогательную вещь при генерации ключа.
3. Прямые проверки типа


if(blabla) {}//Registered;
else {} // Mazafaka


быренько минут за 10 херятся (сам пробовал не раз)

4. Сразу кричать, что введенная информация неверна, негоже.
5. Ну и еще масса мыслей.

И вдруг пришло понимание , что _ВСЕ_РАВНО_ без прямой проверки где-либо в коде не обойтись (в итоге — смена двух байт в проге и опаньки). Да, раскидаю я проверку по разным частям проги, сделаю таблицу переходов при промежуточных вычислениях, буду это дело в потоках отдельных пускать, буду множить данные неоднократно, чтобы запутать крекера — но все равно сравнение введенного ключа с эталонным(вычисленным из введенного логина) будет!!!

Грустно мне стало, в общем... Суровой защиты не нужно, главное, чтобы на взлом уходило больше недели (во всяком случае чтобы не через 10 минут)...

Поэтому и спрашиваю — отцы, кто уже поимел опыт? Поделитесь, еси не жалко... Не кодом, а алгоритмикой задачи хотя-бы...

И вообще — может стоит открыть новый форум, посвященный защите программ?
Re: Защита программы
От: TepMuHyc  
Дата: 16.01.02 14:43
Оценка: 46 (5)
Здравствуйте Flamer, Вы писали:

F>И вдруг пришло понимание , что _ВСЕ_РАВНО_ без прямой проверки где-либо в коде не обойтись (в итоге — смена двух байт в проге и опаньки). Да, раскидаю я проверку по разным частям проги, сделаю таблицу переходов при промежуточных вычислениях, буду это дело в потоках отдельных пускать, буду множить данные неоднократно, чтобы запутать крекера — но все равно сравнение введенного ключа с эталонным(вычисленным из введенного логина) будет!!!


Ответ примерно такой:
A) эталонного ключа быть не должно (и как следствие — сравнения тоже).
Проще говоря — регистрационный ключ должен просто удовлетворять некоторым условиям
(довольно сложным и неочевидным)

Б) введенный регистрационный ключ использовать для расшифровки программы или ее куска.
Но здесь проблема в том, что мы должны иметь РАЗНЫЕ ключи для разных пользователей
и в то же время эти разные ключи должны расшифровывать одинаковый код.
То есть проблема примерно такая: один Private Key --> много Public Key

Теперь некоторые рекомендации по затруднению трейсинга.
1) Программу ликуй со статической версией CRT библиотеки.
2) после ввода ключ оставляй на стеке.
3) затем, сделай несколько "холостых" malloc'oв (случайное число) и в какой-нибудь
из них положи ключ. free на такие malloc'и вызывать не надо.
4) Адрес ключа не храни в глобальной переменной. Лучше всего — в мембере какого-нибудь
класса. Это относится ко всем данным связанным с защитой.
5) Активно используй (и передавай) ключ при помощи PostMessage()
6) Все security-related действия выполняй в несколько шагов. И от шага к шагу переходи при помощи PostMessage и "как бы случайно".
7) При выявлении факта взлома не выводи никаких сообщений — просто начинай портить
программе данные и хип. В итоге она сдохнет как бы "естественно".
А кракер будет думать что это он криво кракнул.
____________________
God obviously didn't debug, hasn't done any maintenance, and no documentation can be found. Truly amateur work.
Re: Защита программы
От: The Lex Украина  
Дата: 16.01.02 14:52
Оценка:
Здравствуйте Flamer, Вы писали:

F>Добрый день, уважаемые!


F>Приглашаю всех поделиться своим опытом по защите программ.


F>Пишу прогу на заказ, и вот встал перед вопросом — требуют писать защиту (логин/пароль). Прога завязана на интернет, то есть основную массу своей работы делает именно там.


F>...


IMHO: взломать можно все! Вопрос лишь в соизмеримости ратрат на разработку защиты, на стоимость ПО, на взлом. Проблемы стары, как мир: создать изощренную защиту — дополнительные затраты на разработку, что увеличивает себестоимость ПО, а также дополнительные проблемы для "лицензионного пользователя".

Если ПО очень дорогое (заказное, разного рода промышленные САПР, АСУ и т.п.) оно защищается довольно неплохо и ставка делается именно на "максимальное удобство для пользователя". При этом используется ПО фирм, специализирующихся на разработке средств защиты: Rainbow например...

Если ПО "массовое", никто не станет тратиться на аппаратный ключ для каждого отдельного экземпляра. Это во-первых. А во вторых — насколько это увеличит стоимость ПО? Гораздо проще подвести под это законодательную базу (что и делается сейчас, по крайней мере в Украине) и "бить нужных людей по голове".

Если ПО скажем так "специальное" и должно стоить "разумно" — то тут надо бы найти ту четкую грань между тем, что выгоднее (и надежнее) — пользоваться взломанным ПО, причем с вероятностью потери работоспособности и проблемами с поддержкой производителем, или все же купить его и жить спокойно. Проблема здесь похожа на то, что лучше: ворованный товар (автомобиль, телевизор) или нормально купленный?

Это такое мое короткое мнение... А что касается технологии — материалов масса: "кто ищет..."
Голь на выдумку хитра, однако...
Re: Защита программы
От: ua1zcl Россия www.alexklm.ru
Дата: 16.01.02 19:55
Оценка:
Здравствуйте Flamer, Вы писали:

F>И вообще — может стоит открыть новый форум, посвященный защите программ?


У меня тоже зреют мысли о предстоящей защите программы. Только материалов о способах , похожих как в The Bat! v1.38, я не нахожу. Я пытался взломать его, но бросил эту затею. Взломать Консультант Плюс было проще, хотя там VXD написали чтобы прочитать дату в BIOS, зачем то. А данные о компьютере надо собирать, и на этой основе делать ключ. Только параметры эти со временем могут быть изменены пользователем. Вот и думай, как быть? Буду следить за этой темой и далее.
Александр
Re: Защита программы
От: MrOrbit Россия  
Дата: 16.01.02 20:17
Оценка:
Здравствуйте Flamer, Вы писали:

Если прога работает много с инетом, сделай сервак, через который
будет проверяться валидность ключа, тогда кей ген написать будет нельзя.

А для гото что бы было сложнее взламывать прогу, вырежь ее кусок, (в смысле кусок кода)
и положи отдельно, а затем дешифрую и запускай.

А главное помни!

Если программа запускается — она может быть взломана!
Re: Защита программы
От: AMurchick  
Дата: 19.01.02 15:18
Оценка:
F>Пишу прогу на заказ, и вот встал перед вопросом — требуют писать защиту (логин/пароль). Прога завязана на интернет, то есть основную массу своей работы делает именно там.

Используй логин/пароль как ключ к декриптовке "некоторых данных", от правильности которых зависит работа программы.
Причем эти "некоторые данные" для каждого юзера, естественно, разные — поэтому, исходя из условий, их можно получать с сервера, в зависимости от логин/пароль (чтобы неперестраивать прогу для каждого позльзователя).
Re: Защита программы
От: ABCDEFG  
Дата: 28.09.03 09:07
Оценка:
На сервере в инете сделать регистрацию, при которой привязывается к компу (MAC, материнка, биос, в общем-то и MACa достаточно). Дабы не ломанули проверку необходимо ее защитить StarForce3.0. (защищенные файлы StarForce не трасируется, не дизассемблируется WinIce), в результате получишь достаточно надежную защиту. А если можно протрассировать или дизассемблировать, то даже хитрые скрытые проверки можно ломануть.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.