Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Можно ли из нескольких лиспов и меню сделать программу с активационным ключом?

Можно ли из нескольких лиспов и меню сделать программу с активационным ключом?

Ответ
Поиск в этой теме
Непрочитано 26.11.2008, 16:55 #1
Можно ли из нескольких лиспов и меню сделать программу с активационным ключом?
Red Nova
 
ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Торонто
Регистрация: 23.10.2007
Сообщений: 1,980

Есть ли возможность простым методом сделать из совокупности лисп кодов и меню программу хоть по минимуму защищенную от взлома? Так чтобы поставил программу на конкретный компьютер вписал активационный ключ, который неким образом связан скажем с mac адресом конкретного компьютера. Затем программа устанавливается на компьютер, но так чтобы нельзя было просто скопировать ее на другой компьютер и прописать в автозагрузку Автокада.
__________________
Блог
Просмотров: 14828
 
Непрочитано 26.11.2008, 19:18
#2
gipro

лайсенсед инжиниа
 
Регистрация: 15.04.2006
город-герой Волгоград (Сталинград)
Сообщений: 1,158


ну да... vlx-файлы можно защищать. Да и lisp с защитой я встречал, но защиты хватило минут на 5...
gipro вне форума  
 
Непрочитано 26.11.2008, 20:44
#3
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Ну как вариант с помощью vl-registry-write, vl-registry-read записать в реестр пару ключей - один - тупо проверка есть он или нет, ну что-то вроде если его нет - то (alert "Незарегистрированная копия..."), а во втором (специально чтоб взлом более 5-ти миут длился), данные, да или кусок кода, из самой сложной функции (а лучше двух) в которой самому, на 5-ый день после написания самому толком не разобраться. При всей простоте метода, без рабочей (только с украденной) копией "взломать" будет ох как не просто.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 26.11.2008, 22:42
#4
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


Дима_,
Можешь на примере показать? Допустим самый простой лисп нужно защитить. Скажем этот
Код:
[Выделить все]
;Программа для нумерации столбов мтекстов по принципу координаты Y

(defun C:NUM ( / ss start i lst ed str )
  (vl-load-com)
  (and (setq start (getint "\nНачальный номер <выход>: "))
       (setq ss (ssget "_:L" '((0 . "*TEXT"))))
       (setq lst nil i '-1)
       (repeat (sslength ss)
	 (setq lst (cons (ssname ss (setq i (1+ i))) lst))
	 )
       (setq lst (vl-sort lst '(lambda (e1 e2)
				 (> (caddr(assoc 10 (entget e1)))(caddr(assoc 10 (entget e2))))
				 )
			  )
	     )
       (foreach e1 lst
	 (setq ed (entget e1))
	 (setq str (cdr(assoc 1 ed)))
	 (setq ed (subst (cons 1 (itoa start))
			 (assoc 1 ed)
			 ed)
	       )
	 (entmod ed)
	 (setq start (1+ start))
	 )
       )
  (princ)
  )
__________________
Блог
Red Nova вне форума  
 
Непрочитано 26.11.2008, 22:54
#5
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


Red Nova, вряд ли ты в открытом форуме дождешься работающей системы защиты.
Кстати, код, скажем так, не совсем корректный в общем случае и при заявленных условиях выбора объектов.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.11.2008, 23:38
#6
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


Кулик Алексей aka kpblc,
Цитата:
Red Nova, вряд ли ты в открытом форуме дождешься работающей системы защиты.
Да собственно мне подойдет и самый простой вариант, ничего особо сверхзащищенного. Я продавать то ничего не намерен. Это так, от "любопытных теток" защита.
Цитата:
Кстати, код, скажем так, не совсем корректный в общем случае и при заявленных условиях выбора объектов.
А лисп не мой, это к VVA , хотя я сбоев не наблюдал и всем доволен.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 27.11.2008, 00:08
#7
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


Хорошо вариант (скажу честно) будет хоть как-то работать только в компилированном лиспе (fas / vlx)
Ну, например, самое простое: проверять значение (getenv "USERNAME") и / или (getenv "COMPUTERNAME"). Если значение не попадает под указанный диапазон или маску, вываливать сообщение типа "Воровать нехорошо"
Остальное, что мне приходит в голову, достаточно сложно в реализации.
---
Добавлено: насчет лиспа... В таком виде он будет гарантированно работать только с многострочными текстами, длина строки которых (включая служебные символы и добавляемый номер) не превышает 255 символов. Для однострочных текстов - только если текст имеет выравнивание влево вверх. Я не уверен, но, возможно, будут определенные проблемы при работе не в мировой системе координат.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 27.11.2008, 02:58
#8
Димас

джедай
 
Регистрация: 31.01.2005
Магадан
Сообщений: 460
<phrase 1=


а если чуть усложнить?
в принципе активация большинства програм по этому способу сделана:
берете любую переменную допустим ту же (getenv "USERNAME")
производите с ней некоторые действия - допустим представить все буквы числами и умножить на 2 - это будет код активации
для активации программы - acadinfo - полученный файл пользователь дает вам, вы, выбрав нужные переменные, генерируете ключ, отсылаете его пользователю

если привязаться к мак адресу - прийдется каждый раз исходник программы править

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

Последний раз редактировалось Димас, 27.11.2008 в 03:05.
Димас вне форума  
 
Непрочитано 27.11.2008, 02:59
#9
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Эх все равно не спиться:
Вот программа из 4 поста с защитой (обрати внимание добавленны 2 новые переменные):
Код:
[Выделить все]
(defun C:NUM ( / ss start i lst ed str F temp)
  (vl-load-com)
(if (vl-registry-read "HKEY_CURRENT_USER\\SECRET\\NUMCOD"); простая проверка 
(progn
       (and (setq start (getint "\nНачальный номер <выход>: "))
       (setq ss (ssget "_:L" '((0 . "*TEXT"))))
       (setq lst nil i '-1)
       (repeat (sslength ss)
	 (setq lst (cons (ssname ss (setq i (1+ i))) lst))
	 )

; Это секретная часть программы не вскрываемая без рабочей копии
(if (vl-registry-read "HKEY_CURRENT_USER\\SECRET\\NUMCOD")
(progn
(setq temp (vl-filename-mktemp "secret.lsp") F (open temp "w"))
(princ (vl-registry-read "HKEY_CURRENT_USER\\SECRET\\NUMCOD") F)
(close F)
(load temp)
(vl-file-delete temp)
);end of progn
(alert "Бесплатный только сыр в мышеловке")
);end of if   
; Конец секретной части  

       (foreach e1 lst
	 (setq ed (entget e1))
	 (setq str (cdr(assoc 1 ed)))
	 (setq ed (subst (cons 1 (itoa start))
			 (assoc 1 ed)
			 ed)
	       )
	 (entmod ed)
	 (setq start (1+ start))
	 )
       )
  (princ)
);end of progn
(alert "Незарегистрированная копия программы")
);end of if
  )
Для активации ее потребуеться процедура которая содержит в себе следующий код (или аналог на любом другом языке):
Код:
[Выделить все]
(vl-registry-write "HKEY_CURRENT_USER\\SECRET\\NUMCOD" "" "(setq lst (vl-sort lst '(lambda (e1 e2)(> (caddr(assoc 10 (entget e1)))(caddr(assoc 10(entget e2)))))))")
Деактивировать прогрумму можно при помощи:
Код:
[Выделить все]
(vl-registry-delete "HKEY_CURRENT_USER\\SECRET\\NUMCOD")
(vl-registry-delete "HKEY_CURRENT_USER\\SECRET")
Таким образом не имея рабочей копии "взлом" видиться маловероятным.
Удачи в защите интелектуального продукта.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 27.11.2008, 08:25
#10
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


Дима_, Спасибо за пример. Но я как честный чайник пока не въехал.
Итак ты вырезал кусок программы. Дал ей имя "HKEY_CURRENT_USER\\SECRET\\NUMCOD" и предлагаешь записать ее в реестр.
Я потестил прожку, если загрузить лисп без предварительного прогона в акаде строчки
Код:
[Выделить все]
(vl-registry-write "HKEY_CURRENT_USER\\SECRET\\NUMCOD" "" "(setq lst (vl-sort lst '(lambda (e1 e2)(> (caddr(assoc 10 (entget e1)))(caddr(assoc 10(entget e2)))))))")
Лисп как и требовалось не работает.
Но вот не понятно как это связать с активационным кодом. То есть нужно исполнить то что ты описал в #8.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 27.11.2008, 11:42
#11
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Я если честно не понимаю зачем нужен этот серийник, все равно копию с рабочей машины можно сделать и не зная его, но если очень хочешь, то с помощью (vl-string->list) и (vl-list->string) сложи значения ключа и шифруемой процедуры, а на этапе активации проверь сумму чисел введенного ключа: (setq serial (getstring "Введите серийный код")) (apply '+ (vl-string->list serial)), на случай неправильного случайного ввода. Если все верно запиши (vl-registry-write...) либо расшифрованный код (при помощи вычитания ключа), либо серийный номер номер - тогда расшифровыать придеться по ходу выполнения программы. Подчеркиваю - криптостойкость от этого не увеличится не на грамм, просто голову юзеру поморочить.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 27.11.2008, 12:04
#12
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


я юзаю (dos_serialno) из doslib
Sleekka вне форума  
 
Автор темы   Непрочитано 27.11.2008, 13:44
#13
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


Поясню что именно я имею ввиду.
Цитирую твой пост #8
Цитата:
в принципе активация большинства програм по этому способу сделана:
берете любую переменную допустим ту же (getenv "USERNAME")
производите с ней некоторые действия - допустим представить все буквы числами и умножить на 2 - это будет код активации
для активации программы - acadinfo - полученный файл пользователь дает вам, вы, выбрав нужные переменные, генерируете ключ, отсылаете его пользователю
Нужно чтобы сгенерированный ключ, который отослан пользователю работал только на данном компьютере.

Мы сейчас имеем 3 кода
1. Сам лисп
2. Активационный лисп
3. Деактивационный лисп
Предполагаю что нужно сделать так. После ввода активационного номера который я продиктую юзеру автоматически должен загрузится Активационный лисп. Во время ввода активационного номера нужно проделать еще одну проверку. Вводится активационный номер и тут же проверяется скажем имя юзера. Если активационный номер соответствует имени юзера то только тогда запускается Активационный лисп.
Сорри за каламбур.
В таком случае лисп будет работать только на данной машине. Я не прав?
__________________
Блог
Red Nova вне форума  
 
Непрочитано 27.11.2008, 14:05
#14
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Для этого нужен еще один лисп - собирающий информацию о компе пользователя и высылающий ее тебе (ну или юзер это делает сам). Тогда в принципе проще не делать активационного лиспа - а тупо переделвыать исходную программу (автоматически), но, если больше нравиться, можно и с кодом - не очень понятно в чем вопрос - вроде что нужно делать ты понимаешь?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 27.11.2008, 15:36
#15
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


Цитата:
В таком случае лисп будет работать только на данной машине. Я не прав?
Прав прав, только имя компа из лиспа ты сам не получишь только с использованием сторонних библиотек, их нужно сначала загрузить в автокад, прежде чем твое окно активации запустится, это все достаточно трудоемко описывается, имя пользователя - это слабоуникальный параметр, плюс ко всему описанная тобой технология активации запатентована Sunmicrosystems. Если сможешь написать подобное, то честь тебе и хвала.
Sleekka вне форума  
 
Автор темы   Непрочитано 27.11.2008, 17:31
#16
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


А что если так.
Нужна маленькая программа которая считывает username и преобразует это дело в некий код, это просто чтобы напустить туман, и не дать каждому чайнику понять что мне нужен username. Для простоты все можно делать в ком строке Акада.
Понятно что начало должно быть типа такого.
Код:
[Выделить все]
(setq name (getenv "USERNAME"))
Предположим вернуло
"Ник"
А вот как теперь "Ник" преобразовать в простенький код чтобы потом выдать этот код в оповещающем окошке? Можно как ты ранее говорил перевести букву в цифру и умножить на два, тогда "Ник" = "302024"
Ну допустим мы уже имеем такой код, юзер посылает мне этот код, я перевожу его обратно и вижу что USERNAME - "Ник". Теперь я пишу ответный код, который также связан с USERNAME, ну например к первому элементу прибавляю 111, к второму 222, к третьему 333, и так далее, получается такой код "141242357"
Теперь нужно этот код как-то ввести в компьютер так чтобы в результате сработал активационный лисп
То есть что то типа этого
-декомпилируем код
-проверяем равен ли результат USERNAME
-если да, то запускаем код
Код:
[Выделить все]
(vl-registry-write "HKEY_CURRENT_USER\\SECRET\\NUMCOD" "" "(setq lst (vl-sort lst '(lambda (e1 e2)(> (caddr(assoc 10 (entget e1)))(caddr(assoc 10(entget e2)))))))")
Выполнить задуманное у меня кишка естественно тонка.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 27.11.2008, 21:25
#17
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Расширяй кишку , есамое главное уже пройдено - ты понимаешь что нужно сделать - уверяю тебя это сложнее чем написать код, попробуй - что не получиться спрашивай - подскажу(жем).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 27.11.2008, 22:21
#18
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


Ну тогда начинай подсказывать
Какие функции нужны для этого?
Цитата:
Предположим вернуло
"Ник"
А вот как теперь "Ник" преобразовать в простенький код чтобы потом выдать этот код в оповещающем окошке?
__________________
Блог
Red Nova вне форума  
 
Непрочитано 27.11.2008, 22:50
#19
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Ну для начала-бы я не использовал бы для генерации ключа только лишь имя пользователя
(strcat (getenv "USERNAME") (getvar "ACADVER")...) посмотри сам, что еще можно добавить. Для переделки в список значений (vl-string->list), далее преобразовываем что-бы было не так ясно (mapcar (lambda (x) (сдесь функция хитрого преобразованя - придумай сам хотябы алгоритм - будут вопросы - по предудыщей схеме)) ), ну и обратно в текст (vl-list->string), показать в окошке - (alert...)
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 28.11.2008, 01:23
#20
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


Цитата:
Предположим вернуло
"Ник"
А вот как теперь "Ник" преобразовать в простенький код чтобы потом выдать этот код в оповещающем окошке? Можно как ты ранее говорил перевести букву в цифру и умножить на два, тогда "Ник" = "302024"
Ну допустим мы уже имеем такой код, юзер посылает мне этот код, я перевожу его обратно и вижу что USERNAME - "Ник". Теперь я пишу ответный код, который также связан с USERNAME, ну например к первому элементу прибавляю 111, к второму 222, к третьему 333, и так далее, получается такой код "141242357"
Теперь нужно этот код как-то ввести в компьютер так чтобы в результате сработал активационный лисп
То есть что то типа этого
-декомпилируем код
-проверяем равен ли результат USERNAME
-если да, то запускаем код
Вот это хорошо. мыслите в правильном направлении.
Только это пока теория, а как говорица теория без практики ...
Я примерно также рассуждал, на протяжении года или двух, пока не перешел к конкретным кодам, а перешел я к ним только тогда когда мне стали за это платить. А пока мне платили за другое я и делал другое , в любом случае удачи.
PS. А из темы "Научите чайника лиспу?" что нибудь хорошее для вас выгорело, просто я ниасилил слишком много букаф. А по теме, тоже готов помочь если чего не понятно, да и сам поучусь - людей умный у нас на dwg многа.
Sleekka вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Можно ли из нескольких лиспов и меню сделать программу с активационным ключом?

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопросы по работе системы RuCAD Олег К. Прочее. Программное обеспечение 142 17.09.2019 05:06
Мониторы LCD CRT Разное 94 17.06.2008 10:51
ЮМОР 2006 =) Perezz!! Разное 1122 04.01.2007 00:46
Попасть в слой. Vova AutoCAD 106 10.03.2006 04:36