Здравствуйте, Khimik, Вы писали:
K>У меня тогда заодно вопрос по программированию в Delphi: если я правильно понимаю, можно не комментировать код, а сделать булеву константу, и этот код поместить в блок if константа then begin end, тогда это будет эквивалентно комментированию, т.е. если константа=false, то в экзешник этот код не пойдёт. Всё правильно?
Это поведение зависит от конкретного компилятора и от режима компиляции (debug/release). Лучше всего проверить это поведение на практике. Например, разместить в условно-выполняемом блоке кода уникальную строку, а затем пытаться находить эту строку в исполняемом файле с помощью поиска по файлу. Если компилятор поддерживает удаление неиспользуемого кода и оптимизации включены, то по идее, такой код никогда не должен попадать в релизный исполняемый файл.
Здравствуйте, Khimik, Вы писали:
K>Delphi: если я правильно понимаю, можно не комментировать код, а сделать булеву константу, и этот код поместить в блок if константа then begin end, тогда это будет эквивалентно комментированию
В общем случае — не будет. Это плохой, негодный способ. Ищите в Delphi условную трансляцию/компиляцию, которая по условию включает или не включает в исходный текст определенные блоки (не только операторы, но и определения, объявления, управляющие конструкции вроде var/const/procedure и т.п.). То есть, аналог сишного препроцессора.
Здравствуйте, Евгений Музыченко, Вы писали:
K>>Delphi: если я правильно понимаю, можно не комментировать код, а сделать булеву константу, и этот код поместить в блок if константа then begin end, тогда это будет эквивалентно комментированию
ЕМ>В общем случае — не будет. Это плохой, негодный способ. Ищите в Delphi условную трансляцию/компиляцию, которая по условию включает или не включает в исходный текст определенные блоки (не только операторы, но и определения, объявления, управляющие конструкции вроде var/const/procedure и т.п.). То есть, аналог сишного препроцессора.
Эти ifdef-ы я в Delphi никогда не любил, потому что пока не знаю, как их поменять одой строкой в другом модуле. Я объявляю константами разные параметры компиляции вроде включения сборщика мусора; а тут ведь нельзя, если я правильно понимаю, скормить булеву константу директиве ifdef? Что ей вообще можно кастомного указать?
И ещё вопрос: если я скомпилирую две версии — триальную и окончательную, и буду присылать ссылку на окончательную после покупки, насколько велика возможность, что хакер купит программу и уже окончательную версию начнёт ломать. Если это актуально, может вообще компилировать отдельный билд для каждого покупателя индивидуально (моя программа относительно дорогая, так что может и сойдёт).
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Здравствуйте, Khimik, Вы писали:
K>Я вот подумал. А кто-нибудь пробовал полностью удалить из триальной версии некоторые фичи? Не просто встроить проверку, а закомментировать код, чтобы крякерам самим пришлось это писать. А когда юзер купит лицензию — присылать ему ссылку на полноценную версию
Блин, это делается 3-мя строчками
{$IFDEF FULLWORK}
{$ELSE}
{$ENDIF}
но не защищает от скрамеров, рефрандов, покупки на шару (если нет привязки к HardId и без привязки проверок онлайн лицензий).
И другой вопрос, как в триале юзер проверит функционал, если его не будет?
Здравствуйте, Khimik, Вы писали:
K>Эти ifdef-ы я в Delphi никогда не любил, потому что пока не знаю, как их поменять одой строкой в другом модуле.
Не понял. В чем именно сложности?
K>нельзя, если я правильно понимаю, скормить булеву константу директиве ifdef?
Булеву — нельзя, можно лишь абстрактный идентификатор, определяемый в $Define. Убого, конечно, но хоть что-то. Вместе с {$MACRO ON} можно подставлять строки, определенные $Define.
K>Что ей вообще можно кастомного указать?
В $IfDef — ничего. Там проверка только на то, определен ли макрос.
K>насколько велика возможность, что хакер купит программу и уже окончательную версию начнёт ломать.
Если ему надо, то купит и начнет.
K>компилировать отдельный билд для каждого покупателя индивидуально
Здравствуйте, AWSVladimir, Вы писали:
AWS>Блин, это делается 3-мя строчками AWS>{$IFDEF FULLWORK} AWS>{$ELSE} AWS>{$ENDIF}
В данном случае FULLWORK это что? Это не константа которую объявляет программист в своём коде?
AWS>И другой вопрос, как в триале юзер проверит функционал, если его не будет?
Бывают варианты функционала, которые и так понятно что делают, специально показывать не надо. А у меня это наверно будет утилита, которую можно посмотреть в выложенном мной на youtube видео.
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Здравствуйте, Khimik, Вы писали:
K> У меня тогда заодно вопрос по программированию в Delphi: если я правильно понимаю, можно не комментировать код, а сделать булеву константу, и этот код поместить в блок if константа then begin end, тогда это будет эквивалентно комментированию, т.е. если константа=false, то в экзешник этот код не пойдёт. Всё правильно?
Дефайн TIRAL можно задать, как в коде (будет действовать только локально), так и через директиву компиляции или настройки проекта (будет доступен глобально).
Здравствуйте, Aquilaware, Вы писали:
A>Если позволяет протектор, то такое можно сделать и его штатными средствами без необходимости иметь несколько скомпилированых дистрибутивов ПО. (Код остаётся зашифрованным пока не будет введен правильный ключ. Поскольку у кракера нет ключа, то доступ к коду он получить не может, и тот участок кода остается зашифрованным и криптографически недоступным для кракера)
Скардят разок, и все дела. Самый 100% способ тогда уж просто вынести функционал на сервер. Или всю прогу как SaaS.
Здравствуйте, Khimik, Вы писали:
AWS>>Блин, это делается 3-мя строчками AWS>>{$IFDEF FULLWORK} AWS>>{$ELSE} AWS>>{$ENDIF}
K>В данном случае FULLWORK это что? Это не константа которую объявляет программист в своём коде?
Определение Define, делается несколькими способами
1. в модуле
unit MyUnit
{$Define FULLWORK} // действует на юнит
2. ч/з include // действует где подключен include
{$I mydefine.inc}
файл mydefine.inc
{$Define FULLWORK}
3. В проекте
Options->Delphi Compiler->Conditional Defines // действует на все файлы в проекте
I>тут главное не переборщить — иначе подумают что сама программа кривая и будут негатив писать везде
Никто негатив про ломаные версии в обычных форумах и дискуссиях не пишет. Это всё байки. Все прекрасно понимают, что они пользуются сломаным софтом со всеми вытекающими.
Здравствуйте, wantus, Вы писали:
W>Никто негатив про ломаные версии в обычных форумах и дискуссиях не пишет. Это всё байки. Все прекрасно понимают, что они пользуются сломаным софтом со всеми вытекающими.
еще как пишут, и на форуме и в поддержку жалуются
ну и крякерские форумы в выдаче тоже встречаются, я по одному мониторю успешность взлома
Здравствуйте, icezone, Вы писали:
I>Здравствуйте, wantus, Вы писали:
W>>Никто негатив про ломаные версии в обычных форумах и дискуссиях не пишет. Это всё байки. Все прекрасно понимают, что они пользуются сломаным софтом со всеми вытекающими.
I>еще как пишут, и на форуме и в поддержку жалуются
На что жалуются? На побочные эффекты от плохого взлома?
Здравствуйте, icezone, Вы писали:
I>именно так, пищут что в новой версии баг, после того как я меняю проверки в коде I>они же не знают, что код ошибки их выдает
Есть очень простое решение.
"Thank you for reporting about this issue. Unfortunately, we cannot reproduce it on our side. Please ensure that you use the original software package, the one whose integrity wasn't potentially violated by unknown 3rd parties."
Здравствуйте, Aquilaware, Вы писали:
A>Есть очень простое решение.
A>"Thank you for reporting about this issue. Unfortunately, we cannot reproduce it on our side. Please ensure that you use the original software package, the one whose integrity wasn't potentially violated by unknown 3rd parties."
с этим понятно, просто лучшим вариантом оказалось не выдавать ошибку, а тупо не выполнять работу
в этом случае уже пишут что кряк кривой, а не программа
Ещё хотелось бы немного ликбеза, что такое проверка контрольной суммы и как это сделать самому. Т.е. в принципе вроде всё понятно — посчитать хеш файла и проверять время от времени, не изменился ли он. Может как раз лучше это сделать самому, без привлечения протектора, поскольку можно контролировать время срабатывания — если программу взломают, пусть она перестанет запускаться через полгода, с сообщением что обнаружен взлом.
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.