Re: часы в лиспе

> Vovka
Да действительно! Спасибо. Ну ничего - заодно потренировался в Лиспе:)

Re: часы в лиспе

WOW!
Я тут пару дней отсутствовал на форуме и без меня здесь такое наваяли...

> Евгений Елпанов
Уважаемый Евгений, а что это вы выше такое длинное...
А для простого народа возможно ли по-проще объяснить?
Спасибо!

Re: часы в лиспе

> Сергей
Скопируй в лисп-редактор и там почитай. В моем примере, кода около десятка строк, а все остальное примеры и объяснения...

Re: часы в лиспе

> Евгений Елпанов
я бы поостерегся использовать vl-string-translate :)

(vl-string-translate
  "ABC"
  "123"
  (vl-string-translate "123" "ABC" "ABCD1234")
)

Re: часы в лиспе

> Vovka
я же не даю готовую защиту, тем более, используемую мной... Это только готовый и опробованный алгоритм, который можно использовать и получить реальную защиту. Рад, что вы заинтересовались - видимо, вам тоже пригодится эта наработка :)
По поводу вашего примера, всегда можно использовать симметричное преобразование типа:

(vl-string-translate
  "ABC123"
  "123ABC"
  (vl-string-translate "123ABC" "ABC123" "ABCD1234")
)

или работать со всеми 256 символами, тогда и защита выше и сложность больше и таких проблем не будет. Необходимо только создать преобразованный алфавит по ключу...
ps. еще раз подчеркну - это только возможные подходы к защите, а реальные программы, каждый делает сам и для себя!

Re: часы в лиспе

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

Re: часы в лиспе

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

Re: часы в лиспе

забыл добавить, все еще и компилируется...

Re: часы в лиспе

> Евгений Елпанов
А только компиляции без шифровки будет недостаточно?

Re: часы в лиспе

> Евгений Елпанов
интересно, а возможно ли, например, с помощью softice или другого дебаггера найти и поставить брейкпоинт на вызив функции read, и получив при этом указатель на уже дешифрованную строку? хотя это уже вопрос для совсем другого форума :)

Re: часы в лиспе

Почему все защиты ломаются? Да потому, что при любой, самой хитроумной, всегда есть точка принятия решения - должна программа работать или нет. В этом месте надо внести в программу изменение - заменить условный переход на безусловный. Изменения вносят в двоичный файл - это может быть пара байтов.
Собственно этим и занимаются взломщики - найти эту точку. Их может быть несколько. Для этих целей и используются разные инструменты.
Много программ есть не взломанных. Не взломаны они только потому, что желающих не нашлось, или программа не популярна. Есть и не взломанные популярные программы. Обычно из-за того, что наставлено столько защит, что дешевле её купить.
Но это всё темы для других форумов.
Если же хотите защитить программу, нааписанную на LISP под AutoCAD, то тут и проще и сожнее. Проще потому, что не надо вообще исследовать  зашифрованную и откомпилированную программу. Lisp основан на функциях, а любую функцию можно просто переопределить. То есть загрузить после основного набора свою одноименную функцию, которая ничего не делает.
Здесь надо знать имя функции (они все доступны) и количество аргументов для этой функции. Конечно, здесь могут быть варианты. Например, защита может быть не в виде именованной функции.
Искать точки с помощью дебаггера в LISP проблематично. Это же не exe. Здесь надо трассировать весь Автокад, он внутри где-то обращается к интерпретатору LISP или к кому-то еще.
Вот исходя из возможных путей взлома надо и строить свою защиту. Она должна быть нестандартной по самой идее и при этом может быть вообще прописана в открытом исходном тексте. Пусть тратят время на трассировку Автокада - на самом деле всё открыто. Как известно, лучще всего спрятано то, что лежит открыто и на виду.
А "кул-хацкер" может биться сколько угодно - защита может быть спрятана в безобидной функции наподобие (pi ...) которая и возвращает, как положено число. Но у которого при ситуации конца триала есть ошибка в 10-м знаке после запятой. Функция pi будет вызываться тысячи раз, пусть её трассируют. Но и "наказание" должно следовать не сразу - тогда и поиск затруднен многократно.
Это возможные направления. Но вообще-то считаю, что защищать не стоит совсем. Хотя сам защиту делал. Не с целью именно защитить, а с целью наказать "кул-хацкера". Для смеха. Все пользователи знали, как продлить срок действия, а он бился - как муха башкой об стекло рядом с открытым окном.

Re: часы в лиспе

Vovka пишет:

интересно, а возможно ли, например, с помощью softice или другого дебаггера найти и поставить брейкпоинт на вызив функции read, и получив при этом указатель на уже дешифрованную строку?

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

Donhuan пишет:

А только компиляции без шифровки будет недостаточно?

Для чего? Просто компиляция, частично защитит программу от изменений, но не от запуска в офисе конкурентов. Т.е. конкуренты смогут использовать программу у себя и им может быть все равно, как она устроена - главное результат...

Re: часы в лиспе

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

(defun read (str) (prin1 str))

я все это к тому, что в результате успеха "кул-хацкер" получает чистый 100% исходный код, что есть очень плохо...

Re: часы в лиспе

или по совету ShaggyDoc напишет
(defun read (str) (prin1 str))

А вот так делать нельзя! read - штатная функция и её нельзя переопределять - она может использоваться и для других целей. Да и не даст AutoCAD переопределить её без спроса. Испытай.

Re: часы в лиспе

> Vovka
Именно про это я и говорил - стоит опубликовать на форуме реальную защиту, как ее сломают из любви к искусству или, чтоб показать ее слабые стороны...
Я знаю и другие способы сломать защиту - например, в сейфе у шефа, лежат все исходники. :)
ps. Вообще то, так легко решается проблема взлома на форуме, на тестовом примере в несколько строк... А теперь представь хакера, который через акад, пытается раскручивать связку рекурсий - пусть медленно, зато недоступно для глубокого понимания шпаной, а крутой спец, думаю и так все развернет...

Re: часы в лиспе

> ShaggyDoc
на офисном компе выполняем... и получаем Assignment to protected symbol: READ
Enter break loop?
давим No.
мне ведь это нужно будеть только один раз, что бы получить код из скомпилированной функции Евгения (приведенной выше), а потом перезапускаем акад и все.

Евгений Елпанов пишет:

как ее сломают из любви к искусству или, чтоб показать ее слабые стороны

я здесь ни при чем, это все происки ShaggyDoc-а :)
полностью согласен насчет того, что на практике все значительно сложнее, чем в теории

Re: часы в лиспе

> Евгений Елпанов
Я имел ввиду оставить проверку на выполнение какого-либо условия и обойтись только компиляцией, без шифрования основной программы. Все равно часть, реализующая защиту не шифруется, смысл шифровать остальное?

Re: часы в лиспе

Vovka пишет:

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

Каким это образом будет получен код? Как результат вывода переопределенной read? А откуда мы это знаем, что именно read? Да потому, что Евгений сам привел этот пример. Но даже если и так, то где гарантия, что read не используется еще раньше, не сработает, программа не рухнет и до проверок не дойдет.
А вот "защита", основанная на  "c:date_verify" от  Donhuan  как раз легко снимается.
Находим в списке функций такую, имя которой прямо указывает на ёё назначение - "ломать здесь" и переопределяем. К тому же это зачем-то в виде "команды" сделано, без аргументов, то есть вообще просто - не надо аргументы проверять. К тому же она ничего разумного не возвращает. До слома такой защиты додумается даже "смышленая тетка".
Но, предположим (только предположим), что зачем-то решили сделать защиту, привязанную к дате. В этом случае можно само вычисление условия спрятать в невинно выглядящую функцию, с именем наподобие  (pi) или еще каким. Она не должна выдавать никакого сообщения, а просто поместить куда-то в надежное место (можно просто в глобальную) какую-то невинно выглядящую именованную константу наподобие acMiddleRight. Можно даже в DWG записать.
Сообщение должно быть спрятано тоже в отдельной функции, но уже имеющее ловушку в виде имени, наподобие is-trial-end. Но она ничего не проверяет, пусть переопределяют.
А сама проверка на вшивость - в третьей функции, которая вызывается достаточно часто, но, может быть раз в несколько часов. Вот он-то и проверит соответствие, причем не сразу. Может быть даже не в этот день. И пусть теперь продвинутый хакер трассирует Автокад и отслеживает сотни тысяч шагов.
Это не готовый рецепт, а примерная схема направления, в котором можно работать.

Re: часы в лиспе

Мне нравится, как активно обсуждается тема, видимо, она реально интересует некоторых...
   По понятным причинам, дальше я не буду давать открытые коды, но продолжу на уровне алгоритмов. :)
   В выше упомянутой защите, используется поэтапная расшифровка разными ключами! Поясню, в скомпилированном файле, есть программа расшифровки и простейшая программа получения первичного ключа, а так же, список с кучей шифрованных текстов, который сохраняется в переменную. По мере выполнения программы, некоторые тексты расшифровываются и загружаются, а некоторые программы, отработавшие свое, выгружаются...
   Для ключа, необходимы некоторые последовательности, но их несложно взять из чертежа, причем не любого, а именно из обрабатываемого. Пример, идет работа с блоками, они вставляются, преобразуются и удаляются. В программе точно прописаны все составляющие блока. Если взять dxf из всех элементов внутри блока и вытащить все тексты из 100 кодов, потом удалить повторяющиеся буквы - получится кодовое слово, причем из заранее мне известных слов. Я же знаю, какие элементы есть внутри блока, например штриховки, линии, тексты, полилинии...
Так же, можно использовать вычисляемые значения, например, тангенс некоторого угла, который взят из какой либо полилинии, нарисованной некоторое время назад. Отсюда появится последовательность цифр, которую можно заменить другой.
   В итоге, весь проект со всеми программами, никогда не может быть в памяти в загруженном состоянии. Можно заранее загрузить несколько ключевых программ, но все цифры в них, будут переопределены, просто через некоторое время, эти программы еще раз загрузятся и будут в рабочем состоянии, по мере необходимости, все выгружается.
   ps. Если найдется хакер, который будет знать объектную модель автокада, а так же dxf структуру на таком уровне, будет легко разбираться в лиспе, влет раскручивая мою логику и при всем этом, будет виртуозом по программам декомпиляции и отладки - я его приглашаю на кружечку пива за свой счет. Без проблем, я обсужу с ним в открытую тонкости такой защиты, расспрошу о вариантах ее усовершенствования и буду очень рад знакомству!
Это уже другой уровень...

Re: часы в лиспе

Если найдется хакер, который будет знать объектную модель автокада, а так же dxf структуру на таком уровне, будет легко разбираться в лиспе, влет раскручивая мою логику и при всем этом, будет виртуозом по программам декомпиляции и отладки — я его приглашаю на кружечку пива за свой счет. Без проблем, я обсужу с ним в открытую тонкости такой защиты, расспрошу о вариантах ее усовершенствования и буду очень рад знакомству!

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

Re: часы в лиспе

Евгений Елпанов пишет:

влет раскручивая мою логику

не будет он ничего крутить, он будет искать дебаггером точку входа для read и eval и ждать пока ваша программа скормит им готовую дешифрованную строку. даже если вы нафаршируете свой код выражениями типа (repeat 1000 (eval nil)) или (repeat 1000 (read))
и чотя я в этом деле совсем не разбираюсь, но мне почему то кажется, что это очень даже реально...
p.s. если в добавку к пиву, вы пообещаете купить мне билет до Москвы и обрато, то завтра пойду в магазин покупать книгу по ассемблеру :)

Re: часы в лиспе

мне почему то кажется

Это только кажется. Принцип хороших "бюжетных" защит основан на изматывании потенциального взломщика. На то, чтобы сделать взлом экономически невыгодным.
Пока он до магазина дойдет, пока книжку купит, пока изучит, пока будет сотни тысяч циклов трассировать... А потом выяснится, что все известные методы рассчитаны на исследование "настоящих" WIN-приложений, а тут какой-то LISP (может быть даже в исходном тексте).
А LISP-функции, к тому же еще могут на лету самомодифицироваться.... Да еще и ловушек несколько, да они разнообразны. Это ведь не стандартное приложение, 90% которых защищены стандартным образом небольшим набором общедоступных методов. А тут окажется, что для понимании защиты надо знать совсем не assembler, а AutoCAD.
И в конце концов может выясниться, что просто для издевательства "защищен" код, который вообще открыто опубликован.

Re: часы в лиспе

> ShaggyDoc
Все именно так, но без фанатизма. Т.е. самомодификаций в программе почти нету...

Vovka пишет:

p.s. если в добавку к пиву, вы пообещаете купить мне билет до Москвы и обрато, то завтра пойду в магазин покупать книгу по ассемблеру :)

т.е. через пять лет, вы хотите приехать в москву? А пока будете изучать ассемблер и отладчики... Не обещаю, что будет через пять лет, раньше, врядли вы будете способны раскручивать лисп функции, скомпилированные и загруженные в акад. Сама по себе декомпиляция vlx размером пару мегабайт, уже нетривиальная задачка...

ShaggyDoc пишет:

Можешь смело приглашать не только на кружечку пива — хоть на "портвейну бадью". Не найдется такого "хакера".

можно и портвейна...

Re: часы в лиспе

> Евгений Елпанов
вчера весь вечер просидел в дебаггере, смею утверждать, что конструкция типа (eval (read (decrypt str))) очень уязвима. очень...

Re: часы в лиспе

даже после компиляции?