Архитектору и проектировщику|Тепло- и звукоизоляция URSA.RU
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

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

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

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

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

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


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

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


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

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,970
Отправить сообщение для 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
С.-Петербург
Сообщений: 36,699


Red Nova, вряд ли ты в открытом форуме дождешься работающей системы защиты.
Кстати, код, скажем так, не совсем корректный в общем случае и при заявленных условиях выбора объектов.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.11.2008, 23:38
#6
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,970
Отправить сообщение для 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
С.-Петербург
Сообщений: 36,699


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

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей 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,843


Эх все равно не спиться:
Вот программа из 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,970
Отправить сообщение для 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,843


Я если честно не понимаю зачем нужен этот серийник, все равно копию с рабочей машины можно сделать и не зная его, но если очень хочешь, то с помощью (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,453


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

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


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

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

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


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

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


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

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,970
Отправить сообщение для 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,843


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

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


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

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


Ну для начала-бы я не использовал бы для генерации ключа только лишь имя пользователя
(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,453


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

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


Цитата:
Сообщение от Red Nova Посмотреть сообщение
А что если так.
Нужна маленькая программа которая считывает username и преобразует это дело в некий код, это просто чтобы напустить туман, и не дать каждому чайнику понять что мне нужен username. Для простоты все можно делать в ком строке Акада.
дык я жеж предлагал для напускания тумана делать дамп всех переменных автокада?
думаю сможете send command - acadinfo сделать?
а в полученном текстовом файле поиском найти нужные переменные?

и правильно - только к юзернейм привязываться не стоит - я допустим, знакомым/друзьям при установки винды ставлю одинаковый юзернейм
да и из опыта ремонта по разным офисам - очень много User Admin и тп
__________________
тут была подпись(
Димас вне форума  
 
Автор темы   Непрочитано 28.11.2008, 08:17
#22
Red Nova

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


Sleekka,
Цитата:
А из темы "Научите чайника лиспу?" что нибудь хорошее для вас выгорело
Да, из этой темы много чего узн%
__________________
Блог

Последний раз редактировалось Red Nova, 28.11.2008 в 08:31.
Red Nova вне форума  
 
Непрочитано 28.11.2008, 09:57
#23
Кулик Алексей aka kpblc
Moderator

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


Как вариант (коды писать некогда):
Соединяешь USERNAME, COMPUTERNAME (а если еще ухитришься и серийник HDD получить, совсем кучеряво будет). Переводишь в список чисел; каждое число - в строку, добавляя "0" вперед до достижения длины строки в 3 символа. Потом список объединить в одну строку. Разбить на пары. Каждое число представить как сумму степеней 2 с добавлением 1. Соединить строку, используя в качестве "соединителя" "0". Разбить на подстроки по 2 символа каждая. Преобразовать в подстроки в числа, из них получить символ. Это будет" активационный" код.
Для "активации" операцию провернуть обратно.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.11.2008, 10:24
#24
Red Nova

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


kpblc, Пока читал несколько раз сам сбился, но идея мне понравилась!!! Подумаю как хотябы начать писать такой код.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 28.11.2008, 11:06
#25
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,795
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Тема прямо для вас:
Возможно ли защитить код на Lisp
Там есть и серийник HDD (частично), надежнее всего - к MAC адресу сетевой карты. Но это привязка к "месту"
По защите кода еще одна тема. Начиналась безобидно, про время , но на второй странице есть расписанный алгоритм Евгения Елпанова в примерах и картинках по поводу защиты уже кода.
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 28.02.2009 в 10:03. Причина: новый адрес на caduser.ru
VVA вне форума  
 
Непрочитано 28.11.2008, 11:22
#26
Кулик Алексей aka kpblc
Moderator

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


Да ну, там все просто. Вот что успел наваять (минут за 10 примерно)
---
Добавлено: по идее такое "шифрование" можно применять куда угодно.
P.S. Я злой, работать не хочу, вот и развлекался...
Вложения
Тип файла: lsp _kpblc-debug-crypt.LSP (6.1 Кб, 109 просмотров)
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 28.11.2008, 11:31
#27
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 11,031


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

И вааще, не очень-то тут секреты излагайте, а то агенты Аутодеск как прочитают, да как сообщат, а те как сделают неломающийся AutoCAD
ShaggyDoc вне форума  
 
Непрочитано 28.11.2008, 11:34
#28
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,795
<phrase 1= Отправить сообщение для VVA с помощью Skype™


В добавок к #23 - не следует забывать про исключающее или (XOR). В лиспе это (boole 6 ...)
Код:
[Выделить все]
(vl-load-com)
;;;===============================================
;;;Строка в нешифрованном виде
(setq usr (getenv "USERNAME"))
;;;===============================================
;;; Шифруем строку
;;; Применяем операцию XOR
;;; В ф-ции (boole 6 x 12) вместо 12 можно подобрать смещение,
;;; чтобы символы получались из диапазона 30-255 ASCII
;;; Но вроде и так нормально
(setq kod (apply 'strcat
                 (mapcar 'chr
                         (mapcar '(lambda (x) (boole 6 x 12))
                                 (vl-string->list usr)
                         ) ;_ end of mapcar
                 ) ;_ end of mapcar
          ) ;_ end of apply
) ;_ end of setq



;;;===============================================
;;;Дешифруем
(setq ret (apply 'strcat
                 (mapcar 'chr
                         (mapcar '(lambda (x) (boole 6 x 12))
                                 (vl-string->list kod)
                         ) ;_ end of mapcar
                 ) ;_ end of mapcar
          ) ;_ end of apply
) ;_ end of setq

;;;===============================================
;;;Сравниваем с usr
(= usr ret)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 28.11.2008, 11:59
#29
Red Nova

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


kpblc, Спасибо, но пока не понял как запустить. В коде написано что пример запуска такой
Код:
[Выделить все]
*    Примеры вызова:
(_kpblc-conv-list-to-3dpoints '(1 2 3 4 5 6)) ;-> ((1 2 3) (4 5 6))
(_kpblc-conv-list-to-3dpoints '(1 2 3 4 5))   ;-> ((1 2 3) (4 5 0.))
Но это должно быть про набор (1 2 3 4 5 6), а как конкретно применить к компьютеру не понял. То есть что набрать в ком строке, чтобы скомпилировать usermane и все прочее в числовой код, и как это обратно декомпилировать?

VVA, Я так понял что #28 не для моего понимания, так как я вообще не понял о чем там речь.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 28.11.2008, 12:10
#30
Кулик Алексей aka kpblc
Moderator

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


Red Nova, запускаешь так:
сначала (cr), запомнить результат (например, записать в реестр).
Потом (decr <Здесь результат выполнения (cr)>). если все совпадает, в результате будет T.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.11.2008, 13:24
#31
Red Nova

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


kpblc,
Код:
[Выделить все]
Command:
Command: (cr)
"0000320310010010030010000410010000010010010000000413210010003210000320330000320
41000033021000321021000321001000321033000032031000033002000321321000032041000321
03300003203100032103100003300200003204100003203300032102100032103300003204100003
3003000041002000041002000321032000321021000321041000321033"

Command:


Command: (decr 
<0000320310010010030010000410010000010010010000000413210010003210000320330000320
(_> 
41000033021000321021000321001000321033000032031000033002000321321000032041000321
(_> 
03300003203100032103100003300200003204100003203300032102100032103300003204100003
(_> 3003000041002000041002000321032000321021000321041000321033>)
; error: too many arguments
__________________
Блог
Red Nova вне форума  
 
Непрочитано 28.11.2008, 13:30
#32
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
Command: (setq key (cr))
"0000320310010010030010000410010000010010010000000413210010003210000320330000320
41000033021000321021000321001000321033000032031000033002000321321000032041000321
03300003203100032103100003300200003204100003203300032102100032103300003204100003
3003000041002000041002000321032000321021000321041000321033"

Command: (decr key)
T
Хотя вообще-то код не предназначен для запуска из ком.строки...
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.11.2008, 14:27
#33
Red Nova

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


kpblc,
Сапасибо, а как увидеть результат декомпиляции, то есть реальные username и т.п.?
__________________
Блог
Red Nova вне форума  
 
Автор темы   Непрочитано 29.11.2008, 09:36
#34
Red Nova

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


kpblc,
Ну ладно, про то как вычислить из кода username и т.п. надеюсь еще расскажешь. Но сейчас важнее вот что:
На данный момент я уже могу получить кучеряво закодированную информацию о компьютере юзера. Еще необходим активационный код, который тоже связан с параметрами компьютера, но алгоритм должен быть чуток другой, чтобы юзер не смог быстро догадаться как из первого кода получить второй.
Далее нужен последний лисп, с таким алгоритмом
-набираем команду
-на запрос "введите активационный код" юзер копирует в ком строку второй код.
-после проверки условия соответствия второго кода срабатывает лисп, который вписывает недостающую часть кода в реестр, по принципу Димы
Код:
[Выделить все]
(vl-registry-write "HKEY_CURRENT_USER\\SECRET\\NUMCOD" "" "недостающая часть кода")
А в нашем охраняемом лиспе, эта часть вырезана, и дана ссылка на реестр.
__________________
Блог
Red Nova вне форума  
 
Автор темы   Непрочитано 01.12.2008, 10:19
#35
Red Nova

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


VVA, До меня только дошел смысл кода с #28.
Этим кодом можно преобразовать USERNAME в нечто кучерявое.
Но этого кода пока не достаточно.

1, Во первых нужно добавить переменных, как у крыса,
Я пытался это сделать, но не могу вспомнить какими функциями нормально склеить три слова в ковычках.
У меня получилось так
Command: (setq usr (list (getenv "USERNAME") (getenv "COMPUTERNAME") (getenv "LOGONSERVER")))
В результате получается нечто типа этого
("****" "####" "****")
Но требуется чтобы вернуло
("****####****")
То есть в одних кавычках. Подскажи пожалста какая функция нужна.

2, Итак твоим кодом можно закодировать данные компьютера. Предположим юзер прогнал этот код на машине, и выслал ответ мне. Я могу дешифровать этот код и узнать реальные данные машины. Теперь нужен еще один код, который я вышлю юзеру в ответ, прогнав который на компьютере защищаемая программа разблокируется. Код может быть похожего алгоритма, но так чтобы нельзя было очень легко догадаться как из первого кода получить второй. Прошу написать такой код.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 01.12.2008, 10:23
#36
Дима_

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


Цитата:
Сообщение от Red Nova Посмотреть сообщение
VVA,
Я пытался это сделать, но не могу вспомнить какими функциями нормально склеить три слова в ковычках.
У меня получилось так
Command: (setq usr (list (getenv "USERNAME") (getenv "COMPUTERNAME") (getenv "LOGONSERVER")))
В результате получается нечто типа этого
("****" "####" "****")
Но требуется чтобы вернуло
("****####****")
strcat
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 01.12.2008, 10:31
#37
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,795
<phrase 1= Отправить сообщение для VVA с помощью Skype™


1.
Код:
[Выделить все]
 (apply 'strcat  (list (getenv "USERNAME") (getenv "COMPUTERNAME") (getenv "LOGONSERVER")))
2. Для сбора использовать один ключ, для ответа другой
Данные компьютера собираются и кодируются, например такой ф-цией
(boole 6 x 12)
Ответ кодируется и декодируется этой же ф-цией с другим ключем
(boole 6 x 10)
Если будешь использовать строки, смотри чтобы в результате преобразований boole не получились непечатные символы
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 01.12.2008, 10:36
#38
Дима_

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


Цитата:
Сообщение от Red Nova Посмотреть сообщение
VVA,
2, Итак твоим кодом можно закодировать данные компьютера. Предположим юзер прогнал этот код на машине, и выслал ответ мне. Я могу дешифровать этот код и узнать реальные данные машины. Теперь нужен еще один код, который я вышлю юзеру в ответ, прогнав который на компьютере защищаемая программа разблокируется. Код может быть похожего алгоритма, но так чтобы нельзя было очень легко догадаться как из первого кода получить второй.
Стоп - по моему тебе не нужен код для разблокировки программы - ибо такую проверку можно сломать за 1 мин и без знания лиспа, здесь нужен серийник который просто запишется в реестр, а уже сама рабочая программа на основе данных (username и.т.п) будет декодировать из него кусок кода - то есть этот серийник есть не что иное как, например, сумма из данных компьютера (username+computername...) и недостающей части кода (mapcar ....). А программа соответственно предварительно вычитает - это будет нечто похожее на защиту - еще-бы не мешало продумать контрольную сумму - самое простое тупо сложить все значения серийного номера, то есть 1234=1++2+3+4=10 и добавлять его в конец серийника, чтобы программа активизации могла проверит - не ввел-ли юзер код с ошибкой (последниие 3-4 цифры должны равняться сумме предыдущего номера) - да и в процессе работы программы перед запуском ее не мешало-бы проверить - иначе при измененииданных - программа будет запускать черт знает что.

Цитата:
Сообщение от Red Nova Посмотреть сообщение
VVA,
Прошу написать такой код.
Ну а сам что. Ведь не "первый год замужем."
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 01.12.2008, 11:00
#39
Red Nova

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


Спасибо за ответы.
VVA,
Цитата:
Если будешь использовать строки, смотри чтобы в результате преобразований boole не получились непечатные символы
Пока не понял что за строки.
Дима, Ты меня запутал. Зачем записывать в реестр серийный код. Ты ведь сам в начале предлагал такой алгоритм.
-часть кода записывается в реестр. Это случается только тогда, когда на машине уже один раз прогнали код записи в реестр, что в свою очередь будет иметь место, если введен правильный серийный номер.
Зачем в таком случае еще и серийник записывать в реестр?
__________________
Блог
Red Nova вне форума  
 
Непрочитано 01.12.2008, 11:54
#40
Дима_

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


То Red Nova - пример приведенный мною программы показывает как заставить программу работать на одном компе и не работать на другом, причем если тупо перенести скопировать программу с одного на другой (украсть) восстановление работоспособности без рабочей копии видиться моловозможным - т.к. не хватает части кода. Ты же в свою очередь пожелал еще и серийный номер - вот я и пишу как я вижу максимально правильно сделать с использованием серийного номера - ведь если просто ввести проверку типа (if (= serilal "12345") (progn ... - основная программа) (alert "Не верный серийник")) - грошь цена такой защите.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 01.12.2008, 12:13
#41
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 773


Была очень похожая тема.
Alaspher вне форума  
 
Автор темы   Непрочитано 01.12.2008, 12:49
#42
Red Nova

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


Дима_,
Я в итоге получу то что ты и говоришь. Часть кода будет в реестре. Просто я хочу иметь возможность на растоянии проводить активацию. А для этого я хочу сделать активационный код.

Я тут копался с кодом от VVA, хочу на команды все поставить. Подскажите в чем код ошибочен.

Код:
[Выделить все]
(defun C:dserial  (/kod, ret)
(setq kod (getstring "Введите серийный номер")
(setq ret (apply 'strcat
                 (mapcar 'chr
                         (mapcar '(lambda (x) (boole 6 x 12))
                                 (vl-string->list kod)
                         ) ;_ end of mapcar
                 ) ;_ end of mapcar
          ) ;_ end of apply
) ;_ end of setq
) ;_ end of defun
__________________
Блог
Red Nova вне форума  
 
Непрочитано 01.12.2008, 13:28
#43
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 773


Видимо так задумывалось:
Код:
[Выделить все]
(defun C:dserial (/ kod ret)
 (setq kod (getstring "Введите серийный номер"))
 (setq ret (apply 'strcat
                  (mapcar 'chr (mapcar '(lambda (x) (boole 6 x 12)) (vl-string->list kod)))
           )
 )
)
Alaspher вне форума  
 
Непрочитано 01.12.2008, 16:50
#44
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,795
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Как вариант, можно первые 4 (например) символа получать случайным образом и не обрабатывать. Или комбинировать: нечетный - случайный, четный - твой.
Код:
[Выделить все]
;;; Maxnum - максимальное число
;;; Minnum - минимальное число
(defun randomgen (Minnum Maxnum / Diff vk_RandNum)
;;Random
;;http://www.autocad.ru/cgi-bin/f1/board.cgi?t=32692Wn
(defun vk_RandNum (/ modulus multiplier increment random)
  (if (not *seed*)
    (setq *seed* (getvar "DATE"))
  )
  (setq  modulus     65536
  multiplier 25173
  increment  13849
  *seed*     (rem (+ (* multiplier *seed*) increment) modulus)
  random     (/ *seed* modulus)
  )
)
(setq Diff (- Maxnum Minnum))
(- Maxnum (atoi (rtos (* Diff (vk_RandNum)) 2 0)))
)


(defun C:dserial (/ kod ret buf)
 (setq kod (getstring "Введите серийный номер"))
 (setq ret (apply 'strcat
                  (mapcar 'chr (mapcar '(lambda (x) (boole 6 x 12)) (vl-string->list kod)))
           )
 )
  (setq buf "")
  (repeat 4 (setq buf (strcat buf (chr(randomgen 32 128)))))
  (setq ret (strcat  buf ret))
 )
Твои символы - (substr ret 5)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 01.12.2008, 17:56
#45
Red Nova

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


У меня пока получился такой код.
Язер запускает на компьютере такой код
Код:
[Выделить все]
(defun C:serial (/)
(setq usr (apply 'strcat  (list (getenv "USERNAME") (getenv "COMPUTERNAME") (getenv "LOGONSERVER"))))  
(setq kod (apply 'strcat
                 (mapcar 'chr
                         (mapcar '(lambda (x) (boole 6 x 12))
                                 (vl-string->list usr)
                         ) ;_ end of mapcar
                 ) ;_ end of mapcar
          ) ;_ end of apply
) ;_ end of setq
) ;_ end of defun
Полученный результат отсылается мне.
Я вычисляю реальные данные компьютера таким кодом.
Код:
[Выделить все]
(defun C:dserial (/)
 (setq kod (getstring "Введите серийный номер "))
 (setq ret (apply 'strcat
                  (mapcar 'chr (mapcar '(lambda (x) (boole 6 x 12)) (vl-string->list kod)))
           )
 )
)
Потом я компилирую активационный код
Код:
[Выделить все]
(defun C:getactivatecode (/)
(setq usr2 (getstring "Введите данные пользователя "))  
(setq kod2 (apply 'strcat
                 (mapcar 'chr
                         (mapcar '(lambda (x) (boole 6 x 10))
                                 (vl-string->list usr2)
                         ) ;_ end of mapcar
                 ) ;_ end of mapcar
          ) ;_ end of apply
) ;_ end of setq
) ;_ end of defun
Отправляю скомпилированный лисп юзеру, который должен на своем компьютере должен загрузить такой лисп, и вставить на запрос активационный код.
Код:
[Выделить все]
(defun C:activate (/)
(setq usr (apply 'strcat  (list (getenv "USERNAME") (getenv "COMPUTERNAME") (getenv "LOGONSERVER"))))  
(setq kod2 (apply 'strcat
                 (mapcar 'chr
                         (mapcar '(lambda (x) (boole 6 x 10))
                                 (vl-string->list usr)
                         ) ;_ end of mapcar
                 ) ;_ end of mapcar
          ) ;_ end of apply
) ;_ end of setq
(setq ret2 (getstring "Введите активационный номер "))
(if (= kod2 ret2) 
(vl-registry-write "HKEY_CURRENT_USER\\SECRET\\NUMCOD" "" "часть защищаемого кода, который записываем")
);_end of if
(princ)
);_ end of defun
Вот только не знаю на сколько корректен последний код. При его испытании всегда возвращает nil, может я опять напортачил?
__________________
Блог

Последний раз редактировалось Red Nova, 02.12.2008 в 15:49.
Red Nova вне форума  
 
Автор темы   Непрочитано 02.12.2008, 08:30
#46
Red Nova

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


VVA,
Возникла проблема. Тестировал код с предыдущего поста, и вот что обнаружил.
Пытаюсь командой getactivatecode получить активационный код, ввожу к примеру такие данные
ArmenakDESIGNARMENAK\\\\LION
а программа почему-то запоминает
ArmenakDESIGNARMENAK\\\\\\\\LION
ролик пробы в vlide прилагаю
Вложения
Тип файла: rar 1.rar (160.4 Кб, 68 просмотров)
__________________
Блог
Red Nova вне форума  
 
Непрочитано 02.12.2008, 08:36
#47
Кулик Алексей aka kpblc
Moderator

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


Каждый "одинарный" слеш при работе в лиспе меняется на двойной.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 02.12.2008, 08:58
#48
Red Nova

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


Хм. Ну в принципе это можно учесть заранее и ввести в ком строку на половину слешов меньше. Тестирую дальше.
Код:
[Выделить все]
Command:
Command: serial
"M~aibmgHI_EKBM^AIBMGPP@ECB"

Command:
Command: dserial
Введите серийный номер M~aibmgHI_EKBM^AIBMGPP@ECB
"ArmenakDESIGNARMENAK\\\\LION"

Command:
Command: getactivatecode
Введите данные пользователя ArmenakDESIGNARMENAK\\LION
"KxgodkaNOYCMDKXGODKAVVFCED"

Command:
Command: activate
Введите активационный номер KxgodkaNOYCMDKXGODKAVVFCED
nil

Command:
после этого я проверил реестр. Нужная строка не вписалась, а значит код activate ошибочен, помогите найти ошибку пожалуйста.
__________________
Блог

Последний раз редактировалось Red Nova, 02.12.2008 в 10:21.
Red Nova вне форума  
 
Непрочитано 02.12.2008, 10:38
#49
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,795
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Red Nova, Ничего учитывать не нужно. Пиши как вернуло с 8 слэшами. Затем смотри реестр. Сравни строчку из твоего кода #45
Код:
[Выделить все]
(vl-registry-write "HKEY_CURRENT_USER\\SECRET\\NUMCOD" "" "часть защищаемого кода, который записываем в реестр")
Фрагмент справки по AutoLISP
Цитата:
Within quoted strings, the backslash (\) character allows control characters (or escape codes) to be included. The following table shows the currently recognized control characters:
AutoLISP control characters
Code-Description

\\ -\ character
\" -" character
\e -Escape character
\n -Newline character
\r -Return character
\t -Tab character
\nnn -Character whose octal code is nnn

The prompt and princ functions expand the control characters in a string and display the expanded string in the AutoCAD Command window.
If you need to use the backslash character (\) or quotation mark (") within a quoted string, it must be preceded by the backslash character (\). For example, if you enter
_$ (princ "The \"filename\" is: D:\\ACAD\\TEST.TXT. ")
the following text is displayed in the AutoCAD Command window:
The "filename" is: D:\ACAD\TEST.TXT
You will also see this output in the VLISP Console window, along with the return value from the princ function (which is your original input, with the unexpanded control characters).
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 02.12.2008, 11:25
#50
Red Nova

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


VVA,
Спасибо, но ты не совсем верно меня понял.
Проблема с двойным слешом у меня была на другой стадии, когда я пытаюсь сгенерировать активационный код, а вот главная проблема не в этом, а в том, что в итоге в реестр ничего не записывается, то есть мой последний код ошибочен.
Юзер выполняет
Код:
[Выделить все]
Command: serial
"M~aibmgHI_EKBM^AIBMGPP@ECB"
Отправляет этот код мне
Я выполняю
Код:
[Выделить все]
Command:
Command: dserial
Введите серийный номер M~aibmgHI_EKBM^AIBMGPP@ECB
"ArmenakDESIGNARMENAK\\\\LION"

Command:
Command: getactivatecode
Введите данные пользователя ArmenakDESIGNARMENAK\\LION
"KxgodkaNOYCMDKXGODKAVVFCED"
Отправняю активационный код юзеру, и он выполняет
Код:
[Выделить все]
Command: activate
Введите активационный номер KxgodkaNOYCMDKXGODKAVVFCED
nil
При проверке оказалось, что команда activate не записывает в реестр ничего. Проверь пожалуйста этот код.
Код:
[Выделить все]
(defun C:activate (/)
(setq usr (apply 'strcat  (list (getenv "USERNAME") (getenv "COMPUTERNAME") (getenv "LOGONSERVER"))))  
(setq kod2 (apply 'strcat
                 (mapcar 'chr
                         (mapcar '(lambda (x) (boole 6 x 10))
                                 (vl-string->list usr)
                         ) ;_ end of mapcar
                 ) ;_ end of mapcar
          ) ;_ end of apply
) ;_ end of setq
(setq ret2 (getstring "Введите активационный номер "))
(if (= kod2 ret2) 
(vl-registry-write "HKEY_CURRENT_USER\\SECRET\\NUMCOD" "" "часть защищаемого кода, который записываем")
);_end of if
(princ)
);_ end of defun
Добавлено
Нашел таки в чем была ошибка. Теперь все заработало. Код исправил
__________________
Блог

Последний раз редактировалось Red Nova, 02.12.2008 в 13:37.
Red Nova вне форума  
 
Непрочитано 02.12.2008, 14:29
#51
Sleekka

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


Через пару месяцев придет на dwg пользователь и спросит, тут нам один нехороший человек защиту поставил а я хочу работать дома, помогите сломать - придется его отправить в поиск...
Sleekka вне форума  
 
Непрочитано 02.12.2008, 15:43
#52
Дима_

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


Вариант защиты программы из поста #4 шифрованием куска кода

Сама программа:
Код:
[Выделить все]
(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))
	 )

(cryptrun "HKEY_CURRENT_USER\\SECRET\\NUMCOD" (strcat (getenv "USERNAME") (getenv "COMPUTERNAME") (getenv "LOGONSERVER")))

       (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)
  )
Лисп обеспечивающий выполнение работы:
Код:
[Выделить все]
(vl-load-com)
(defun cryptinfo (inf key / i); зашифровывает/расшифровывает значение inf ключом key
(setq i -1 key (vl-string->list key))
(vl-list->string
(mapcar '(lambda (x)
(if (not (nth (1+ i) key)) (setq i -1))
(setq i (1+ i))
(boole 6 x (nth i key))
);end of lambda 
(vl-string->list inf)
);end of mapcar
);end of vl-list->string
);end of cryptinfo

(vl-load-com)
(defun checksum (str len / tmp) ; возращает контрольную сумму строки str длинной len символов
(setq tmp (itoa (apply '+ (vl-string->list str))))
(if (/= len (strlen tmp))
(if (> len (strlen tmp))
(repeat (- len (strlen tmp)) (setq tmp (strcat "0" tmp)))
(setq tmp (substr tmp len)) 
));end of if*2
tmp
);end of checksum

(vl-load-com)
(defun getinfo ( / File); сохраняет данные о пользователе
(setq File (getfiled "Куда сохранить информационный файл" "user" "dat" 1))
(if File
(progn
(setq File (open File "W"))
(princ (cryptinfo (strcat (getenv "USERNAME") (getenv "COMPUTERNAME") (getenv "LOGONSERVER")) "ключевое слово") File)
(close File)
);end of progn
(alert "Файл не создан")
);end of if
);end of getinfo

;пример (makeserial "(setq lst (mapcar '(lambda (x) (cdr x)) lst))")
;Обратить внимание на возможное наличие кавычек внутри кавычек.
(vl-load-com)
(defun makeserial ( cod / File str); создает ключевой файл для кода cod - для использования программистом.
(setq File (getfiled "Укажите файл данных" "user" "dat" 2))
(if file
(progn
(setq 	File (open File "R")
	str (cryptinfo "здесь идет код программы" (cryptinfo (read-line File) "ключевое слово"))
);end of setq
(close File)
(setq File (getfiled "Куда сохранять ключ активации" "Regkey" "dat" 1))
(if File
(progn
(setq File (open File "W"))
(princ (strcat str (checksum str 7)) file)
(close File)
);end of progn
(alert "Файл не сохранен")
);end of if 
);end of progn
(alert "Файл не выбран")
);end of if
);end of makeserial

; пример (activate "HKEY_CURRENT_USER\\SECRET\\NUMCOD")
(vl-load-com)
(defun activate ( regpath / File str); производит активацию программы в указанном пути реестра
(setq File (getfiled "Укажите файл с ключом активации" "Regkey" "dat" 2))
(if File
(progn
(setq 	File (open file "R")
	str (read-line File)	
);end of setq
(close File)
(if (= (checksum (substr str 1 (- (strlen str) 7)) 7) (substr str (- (strlen str) 6)))
(progn
(vl-registry-write regpath "" str)
(alert "Программа успешно зарегистрированна")
);end of progn
(alert "Неверный ключ активации")
);end of if
);end of progn
(alert "Файл не найден")
);end of if
);end of activate

; пример (cryptrun "HKEY_CURRENT_USER\\SECRET\\NUMCOD" (strcat (getenv "USERNAME") (getenv "COMPUTERNAME") (getenv "LOGONSERVER")))
(vl-load-com)
(defun cryptrun (regpath key / cod temp File); запускает код инициированный в реестре regpath, зашифрованный ключом key
(setq cod (vl-registry-read regpath))
(if cod
(if (= (checksum (substr cod 1 (- (strlen cod) 7)) 7) (substr cod (- (strlen cod) 6)))
(progn
(setq temp (vl-filename-mktemp "secret.lsp") File (open temp "w"))
(princ (cryptinfo (substr cod 1 (- (strlen cod) 7)) key)  File)
(close File)
(load temp)
(vl-file-delete temp)
);end of progn
(alert "Неверный ключ активации")
);end of if
(alert "Программа не зарегистрированна")
);end of if
);end of cryptrun
Обращаю внимание внимание процедура "makeserial" не нужна, и не желательна в пользовательской программе.

Порядок выполнения регистрации (процедуры включить в оформленные по своему усмотрению программы):
На машине пользователя
(getinfo) - полученный файл "user.dat" отослать программисту

На машине программиста:
(makeserial "(setq lst (vl-sort lst '(lambda (e1 e2) (> (caddr(assoc 10 (entget e1)))(caddr(assoc 10 (entget e2)))))))")
полученный файл "regkey.dat" - отослать пользователю

На машине пользователя:
(activate "HKEY_CURRENT_USER\\SECRET\\NUMCOD")
После этого программа должна работать.

P.S. Аналогично с любой другой программой - выдераем кусок кода - вставяем его как параметр при выполнении makeserial - не забыть учесть возможные кавычки внутри кода - " заменить на /"

P.P.S. исправленна небольшая ошибка в cryptinfo.
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 02.12.2008 в 16:44.
Дима_ вне форума  
 
Автор темы   Непрочитано 02.12.2008, 15:54
#53
Red Nova

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


Так, как защитить один код я понял. Теперь хочу защитить несколько кодов. Для этого команда activate с #50 должна записать в реестр сразу несколько строк.
Я позабыл какую функцию нужно добавить в if чтобы можно было при T провести сразу несколько операций. Напомните пожалуйста.
Имею
Код:
[Выделить все]
(if (= kod2 ret2) 
(vl-registry-write "HKEY_CURRENT_USER\\SECRET\\NUMCOD" "" "часть защищаемого кода, который записываем")
);_end of if
Вместо
Код:
[Выделить все]
(vl-registry-write "HKEY_CURRENT_USER\\SECRET\\COD"
Должно быть
Код:
[Выделить все]
(vl-registry-write "HKEY_CURRENT_USER\\SECRET\\COD1"
(vl-registry-write "HKEY_CURRENT_USER\\SECRET\\COD2"
(vl-registry-write "HKEY_CURRENT_USER\\SECRET\\COD3"
__________________
Блог
Red Nova вне форума  
 
Непрочитано 02.12.2008, 16:04
#54
Дима_

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


(if (= t t)
(progn
(princ "aa")
(princ "BB")
)
);end of if
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 02.12.2008, 16:07
#55
Red Nova

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


Спасибо
__________________
Блог
Red Nova вне форума  
 
Автор темы   Непрочитано 08.12.2008, 14:31
#56
Red Nova

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


Обнаружил что программа работает не стабильно.
На некоторых машинах процесс активации проходит гладко, а с некоторыми возникают проблемы.
Вот например. Юзернейм такой.
boris
А командой serial получаю
"nc~e\177HI_EKBGM^IBPP@ECB"
Если перевести командой dserial, то это
"boriP=;;DESIGNKAREN\\\\LION"
Если с этого скомпилировать активационный номер, то в конце проверка показывает что активационный номер не соответствует серийному.
Нет идей?

Код:
[Выделить все]
(defun C:serial (/)
(setq usr (apply 'strcat  (list (getenv "USERNAME") (getenv "COMPUTERNAME") (getenv "LOGONSERVER"))))  
(setq kod (apply 'strcat
                 (mapcar 'chr
                         (mapcar '(lambda (x) (boole 6 x 12))
                                 (vl-string->list usr)
                         ) ;_ end of mapcar
                 ) ;_ end of mapcar
          ) ;_ end of apply
) ;_ end of setq
) ;_ end of defun


(defun C:dserial (/)
 (setq kod (getstring "Введите серийный номер "))
 (setq ret (apply 'strcat
                  (mapcar 'chr (mapcar '(lambda (x) (boole 6 x 12)) (vl-string->list kod)))
           )
 )
)


(defun C:getactivatecode (/)
(setq usr2 (getstring "Введите данные пользователя "))  
(setq kod2 (apply 'strcat
                 (mapcar 'chr
                         (mapcar '(lambda (x) (boole 6 x 10))
                                 (vl-string->list usr2)
                         ) ;_ end of mapcar
                 ) ;_ end of mapcar
          ) ;_ end of apply
) ;_ end of setq
) ;_ end of defun


(defun C:activate (/)
(setq usr (apply 'strcat  (list (getenv "USERNAME") (getenv "COMPUTERNAME") (getenv "LOGONSERVER"))))  
(setq kod2 (apply 'strcat
                 (mapcar 'chr
                         (mapcar '(lambda (x) (boole 6 x 10))
                                 (vl-string->list usr)
                         ) ;_ end of mapcar
                 ) ;_ end of mapcar
          ) ;_ end of apply
) ;_ end of setq
(setq ret2 (getstring "Введите активационный номер "))
(if (= kod2 ret2) 
(progn
 (vl-registry-write "HKEY_CURRENT_USER\\Software\\RED_NOVA_1" "" "******")
 (vl-registry-write "HKEY_CURRENT_USER\\Software\\RED_NOVA_2" "" "*****")
);_end of progn
);_end of if
(princ)
);_ end of defun

Добавлено
Если по очереди выполнить
(getenv "USERNAME") (getenv "COMPUTERNAME") (getenv "LOGONSERVER")
то получаю "boris" "DESIGNKAREN" "\\\\LION"
__________________
Блог

Последний раз редактировалось Red Nova, 08.12.2008 в 15:50.
Red Nova вне форума  
 
Непрочитано 08.12.2008, 15:06
#57
Дима_

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


Не проверял но попробуй заменить
(getstring "Введите активационный номер ") на
(getstring "Введите активационный номер " T)
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 08.12.2008, 15:45
#58
Red Nova

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


Не помогло
__________________
Блог
Red Nova вне форума  
 
Автор темы   Непрочитано 09.12.2008, 17:02
#59
Red Nova

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


Люди дорогие, может все же поможите
__________________
Блог
Red Nova вне форума  
 
Непрочитано 09.12.2008, 18:12
#60
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,795
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Red Nova, Я тебя в #28 предупреждал:
Цитата:
(vl-load-com)
;;;===============================================
;;;Строка в нешифрованном виде
(setq usr (getenv "USERNAME"))
;;;===============================================
;;; Шифруем строку
;;; Применяем операцию XOR
;;; В ф-ции (boole 6 x 12) вместо 12 можно подобрать смещение,
;;; чтобы символы получались из диапазона 30-255 ASCII
Буква s имеет ASCII код - 115
(boole 6 115 12) - вернет 127
По табице ACSII это символ DEL, который не имеет буквенного представления и выдается ввиде номера \127
"nc~e\177HI_EKBGM^IBPP@ECB"
Подбирай другое смещение вместо 12
*** Добавлено
Можно "общаться" не строками, а 16-ричнымм кодами символов, представленными ввиде строки
Как начало, остальное сам по аналогии
Код:
[Выделить все]
;;;============ DecToHex ===============================================
;;;Ф-ция переводит десятичные цифры в шестнадцатиричную систему счисления
;;Dec->Hex
;;;Converting Decimal to Hexadecimal
;;; num - дасятичное число (Decimal number)
;;;Пример (DecToHex 255) -> "FF"
;;;Возвращает шестнадцатиричное число как строку
;;;Алгоритмы конвертации
;;;http://www.iwebtool.com/talk/thread884.html
;;;http://visualcplus.blogspot.com/2006/03/numerical-systems-and-transformations_08.html
(defun DecToHex ( num / dechexlist hexlist Remainder Quotient)
(setq dechexlist '((0 "0")(1 "1")(2 "2")(3 "3")(4 "4")(5 "5")
     (6 "6")(7 "7")(8 "8")(9 "9")(10 "A")(11 "B")
     (12 "C")(13 "D")(14 "E")(15 "F")))
(setq hexlist nil)
(while (not (zerop (setq Quotient (fix (/ num 16)))))
  (setq Remainder (rem num 16)
          hexlist (append hexlist (cdr(assoc Remainder dechexlist)))
        num Quotient))
  (setq hexlist (append hexlist (cdr(assoc num dechexlist))))
  (apply 'strcat (reverse hexlist))
  )
;;======================================================;;
;;  written by Fatty The Old Horse 10/13/05    ;;
;;      (framework)      ;;
;;======================================================;;
;;      helper functions  ;;
;; group list by number
(defun group-by-num (lst num / ls ret)
(if (= (rem (length lst) num ) 0)
 (progn (setq ls nil)
  (repeat (/ (length lst) num)
    (repeat num (setq ls (cons (car lst) ls) lst (cdr lst)))
  (setq ret (append ret (list (reverse ls))) ls nil)))) ret)

;;;============ HexToDec ===============================================
;;;Ф-ция переводит шестнадцатиричные цифры в десятичную систему счисления
;;Hex->Dec
;;;Converting Hexadecimal to Decimal
;;; num - шестнадцатиричное число (Hexadecimal number) as String
;;;Пример (HexToDec "FF") -> 255
;;;       (HexToDec 'FF) -> 255
;;;
;;;http://forum.dwg.ru/showthread.php?t=5589
(defun HexToDec (hexstr / n s i a)
   (setq n 0 i 0)
   (setq hexstr (strcase hexstr))
   (while (> (strlen hexstr) 0)
     (setq s (substr hexstr (strlen hexstr) 1) a (ascii s))
     (cond
      ((<= (ascii "0") a (ascii "9")) (setq a (- a (ascii "0"))))
      ((<= (ascii "A") a (ascii "F")) (setq a (+ 10 (- a (ascii "A")))))
     ) ;; (cond
     (setq n (+ n (* a (expt 16 i))) i (1+ i))
     (setq hexstr (substr hexstr 1 (1- (strlen hexstr))))
   )
   n
  )

(defun C:serial (/)
(setq usr (apply 'strcat  (list (getenv "USERNAME") (getenv "COMPUTERNAME") (getenv "LOGONSERVER"))))  
(setq kod (apply 'strcat
                 (mapcar 'DecToHex
                         (mapcar '(lambda (x) (boole 6 x 12))
                                 (vl-string->list usr)
                         ) ;_ end of mapcar
                 ) ;_ end of mapcar
          ) ;_ end of apply
) ;_ end of setq
) ;_ end of defun

(defun C:dserial (/)
 (setq kod (getstring "Введите серийный номер "))
 (setq kod (mapcar 'HexToDec (mapcar '(lambda(x)(apply 'strcat x))(group-by-num (mapcar 'chr (vl-string->list kod)) 2))))
 (setq ret (apply 'strcat
                  (mapcar 'chr (mapcar '(lambda (x) (boole 6 x 12))
                                       kod))
           )
 )
)
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 09.12.2008 в 18:31.
VVA вне форума  
 
Автор темы   Непрочитано 10.12.2008, 09:25
#61
Red Nova

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


Спасибо, а можно как то учесть особенность знака "/", чтобы его количество не удваивалось?
__________________
Блог
Red Nova вне форума  
 
Непрочитано 10.12.2008, 10:02
#62
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,795
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Red Nova, Не дури себе голову, это особенность лиспа
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 10.12.2008, 10:26
#63
Red Nova

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


Придется вручную дублеж выкавыривать.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 10.12.2008, 22:18
#64
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Red Nova Посмотреть сообщение
Придется вручную дублеж выкавыривать.
На фига, простите?
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 10.12.2008, 22:43
#65
Red Nova

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


Когда командой getactivatecode из данных юзера компилируется активационный код, то введя к примеру
"borisDESIGNKAREN\\\\LION"
На выходе я получае код, в котором символов соответствующих знаку "\" вдвое больше чем нужно. Вот и выкавыриваю лишнее, раз лиспом это не исправить.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 10.12.2008, 22:55
#66
DEM

YngIngKllr
 
Регистрация: 29.03.2005
СПб
Сообщений: 12,762


Red Nova
Знаешь получается следующее, программа на рупь, защита на 2 рубля.
Если честно то на форуме достаточно открытых кодов, нежели твои программы, если уж человек соображает как работает код то уж найти отмычку к нему сможет без условно.
Защита будет на теток грубо говоря, ну и полных нулей в лиспе.
__________________
Шаг 12й......
Мои публикации
DEM вне форума  
 
Непрочитано 10.12.2008, 23:00
#67
Кулик Алексей aka kpblc
Moderator

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


Так проверь, например, такое:
Код:
[Выделить все]
(defun test (/ str)
  (setq str (getstring t "\nВводи строку, обязательно с обычными слешами, типа \"c:\\\" : "))
  (princ "На данный момент str равна ")
  (princ str)
  (princ)
  ) ;_ end of defun
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 11.12.2008, 08:52
#68
Red Nova

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


DEM,
Начнем с того что программы "мои" только условно. Все что я придумал разработали небезызвестные участники форума. Защита же мне нужна именно от "теток", я не собираюсь делать ничего коммерческого, защищаю по одной простой причине. Думаю и ты встречал "коллег" которые ничего из себя не представляя всегда пытаются показать свое превосходство над другими, вот от таких "нехороших людей" я и хочу защитится, а для всех остальных и код открыт, и на форуме все есть.
Цитата:
Знаешь получается следующее, программа на рупь...
Как я уже не раз говорил все мои задумки рассчитаны только на наше КБ и не претендуют на что-то большее. Я не понимаю зачем нужно каждый раз их пинать, сам знаю про недостатки, но так все и было задумано. Интересно вот ты сам чем пользуешься для спецификации? Я уже говорил, что если покажешь разработку более удобную и профессиональную, то я сам готов на нее пересесть, но что-то я пока таких не видел ...

kpblc,
Спасибо, но я пока не понял как правильно этим пользоваться.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 12.12.2008, 00:15
#69
Кулик Алексей aka kpblc
Moderator

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


Кхе, хотя вопрос был и не мне, отвечу: для спецификаций либо собственные инструменты, либо ADT-шные. Пока склоняюсь к своим (возможностей больше, скорость работы как минимум сопоставима; а в компилированном виде так вообще выше скорости "штатных" средств в разы).
Теперь насчет кода: а чего там понимать? Если ты вводишь "\", то в лиспе он отображается как двойной. Но в строку (хоть командную, хоть в реестр, хоть в текстовый файл) слеш будет выводиться нормально - одним символом.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.12.2008, 06:06
#70
DEM

YngIngKllr
 
Регистрация: 29.03.2005
СПб
Сообщений: 12,762


Offtop: Блина если для своего КБ делаете, то уж наверняка все будут знать что програмка сделана с вашей подачи. Че её ныкать то???
__________________
Шаг 12й......
Мои публикации
DEM вне форума  
 
Автор темы   Непрочитано 13.12.2008, 08:33
#71
Red Nova

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


kpblc,
Сколько я не копался с твоим кодом так и не сумел дельно соеденить его с моим.
Покажи пожалуйста как правильно изменить этот код, чтобы в результате в ком строку выходило к примеру не
"4B78676F646B614E4F59434D444B58474F444B415656565646434544"
а
"4B78676F646B614E4F59434D444B58474F444B41565646434544"
Код:
[Выделить все]
(defun C:getactivatecode (/)
(setq usr2 (getstring "Введите данные пользователя "))  
(setq kod2 (apply 'strcat
                 (mapcar 'DecToHex
                         (mapcar '(lambda (x) (boole 6 x 10))
                                 (vl-string->list usr2)
                         ) ;_ end of mapcar
                 ) ;_ end of mapcar
          ) ;_ end of apply
) ;_ end of setq
) ;_ end of defun

;В коде используются функции с #60
Цитата:
для спецификаций либо собственные инструменты, либо ADT-шные
Ну как я понял твои разработки под замком. Может хоть видеоролик с примером работы покажешь или тоже низя?
Как в ADT спеку делать я не знаю, потому как крайне мало работал на нем. Если просвиетишь как это в ADT делать был бы благодарен.
__________________
Блог

Последний раз редактировалось Red Nova, 13.12.2008 в 08:40.
Red Nova вне форума  
 
Непрочитано 13.12.2008, 12:59
#72
dextron3

Фотограф
 
Регистрация: 01.01.2007
Алматы
Сообщений: 5,042


VVA, а нельзя ли в архив засунуть все лиспы и на него пароль поставить, а один лисп для активации архва запускать из автокада.
1. тоесть при запуске лиспа он запрашивает пароль к архиву и из архива работают все лиспы,
2. но из архива к примеру ничего просто не вытащишь только можно считывать
3. Архив работает до поределенной даты или определенного количества запусков
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 13.12.2008, 14:19
#73
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,795
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Red Nova, Дались тебе эти слэши. Предлагаю вообще от них избавляться:
Код:
[Выделить все]
(defun C:serial (/)
(setq usr (apply 'strcat  (list
			    (VL-STRING-TRIM "\\" (getenv "USERNAME"))
			    (VL-STRING-TRIM "\\" (getenv "COMPUTERNAME"))
			    (VL-STRING-TRIM "\\" (getenv "LOGONSERVER"))
			    )))  
(setq kod (apply 'strcat
                 (mapcar 'DecToHex
                         (mapcar '(lambda (x) (boole 6 x 12))
                                 (vl-string->list usr)
                         ) ;_ end of mapcar
                 ) ;_ end of mapcar
          ) ;_ end of apply
) ;_ end of setq
) ;_ end of defun
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 13.12.2008, 15:18
#74
Red Nova

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


VVA О как. Спасибо.
Еще наверное в конце разверну список функцией reverse для большего эфекта
Жаль только через акад не добраться до мак адреса или до серийного номера HDD.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 13.12.2008, 16:12
#75
Donhuan

Проектировщик СС
 
Регистрация: 24.06.2008
Минск
Сообщений: 134
<phrase 1=


Цитата:
Сообщение от Red Nova Посмотреть сообщение
Жаль только через акад не добраться до мак адреса или до серийного номера HDD.
Посмотри ссылки в #25.
Donhuan вне форума  
 
Непрочитано 13.12.2008, 16:14
#76
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Цитата:
... Жаль только через акад не добраться до мак адреса или до серийного номера HDD
Ну почему же? Функция Windows API DeviceIoControl
Библиотека kernel32.dll

http://msdn.microsoft.com/en-us/libr...DownFilterText

И вот сюда заглянь. Сообщение №3.
http://forum.sources.ru/index.php?showtopic=84469

Последний раз редактировалось Supermax, 13.12.2008 в 16:21.
Supermax вне форума  
 
Автор темы   Непрочитано 13.12.2008, 19:05
#77
Red Nova

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


Donhuan,
Мда, моя оплошность, я тогда неверно понял, думал что мак адрес вручную нужно вводить, а оказалось что ссылка от VVA была самое то.
Теперь подумаю как это с моим кодом скрестить...
Supermax,
Спасибо, но твои ссылки для меня окозались больно сложными.
__________________
Блог
Red Nova вне форума  
 
Автор темы   Непрочитано 14.12.2008, 12:31
#78
Red Nova

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


А почему вот это не работает?
Код:
[Выделить все]
(VL-STRING-TRIM ":" "00:1B:FC:EA:F6:46")
"00:1B:FC:EA:F6:46"
__________________
Блог
Red Nova вне форума  
 
Непрочитано 14.12.2008, 16:44
#79
Donhuan

Проектировщик СС
 
Регистрация: 24.06.2008
Минск
Сообщений: 134
<phrase 1=


а так
Код:
[Выделить все]
(VL-STRING-TRIM ":" "::::::::00:1B:FC:EA:F6:46:::::::::")
"00:1B:FC:EA:F6:46"
(VL-STRING-TRIM ":46" "::::::::00:1B:FC:EA:F6:46:::::::::")
"00:1B:FC:EA:F"
удаляет указанные символы в начале и конце строки
Donhuan вне форума  
 
Автор темы   Непрочитано 14.12.2008, 20:20
#80
Red Nova

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


А какой функцией удалить все знаки :?
__________________
Блог
Red Nova вне форума  
 
Непрочитано 14.12.2008, 20:50
#81
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,795
<phrase 1= Отправить сообщение для VVA с помощью Skype™


(dwgru-string-replace "00:1B:FC:EA:F6:46" ":" "")
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 14.12.2008, 22:29
#82
Red Nova

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


VVA, Спасибо. Даже странно что штатной такой функции нет.
Я тут вот что думал. Наша защита получилась весьма уязвимой, потому как можно запросто вычеслить какая буква какой заменяется в результате bool.
Во первых я решил привязываться к мак адресу, он бывает к примеру таким

Код:
[Выделить все]
("00:1B:FC:EA:F6:46" "00:1B:FC:EA:F6:46" "DA:50:20:52:41:53" 
"33:50:6F:45:30:30" "50:50:54:50:30:30" "20:41:53:59:4E:FF")
Во вотрых я решил в коде развернуть элементы этого списка местами, и потом уже применять к ним strcat и bool. Вот так.

Код:
[Выделить все]
(setq usr (dwgru-string-replace (apply 'strcat  (reverse (VK_GETMACADDRESS)))":" ""))
И с получением серийного кода у меня проблем не возникло, а вот во время его декомпиляции непонятки есть. А конкретнее как список типа такого
(хотя это в общем то и не список, так как разделений между цифрами нету)

Код:
[Выделить все]
("204153594EFF50505450303033506F453030DA5020524153001BFCEAF646001BFCEAF646")
разбить на 6 подсписков в каждом по 12 элементов, вот так?

Код:
[Выделить все]
("204153594EFF" "5050545030303" "3506F453030D" "A50205241530" "01BFCEAF6460" "01BFCEAF646")
__________________
Блог

Последний раз редактировалось Red Nova, 14.12.2008 в 22:40.
Red Nova вне форума  
 
Непрочитано 14.12.2008, 23:22
#83
Кулик Алексей aka kpblc
Moderator

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


Red Nova,
Код:
[Выделить все]
(defun conv-string-to-sublist (str len)
                              ;|
*    Преобразование строки в список подстрок по длине
*    Параметры вызова:
	str	обрабатываемая строка
	len	длина "подсписка"
|;
  (cond
    ((not str) "")
    ((< (strlen str) len) (list str))
    (t
     (cons (substr str 1 len)
           (conv-string-to-sublist (substr str (1+ len)) len)
           ) ;_ end of cons
     )
    ) ;_ end of cond
  ) ;_ end of defun
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 14.12.2008, 23:31
#84
Red Nova

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


Кулик Алексей aka kpblc, Спасибо, правда в конце получается аппендикс, как его удалить?
Код:
[Выделить все]
("204153594EFF" "505054503030" "33506F453030"
 "DA5020524153" "001BFCEAF646" "001BFCEAF646" "")
__________________
Блог
Red Nova вне форума  
 
Непрочитано 15.12.2008, 00:22
#85
Кулик Алексей aka kpblc
Moderator

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


Замени строку ((not str) "") на ((not str) nil)
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 15.12.2008, 09:25
#86
Red Nova

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


Кулик Алексей aka kpblc,
Неа, не помогло, в конце опять приписывает "". Хотя в принципе это и не мешает, так как я дальше буду применять
Код:
[Выделить все]
(apply 'strcat (reverse ***))
так что элемент "" исчезнет.
__________________
Блог

Последний раз редактировалось Red Nova, 15.12.2008 в 10:51.
Red Nova вне форума  
 
Непрочитано 15.12.2008, 10:10
#87
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


Код:
[Выделить все]
(defun conv-string-to-sublist (str len)
;|
*    Преобразование строки в список подстрок по длине
*    Параметры вызова:
 str обрабатываемая строка
 len длина "подсписка"
|;
  (cond
    ((equal str "") nil)
    ((< (strlen str) len) (list str))
    (t
     (cons (substr str 1 len)
           (conv-string-to-sublist (substr str (1+ len)) len)
     ) ;_ end of cons
    )
  ) ;_ end of cond
) ;_ end of defun
CB вне форума  
Ответ
Вернуться   Форум 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