|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Типы данных
CNC
Israel
Регистрация: 07.07.2007
Сообщений: 302
|
||
Просмотров: 11771
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
А попробовать выполнить обратное, то есть itoa не пробовал? Число 20070812 превышает предельный размер целых чисел. Попробуй для преобразования в строку числа использовать (vl-princ-to-string) - результат будет гарантированно верный.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Сорри, 2 дня были очень тяжелыми, мозги работают через раз. Ограничение на величину integer не превышено (судя по документации). Но я бы либо "разбивал" дату на отдельные части - год, месяц, день, и сравнивал уже их, либо попробовал бы нечто типа:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
CNC Регистрация: 07.07.2007
Israel
Сообщений: 302
|
Проверял неработает результат следующий если в файл "license.lic" прописываю
20070812 то функсия (test) выдает алерт на экран (alert "Licensed time expired!")и выходит не прописывая в "license.lic" ничего, в конце функция возврасщает _$ (test) quit / exit abort теперь если я прописываю в ручную в "license.lic" 20070817 заметим что сегодня (20070813), функция возврачает _$ (test) nil Незапуская мою функцию (c:Glass) Я в принципе ничего неменял кроме диск D: на диск U: к знаку "<" добавил "<=" и добавил строку для запуска моей функции (if (> cdate lic)(c:Glass)) Код:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Я не понял, c:glass должна запускаться в каком случае? Если лицензия еще не кончилась?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Дык ента...
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Ээээ... А с какого перепугу оно должно затираться-то? Сначала файл открывается в режиме чтения, потом - добавления в конец. Между прочим, взято с исходного кода
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
CNC Регистрация: 07.07.2007
Israel
Сообщений: 302
|
Цитата:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Все добавляется. Чтобы был автоматический перевод строк, замени
Код:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
А первая строка у тебя оканчивается символом перевода строки или нет? Имею в виду, ессно, строку файла лицензии
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Цитата:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Фффуф...
Есть предложение: разобрать конкретный пример. Ок? Создаем 2 файла, один c:\1.txt, второй c:\2.txt. В первый закидываем строку "string", во второй - "string" и один раз жмем <Enter>. И на обоих попробуй открыть их в режиме "a" и добавить строку "string_add". Результат?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Ага, а на повторном сравнении что будет?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Какая строка остается открытой?
Кстати, зачем вообще добавлять в lic-файл одну и ту же строчку ("LicenseManager_u:\\lisp\\lic\\licanse.lic")? Просто так? Она ж не меняется вообще ни в каком виде...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
CNC Регистрация: 07.07.2007
Israel
Сообщений: 302
|
Это строка 20070815 в начале я подразумевал затирать ее для того, чтобы любопытные глаза немогли понять логику работы license.lic файла, зная логику работы license.lic файла каждыиь может продливать себе лицензию сколько угодно.
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
А если втупую зашифровать строку даты?
Прямое "шифрование": Код:
Для сравнения надо сделать обратную операцию: Код:
И сравнивай на здоровье. А еще можно засунуть данные в реестр, куда подальше, например, в (strcat "HKEY_CURRENT_USER\\" (vlax-product-key) "\\Profiles") ну или вообще в LOCAL_MACHINE (но туда запись выполнять уже только с админскими правами). Выбирать минимальную дату и сравнивать по ней. Вариантов масса, но все они не выдерживают никакой критики. Рано или поздно, кому надо, все равно сломают.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Естественно! О чем я и говорю: кому понадобится - сломают все равно. Слово "шифрование" не зря взято в кавычки в моем предыдущем высказывании
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
CNC Регистрация: 07.07.2007
Israel
Сообщений: 302
|
Цитата:
и вот результат Код:
|
|||
![]() |
|
||||
Армспорт Регистрация: 18.07.2006
Ейск
Сообщений: 355
|
-> Holon
Так тебе чего надо-то? Защита? Не рановато-ли? Видно, что знаний в области программирования ещё мало, а о защите - нулевые! Есть довольно много простых способов обхода гораздо более изощрённых защит. ![]() Надо сначала изучать предмет, чтобы самому потом не было смешно. Похожая кстати тема http://www.autocad.ru/cgi-bin/f1/board.cgi?t=28001gj |
|||
![]() |
|
||||
CNC Регистрация: 07.07.2007
Israel
Сообщений: 302
|
Уважаемый Евгений А. в указанном топике я ничего особенного не нашел, да
вы конечно правы я не професионал хотелось бы научится у профи как вы, чему-нибудь стоящему, если вам не тяжело представьте собственный пример решения проблемы. |
|||
![]() |
|
||||
Армспорт Регистрация: 18.07.2006
Ейск
Сообщений: 355
|
А я вам именно это и предложил - учиться, учиться и ... причём глобально, а не выхватывать урывками какие-то конкретные вопросы. Всегда интересно помогать, но нет желания учить! (самому ещё есть чему учиться)
А в вопросах защиты в первую очередь надо изучать методы взлома, только тогда можно понять насколько сложно сделать серьёзную защиту и насколько несерьёзна ваша идея. Мне кажется, что защитой просто глупо заниматься на вашем уровне, так как тут должна быть только проблема в методах, но никак не в реализации! |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Защитой программ (особенно компилированных), насколько мне известно, в свое время очень плотно занимался Евгений Елпанов, если не вру, его резюме было: "на лиспе написать работающую защиту практически невозможно".
Даже fas / vlx можно обратно развернуть (я уже не говорю о шифрованных лиспах). Имея наметанный глаз, прочитать код особого труда не составит, скорее всего.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Армспорт Регистрация: 18.07.2006
Ейск
Сообщений: 355
|
Цитата:
Цитата:
То же (условно конечно) можно сказать про защиту на любом другом языке программирования, так как всё можно представить в дизассемблированном виде и имея "намётанный глаз" в ассемблере прочитать код. Но это всё с очень большим трудом - запутать хакера в коде - это не самая сложная задача, если всерьёз этим заниматься. Но взломы програм дизассемблированием и прочим ковырянии в коде - это самый сложный способ, до которого обычно дело не доходит, так как есть более простые и быстрые методы мониторинга системы. |
|||
![]() |
|
||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
На простейшем уровне, задача состоит из 2-х частей. Первая - привязаться к аппаратной части (иначе систему защиты просто можно перенести на другую машину вместе со всеми её "замками") и вторая - предотвращение подделки ключа (возможно ограниченного по времени действия).
Первая задача решается (более или менее пристойно) путям привязки к уникальным ключам в реестре (это отдельная тема, так что пример будет на первом ключе из реестра моей машины, который пришёл на ум). Вторая задача решается шифрованием даты (в каком либо её представлении) уникальным ключом, как раз тем, что извлечён из реестра (например). В самом простом демоварианте это может выглядеть так: Код:
![]() Функция: (demo:KEYer) сверит текущую дату с записаной в файле и выдаст сообщение об успехе или неудаче. * Код написан очень спешно и почти без проверок - это только ДЕМО. |
|||
![]() |
|
||||
Армспорт Регистрация: 18.07.2006
Ейск
Сообщений: 355
|
->Alaspher
Ломается, к сожалению, банально - удаляем файл с ключём "C:\\Test\\license.dat" (а в идеале вообще все записи которые делает программа - реестр, файлы, сектора на диске) и теперь программа думает что её запускают впервый раз и она тупо создаёт заново этот файл с текущей временной меткой. Когда время выйдет - повторяем процедуру. Можно написать патчик, который будет когда надо сам всё удалять! |
|||
![]() |
|
||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
> Евгений А.
Это простейшее ДЕМО (но даже оно не ломается описанным способом ![]() |
|||
![]() |
|
||||
Армспорт Регистрация: 18.07.2006
Ейск
Сообщений: 355
|
Так конечно красивее, но тогда просто отматываю дату на момент получения временной метки от Вас, и если надо удаляю все метки которые делает программа, чтобы это предотвратить. Вот и всё. Почти на каждое действие уже давно есть противодействие...
Я не хочу показать что всё ломается легко, а лишь хочу показать, что защита - это творческий процесс, даже наверное война с хакером, которого можно победить только хитростью. А для этого надо сначала изучить его возможности. |
|||
![]() |
|
||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
Против отката системной даты, такая защита, конечно бессильна (и не только так можно обойти), но сам откат, для многих пользователей весьма неудобен - это ведь придётся всё время держать дату машины некорректной, когда используется защищаемый софт (для доменных машин вообще не годится). Для серьёзного софта, наверное это не те издежки, которые отвратят от воровства, а для мелких утилей на ЛИСПе... ну лично я не стал бы дату компа менять, даже еслиб мог - просто купил бы или отказался от использования, если неадекватно дорого. Очистка от "меток", как метод взлома, в данном случае не работает - отсутствие корректной "метки" (файл или запись в реестре - всё равно), это уже критерий нарушения защиты.
|
|||
![]() |
|
||||
Армспорт Регистрация: 18.07.2006
Ейск
Сообщений: 355
|
Такой подход к защите как у вас не выживет. Очень неудобно то, что только чтобы посмотреть на работу програмы, пользователю необходимо связаться с вами по интернету, разрешить программе послать вам неизвестные данные со своего компьютера (!!! это ведь может быть какой-нибудь важный пороль или ещё чего), дождаться от вас ключ, и только после всего этого опробовать программу. Это, извините, антиреклама, которая всех только отпугнёт. Это уже не нужно никому. Без открытого демо-режима очень сложно что-то раскрутить.
Самый надёжный из простых методов защиты на мой взгляд - это физическая привязка кода программы к конкретному "железу" и ограничение в демо-режиме на определённые функции (к примеру размер обрабатываемого файла - тут по вкусу любой вариант). Если это на лиспе, то компилировать всё в один Vlx файл, с использованием собственного именного пространства, оптимизации и связывания. То есть свести взлом программы к использованию дизассемблирования. Остаётся только грамотно организовать в коде лабиринт с ловушками для хаккера, чтобы ему было не сладко, а заказчику - очень дорого! Недостатки конечно тоже есть, но если продавать не по1000 програм в день ( ![]() ![]() ![]() |
|||
![]() |
|
||||
CNC Регистрация: 07.07.2007
Israel
Сообщений: 302
|
я добавил одну строку к коду программы для того чтобы нельзя было отматывать дату назад, и еще вопрос, пути привязки к уникальным ключам в реестре машины, это
означает, что "Ключ" сделанный на другом компьютере небудет работать? Код:
|
|||
![]() |
|
||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
Цитата:
* То, что я выложил, это только демка для показа принципов - на реальную защиту она похожа очень условно. |
|||
![]() |
|
||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
Цитата:
![]() Код:
PS: Писать в файл лицензии чтото отличное от ключа, конечно можно, но тогда надо обрабатывать и ошибку получения ключа. |
|||
![]() |
|
||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
На моей домашней машине последний ключ не работает, при том, что сгенерированые на ней самой работают нормально. Думаю и на других будет так же. НО в функции demo:get-validatekey по завершению работы vl-string-translate перед применением atoi надо бы делать проверку на содержимое (формат) строки иначе, теоретически может и пройти.
|
|||
![]() |
|
||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
Сейчас, при получении из файла лицензии чегото отличного от ожидаемого (например, строки символов выходящих из определённого диапазона или длинны строки) функции могут возвражать неожиданные результаты. Т.е. прочитав строку из файла, по хорошему, надо бы убедиться, что прочитан именно ключ, а не что попало (юзер добрался и отредактировал или вообще стёр файл или всё папку...).
|
|||
![]() |
|
||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
> Holon
То, что я выложил, это простейшая демка практически без проверок. Таких проверок должно быть несколько, как на наличие файла (или записи в реестре) лицензии, так и на наличие уникального ключа, которым производится шифрование, потом проверка формата лицензионного ключа, а возможно и не только... Переделывать демку в рабочую программу - неправильно. Быстрее и проще написать своё, а от демки использовать только принципы, может быть какието приёмы... Например, проверка формата должна быть сразу после чтения лицензионного файла и только при её успешности должны производится дальнейшие действия. При неуспешной проверке, функция аналог demo:get-validateKEY должна возвращать какойто осмысленный результат, например nil, или 0, или -1.., а не вылетать с ошибкой. Возвращённый результат, должен перед основной проверкой проверяться на тип или диапазон и только потом на соответствие дат...да и шифровать можно-бы попричудливее, чем сделано в демке, а то бОльшая часть ключа сейчас незначима. Что-нить типа: Код:
|
|||
![]() |
|
||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
Цитата:
Откомпилировать не забудь, иначе всё бесполезно. ![]() |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
(setq all (list (y_month_d) "aaaaaa" "bbbbbb" "cccccc"))
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
:?: Чего, и так не сработало?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Lisp/VBA/VB.NET Hobbyist Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367
|
Как бы не и тему, просто тут заикались
насчет работы с Экселем... http://dwg.ru/forum/viewtopic.php?t=9468 ~'J'~ |
|||
![]() |