как из программы сделать шаровару?
От: Аноним  
Дата: 24.07.07 22:25
Оценка:
Приветствую всех.

Такой вопрос:
как сделать простейший вариант регистрации программы?

Исходя из идеи, что на начальной стадии хорошую защиту лучше не делать.

Я знаю, что не стоит привязываться к серийникам жестких дисков и т.п. А к чему привязываться? К имени==произвольной символьной строке? Как по ней генерировать ключ? Что кроме имени пользователя следует взять за основу для ключа?



Jimmy
Re: как из программы сделать шаровару?
От: Аноним  
Дата: 25.07.07 04:42
Оценка:
Ничего не брать, просто взять ключ жестко зашийтый в программу и заксоренный хеш функцией.
Re: как из программы сделать шаровару?
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 25.07.07 06:34
Оценка: 11 (4) +1
Я в такой ситуации привязывался к email'у покупателя. При покупке регистратор уже знает этот email и сразу генерит код. Маленький психологический момент — таким ключом меньше желания делиться, т.к. сразу засветишь ящик.

Один из простых способов избежать создания кейгенов — сделать так, чтобы регистрационный код считался для данного email'а валидным только тогда, когда выполнено не одно какое-то условие, а много. Но в самой программе проверяется только одно. Когда крякеры эту проверку найдут и сделают кейген, достаточно вместо этой проверки поставить другую. В итоге работающие коды остаются работающими, а кейгены работать перестают. Пример простой реализации — решение системы линейных уравнений Ax=b, где А — известная только автору программы матрица (в программу не заложенная), х — вектор, получающийся из email'a, b — регистрационный код. В программе проверяется одно-два уравнения из системы.
Re[2]: как из программы сделать шаровару?
От: AntZ  
Дата: 25.07.07 10:06
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>Я в такой ситуации привязывался к email'у покупателя. При покупке регистратор уже знает этот email и сразу генерит код. Маленький психологический момент — таким ключом меньше желания делиться, т.к. сразу засветишь ящик.


DM>Один из простых способов избежать создания кейгенов — сделать так, чтобы регистрационный код считался для данного email'а валидным только тогда, когда выполнено не одно какое-то условие, а много. Но в самой программе проверяется только одно. Когда крякеры эту проверку найдут и сделают кейген, достаточно вместо этой проверки поставить другую. В итоге работающие коды остаются работающими, а кейгены работать перестают. Пример простой реализации — решение системы линейных уравнений Ax=b, где А — известная только автору программы матрица (в программу не заложенная), х — вектор, получающийся из email'a, b — регистрационный код. В программе проверяется одно-два уравнения из системы.


Очень грамотные советы, я делал во многом схожую схему, только у меня часть битов была функция от hardware id, благо девайс имел уникальные серийники, а часть битов — функция от других битов ключа. Приведу простейший пример — например ключ 12345 — добавляется новое свойство — сумма цифр должна заканчиваться на ноль — получается 123455, последняя пятерка — это "расширение свойств ключа" — решение системы уравнений из скажем 64 уравнений подарком не будет, да и свойства получаются "разноплановой природы"

Грамотное предложение — оставить часть свойств на будущее. Я бы советовал проверять чуть больше, чем пару свойств ключа, причем делать это в ранных местах и с разной частотой, при этом желательно внести стохастические качества — некоторые свойства проверяются при каждом старте, некоторые при каком-то действии, а некоторые — один раз в 100 запусков Надо подорвать репутацию кейгенщиков — вроде и запускается и работает, но недолго
Re[2]: как из программы сделать шаровару?
От: Аноним  
Дата: 25.07.07 10:22
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>Один из простых способов избежать создания кейгенов


Самый простой способ избежать создания кейгенов — использовать стойкие криптоалгоритмы (например RSA). Серийником в данном случае может служить электронная подпись под данными пользователя (ИД железа, имя/мыло владельца и т.д.)
Останется только защитить код, который будет формировать открытый ключ перед проверкой, но это уже другая история.
Re[3]: как из программы сделать шаровару?
От: AntZ  
Дата: 25.07.07 10:44
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, D. Mon, Вы писали:


DM>>Один из простых способов избежать создания кейгенов


А>Самый простой способ избежать создания кейгенов — использовать стойкие криптоалгоритмы (например RSA). Серийником в данном случае может служить электронная подпись под данными пользователя (ИД железа, имя/мыло владельца и т.д.)

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

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

А вот для генерации ключей эти алгоритмы не очень полезны. Все равно придется в коде делать проверку ключа при старте программы — рано или поздно ее найдут и благополучно сделают кейген (для этого надо вырвать кусок программы). В то, что каждый бинарник будет кастомизироваться под конкретного клиента с его конкретным ID (ИД железа, имя/мыло владельца и т.д.) я не верю.

Противостояние модификации, это, конечно, хорошо, но важнее защититься от keygen, а это именно то, что блестяще описал D.Mon
Re[4]: как из программы сделать шаровару?
От: Alex Kirhenshtein Латвия http://www.netxms.org
Дата: 25.07.07 11:15
Оценка:
Здравствуйте, AntZ, Вы писали:

AZ>А вот для генерации ключей эти алгоритмы не очень полезны. Все равно придется в коде делать проверку ключа при старте программы — рано или поздно ее найдут и благополучно сделают кейген (для этого надо вырвать кусок программы).


В смысле, не очень полезны? Единственный путь для кейгена — заменить в бинарнике открытый ключик своим, для которого известен приватный. И уже на основе этого приватного — сделать кейген. Но это уже не чистый кейген — надо патчить. Хотя шансов, что не сработают различные отложенные проверки — гораздо больше, большинство народа банально забывает проверять валидность своего открытого ключа в бинарнике.
... << RSDN@Home 1.2.0 alpha rev. 679>>
NetXMS: Open Source Network monitoring solution
Re[5]: как из программы сделать шаровару?
От: Interactive  
Дата: 25.07.07 11:30
Оценка:
Неоднозначная и бестолковая тема, есть много мнений от необходимости шифровать все и вся да еще и с онлайн активацией и до мнений что вообще лучше чуть ли ни без защиты а только с табличкой что это не зарегано, которая снимается любым ежиком.
Re[5]: как из программы сделать шаровару?
От: AntZ  
Дата: 25.07.07 11:41
Оценка:
AK>В смысле, не очень полезны? Единственный путь для кейгена — заменить в бинарнике открытый ключик своим, для которого известен приватный. И уже на основе этого приватного — сделать кейген. Но это уже не чистый кейген — надо патчить. Хотя шансов, что не сработают различные отложенные проверки — гораздо больше, большинство народа банально забывает проверять валидность своего открытого ключа в бинарнике.

Одна единственная проверка ключа — это подарок. Ну заложили Вы открытый ключ в бинарник — дальше что? Юзер будет вбивать функцию от приватного ключа, по которой можно его вычислить? Какого размера будет ключ? Как Вы собираетесь проверять валидность ключа в бинарнике?
Re[6]: как из программы сделать шаровару?
От: Аноним  
Дата: 25.07.07 11:55
Оценка:
Здравствуйте, AntZ, Вы писали:

AK>>В смысле, не очень полезны? Единственный путь для кейгена — заменить в бинарнике открытый ключик своим, для которого известен приватный. И уже на основе этого приватного — сделать кейген. Но это уже не чистый кейген — надо патчить. Хотя шансов, что не сработают различные отложенные проверки — гораздо больше, большинство народа банально забывает проверять валидность своего открытого ключа в бинарнике.


AZ>Одна единственная проверка ключа — это подарок. Ну заложили Вы открытый ключ в бинарник — дальше что? Юзер будет вбивать функцию от приватного ключа, по которой можно его вычислить? Какого размера будет ключ? Как Вы собираетесь проверять валидность ключа в бинарнике?



-------------
Друзья, я рад что нашлись собеседники и написали много дельных советов. Но все-таки сабж звучит "как из программы сделать шаровару", а вовсе не "как в шароваре сделать крутую защиту от кряков"

Как я понял, простейшая схема такая:

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


кто-нибудь может дополнить этот алгоритм?
Re[7]: как из программы сделать шаровару?
От: BoberPlus  
Дата: 25.07.07 12:26
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, AntZ, Вы писали:


AK>>>В смысле, не очень полезны? Единственный путь для кейгена — заменить в бинарнике открытый ключик своим, для которого известен приватный. И уже на основе этого приватного — сделать кейген. Но это уже не чистый кейген — надо патчить. Хотя шансов, что не сработают различные отложенные проверки — гораздо больше, большинство народа банально забывает проверять валидность своего открытого ключа в бинарнике.


AZ>>Одна единственная проверка ключа — это подарок. Ну заложили Вы открытый ключ в бинарник — дальше что? Юзер будет вбивать функцию от приватного ключа, по которой можно его вычислить? Какого размера будет ключ? Как Вы собираетесь проверять валидность ключа в бинарнике?



А>-------------

А>Друзья, я рад что нашлись собеседники и написали много дельных советов. Но все-таки сабж звучит "как из программы сделать шаровару", а вовсе не "как в шароваре сделать крутую защиту от кряков"

А>Как я понял, простейшая схема такая:


А>юзер отправляет мне свой е-майл и бабосы

email и баблосы он отправляет регистратору, а не вам

А>я по е-майлу делаю md5

регистратор дергает ваш url, вы на основе данных переданных туда (имя, email, рассовая принадлежность, ...) генерите ключ (можно и md5, но это не надежно)

А>потом фигачу по нему ксором свой ключ



А>и отправляю юзеру получившийся регистрационный код

да

А>а юзер его вводит вместе со своим е-майлом в прогу

А>прога делает то же что и я (ладно, пусть будет по частям в разных местах программы)
А>и определяет, палево или нет
да
Re[8]: как из программы сделать шаровару?
От: AntZ  
Дата: 25.07.07 12:45
Оценка:
А>>юзер отправляет мне свой е-майл и бабосы
BP>email и баблосы он отправляет регистратору, а не вам

Правильно, не влюбленному джигиту — а кунакам влюбленного джигита
(С) Кавказская пленница.

Ход мысли автора интересен — деньги надо посылать в конверте или банковским переводом на счет автора? А вот как товарищ примет мою кредитную карту? Нет... я ему номерок не скажу...

А>>я по е-майлу делаю md5

BP>регистратор дергает ваш url, вы на основе данных переданных туда (имя, email, рассовая принадлежность, ...) генерите ключ (можно и md5, но это не надежно)

А md6 надежно? Вы можете продемонстрировать мне данные, которые сгенерят требуемый мной md5 код, т.е. решить проблему preimage? Пусть данные, будут не мои — найдите свой вектор, который сгенерит тот-же самый md5. Нобелевскую премию по математике Вам не дадут — Нобель не любил математиков, но почет и уважение — гарантированы. Вот тогда будете говорить о ненадежности md5

А>>потом фигачу по нему ксором свой ключ

BP>

Логично — иначе прога будет считать тот-же md5 от email и будет тупая единственная проверка. В отличие от системы линейных уравнений md5 не обладает свойством "разложения" на кучу более элементарных проверок. Появившийся кeygen положит конец Вашей защите — алгоритм защиты поменять нельзя — рухнут все существующие юзеры. Вот как раз XOR с этим ключом и нужен, чтобы проверять свойства этого ключа

А>>а юзер его вводит вместе со своим е-майлом в прогу

А>>прога делает то же что и я (ладно, пусть будет по частям в разных местах программы)
А>>и определяет, палево или нет
BP>да

Вот это как раз делать опасно. Прога должна обладать свойством изменяемости. Сменили алгоритм проверки ключа — валидные ключи продолжают работать, а сгенеренные кейгеном — перестали. Если не ошибаюсь, мелкософт проделывал такой фокус с сервис паками — после наложения сервис паков кейгены отваливались.
Re[9]: как из программы сделать шаровару?
От: BoberPlus  
Дата: 25.07.07 13:24
Оценка:
Здравствуйте, AntZ, Вы писали:

А>>>я по е-майлу делаю md5

BP>>регистратор дергает ваш url, вы на основе данных переданных туда (имя, email, рассовая принадлежность, ...) генерите ключ (можно и md5, но это не надежно)

AZ>А md6 надежно? Вы можете продемонстрировать мне данные, которые сгенерят требуемый мной md5 код, т.е. решить проблему preimage? Пусть данные, будут не мои — найдите свой вектор, который сгенерит тот-же самый md5. Нобелевскую премию по математике Вам не дадут — Нобель не любил математиков, но почет и уважение — гарантированы. Вот тогда будете говорить о ненадежности md5


md5 здесь ни при чем, я просто неясно выразился (хотя sha1 понадежнее будет ) Я имел в виду саму схему — хэш от данных пользователя, keygen делается на раз выдиранием куска кода, это вообще-то классика уже.

А>>>потом фигачу по нему ксором свой ключ

BP>>

...
AZ>Вот это как раз делать опасно
...

На данном этапе жизни топикстартера это все не надо Только лишней информацией мозг засорять. Будут клиенты (хотябы десяток), купит навесную защиту и разошлет старым пользователям новые ключи.
Re[9]: как из программы сделать шаровару?
От: Аноним  
Дата: 25.07.07 13:27
Оценка:
Здравствуйте, AntZ, Вы писали:

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


Объясните пожалуйста как это сделать
Re: как из программы сделать шаровару?
От: Xander Zerge Россия www.zerge.com
Дата: 25.07.07 13:38
Оценка: 3 (2)
Здравствуйте, <Аноним>, Вы писали:

А>как сделать простейший вариант регистрации программы?


А>Исходя из идеи, что на начальной стадии хорошую защиту лучше не делать.


А>Я знаю, что не стоит привязываться к серийникам жестких дисков и т.п. А к чему привязываться? К имени==произвольной символьной строке? Как по ней генерировать ключ? Что кроме имени пользователя следует взять за основу для ключа?


Простейший вариант, это взять бесплатный SoftwarePassport (Armadillo) и обернуть им экзешник. За бесплатность придётся продавать только через одного из DigitalRiver-регистраторов, которые эту штуку дают, ShareIt или RegNow, например. Потом можно купить и нормальный, за сколько-то там сотен баков, и уйти на более выгодного регистратора, если понадобится (вот Plimus тут любят очень).
Работы — настроить проект, вставить пять строчек в код программы (подключить ашку, пометить две секции кода, одна из которых должна работать только в триале, а другая — только в полной версии).
Всё. Напоминания, предложения ввода ключа, проверки — всё берёт на себя навешенная защита. Там же можно поиграться с разными уровнями и степенями защиты, включая привязку к железу.
Регистраторы поддерживают эту защищалку, потому никакого траха с URL-ом для ключегенерилками на собственном сайте не нужно.
Если последуете этому совету, то посоветую тогда ещё для настройки проекта пользоваться интерфейсом Armadillo, а не SoftwarePassport — проще, понятнее, рюшечек нет.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Серёжа Новиков,
программист
Re[10]: как из программы сделать шаровару?
От: AntZ  
Дата: 25.07.07 13:51
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, AntZ, Вы писали:


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


А>Объясните пожалуйста как это сделать


Так D.Mon все объяснил. Очень красивая и простая схема, понятно что надо довести до ума, но в его посте более чем достаточно информации для реализации схемы. Скажу честно — D.Mon дал мне некоторые идеи по реализации, за что ему большое спасибо.

Плюсы метода
1) Простой keygen — решить систему линейных уравнений — проще простого
2) Множество простых проверок ключа, которые легко размазать по коду
3) Защита для апдейтов — в программу внедряется только часть матрицы, в следующую версию другая часть и т.д. — полноценный keygen не сделать

В общем, грамотное решение и простое
Re[10]: как из программы сделать шаровару?
От: AntZ  
Дата: 25.07.07 13:52
Оценка:
BP>На данном этапе жизни топикстартера это все не надо Только лишней информацией мозг засорять. Будут клиенты (хотябы десяток), купит навесную защиту и разошлет старым пользователям новые ключи.

Покажите мне нормальную навесную защиту для Windows Mobile!
Куплю сразу. Только чтобы продукт живой был. Нету!
Re[11]: как из программы сделать шаровару?
От: BoberPlus  
Дата: 25.07.07 14:00
Оценка:
Здравствуйте, AntZ, Вы писали:


BP>>На данном этапе жизни топикстартера это все не надо Только лишней информацией мозг засорять. Будут клиенты (хотябы десяток), купит навесную защиту и разошлет старым пользователям новые ключи.


AZ>Покажите мне нормальную навесную защиту для Windows Mobile!

AZ>Куплю сразу. Только чтобы продукт живой был. Нету!

А он разве под Mobile пишет ?
Re[12]: как из программы сделать шаровару?
От: AntZ  
Дата: 25.07.07 14:05
Оценка:
AZ>>Покажите мне нормальную навесную защиту для Windows Mobile!
AZ>>Куплю сразу. Только чтобы продукт живой был. Нету!

BP>А он разве под Mobile пишет ?


Я под Mobile пишу
Re[2]: как из программы сделать шаровару?
От: BoberPlus  
Дата: 25.07.07 14:18
Оценка:
Здравствуйте, Xander Zerge, Вы писали:

XZ>Здравствуйте, <Аноним>, Вы писали:


А>>как сделать простейший вариант регистрации программы?


А>>Исходя из идеи, что на начальной стадии хорошую защиту лучше не делать.


А>>Я знаю, что не стоит привязываться к серийникам жестких дисков и т.п. А к чему привязываться? К имени==произвольной символьной строке? Как по ней генерировать ключ? Что кроме имени пользователя следует взять за основу для ключа?


XZ>Простейший вариант, это взять бесплатный SoftwarePassport (Armadillo)бесплатный SoftwarePassport (Armadillo) и обернуть им экзешник. За бесплатность придётся продавать только через одного из DigitalRiver-регистраторов, которые эту штуку дают, ShareIt или RegNow, например.


Хочу уйти от аспра (и так ясно почему), где бы побольше почитать на эту тему ? На siliconrealms ничего бесплатного не нашел.

Правильно ли я вас понял, что можно продавать через любого DR регистратора (т.е. regsoft и emetrix тоже) ? Может ссылка какая есть ?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.