На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! В разделе обсуждаются следующие темы:
1) Процесс разработки программного обеспечения.
2) Определение требований к программному обеспечению.
3) Составные части и процесс проектирования (см. Шаблоны проектирования).
4) Документирование программного продукта(проекта).
5) Руководство разработкой программного обеспечения.
6) Проектирование пользовательского интерфейса.
7) Контроль версий проекта (см. Управление версиями в Subversion, Стратегии использования svn).
Модераторы: ElcnU
  
> trial версия , алгоритмы создания
    Возникла необходимость создать программку с триал лицензией (15 дней)
    Как можно защитить ее от простого переставления системного времени в винде?

    P.S. К примеру, можно записать строку в реестр, а потом при каждом запуске ее проверять. Но если юзер толковый, то может в реестре эту строку поменять.

    Вот. Собственно, существуют ли какие-то стандартные алгоритмы триал-версий?
    Сообщение отредактировано: cozy -
      AsProtect, однако... От "толкового юзера" защититься можно, а от профи - бесполезно...
        Цитата
        CheshireCat, 18.06.04, 08:50
        а от профи - бесполезно...

        Согласен, но жизнь испортить можно. Можешь менять команды в ассемблерном виде, что затрудняет отладку. В любом случае, прогу сломают, если захотят, но не все пойдут далеко.
        http://www.yandex.ru/yandsearch?text=%E7%E...ype=www&rpt=rad
          вы путаете опытного пользователя с крякером, это две разные вещи.
            Цитата

            AsProtect, однако... От "толкового юзера" защититься можно, а от профи - бесполезно...


            Эт, конечно, хорошо, но это платная прога. А мне хотелось бы реаизовать свой механизм защиты.

            Цитата

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


            Это точно.

            Цитата

            Согласен, но жизнь испортить можно. Можешь менять команды в ассемблерном виде, что затрудняет отладку. В любом случае, прогу сломают, если захотят, но не все пойдут далеко.
            http://www.yandex.ru/yandsearch?text=%E7%E...ype=www&rpt=rad

            ;)
              Цитата
              cozy, 20.06.04, 14:49
              Эт, конечно, хорошо, но это платная прога

              это решаемый вопрос ;)
                cozy, возьми исходники протектора или пакера, посматри... хотя мой тебе совет не мучайся, для нормального крякера ничего ты не напишешь, а для юзера можно что нить простое набросать.
                  Цитата P.O.D @ 21.06.04, 21:12
                  cozy, возьми исходники протектора или пакера, посматри... хотя мой тебе совет не мучайся, для нормального крякера ничего ты не напишешь, а для юзера можно что нить простое набросать.

                  А где можно взять такие исходники?

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

                  P.S. Один знакомый (правда полный ламер) убеждал меня, что видел прогу, которая ставилась на комп только один раз. Т.е. ты ее с диска поставил на один комп, на другой приносишь, а на диске нету файлика setup. Такое возможно? Почему-то мне кажется, что нет.
                    придумай какую-нибудь защиту "от дурака" и потом сам попытайся ее сломать, или попроси знакомых. делать что-то супер-пупер навороченое не имеет смысла: сломают в любом случае, а времени потратишь на нее столько, что успел бы выпустить еще пару версий программы. кстати, кряки располагают к тому, чтобы программа быстрее распостранялась. твою программку быстренько крякнут, она расползется по инету и всем понравится. а в следующей версии ты поставь защиту посильнее или юзай AsProtect и всем придется покупать. но есть та категория людей, которая за софт никогда не платит, ее не обойти никакой защитой :)
                    Сообщение отредактировано: Smoke -
                      Цитата
                      cozy, 21.06.04, 21:17
                      А где можно взять такие исходники?

                      http://upx.sourceforge.net - самый популярный :) должны быть исходники, это опен сорс.
                      а так в посковике любом пробей что-нить типа "exe packer sources"

                      Цитата
                      Smoke, 22.06.04, 07:55
                      Такое возможно?
                      думаю, что нет ;)

                      запись в реестр можно отследить прогой типа regmon. самой оно будет self-mod, т.е при запуске записать в свой exe'шник что нить про этот комп (там s/n харда, биоса, ось и т.д что хочешь и в любом кол-ве). Тут уже посложнее будет юзерам.

                      Добавлено в :
                      Цитата
                      Smoke, 22.06.04, 12:41
                      юзай AsProtect и всем придется покупать
                      ничего подобного, последнюю версию уже снимали через пару дней после релиза.
                      Сообщение отредактировано: P.O.D -
                        Можно дополнительно ограничить количество запусков!
                          Вообщем я переформулирую вопрос, а то обсуждение зашло в тупик:

                          Предложите, пожайлуста, способ создания триал версии программы.
                          Расматриваются все варианты. Имеется ввиду без записи в реестр. Т.к. этот вариант напрашивается сам собой


                          P.S. 2 POD: А как можно писать в свой экзешник?

                          P.S.S. Может я зря ломаю себе голову?
                              Цитата P.O.D @ 22.06.04, 23:07

                              Сэнкс, попробую.

                              Добавлено в :
                              Еще варианты?
                                cozy, а что не поравилось ? ;)
                                ну тогда просто берешь свой exe, копируешь рядом, правишь его, удаляешь оригинал и переименовываешь копию в оригинал через батник вот и все :)
                                  Цитата P.O.D @ 23.06.04, 10:44
                                  cozy, а что не поравилось ? ;)
                                  ну тогда просто берешь свой exe, копируешь рядом, правишь его, удаляешь оригинал и переименовываешь копию в оригинал через батник вот и все :)

                                  ОК, будем смотреть.
                                  Спасибо за помощь
                                    Вараинт записи в ехе ломается созданием копии первого exe .
                                      А если exe на cd-r? Слышал про прогу. ORION. Защищает другие проги, бесплатна, попробуй!
                                        Цитата myaut @ 26.06.04, 17:34
                                        А если exe на cd-r? Слышал про прогу. ORION. Защищает другие проги, бесплатна, попробуй!

                                        Я не смог ее найти. Может дашь ссылку?

                                        А вообще это все, конечно, хорошо, но мне было интересно узнать сами алгоритмы создания триал версий программы, а не поьлзоваться чужими
                                          Тьфу-ты Очепятки!
                                          ORiEN http://zalexf.narod.ru
                                            Цитата myaut @ 28.06.04, 10:35
                                            Тьфу-ты Очепятки!
                                            ORiEN http://zalexf.narod.ru

                                            Спасибо.
                                            Правда по отзывам на софт-сайтах прога так себе
                                              Цитата cozy @ 22.06.04, 20:50
                                              Вообщем я переформулирую вопрос, а то обсуждение зашло в тупик:

                                              Предложите, пожайлуста, способ создания триал версии программы.
                                              Расматриваются все варианты. Имеется ввиду без записи в реестр. Т.к. этот вариант напрашивается сам собой


                                              P.S. 2 POD: А как можно писать в свой экзешник?

                                              P.S.S. Может я зря ломаю себе голову?

                                              Не знаю, насколько будет в тему, но выскажусь.
                                              По времени я не ограничивал- я поставил ограничение на количество уровней игры (делалась игра :).
                                              Дальше было все просто-зашифровал те уровни, которые не хотел показывать. Ключ вычислялся на основе некоторых действий над регистрационным ключем (дополнительно хэш функция вычисляла с определенной вероятностью достоверность ключа). Собственно все- вскрыть такую защиту невозможно (можно только ключ регистрации опубликовать).

                                              ЗЫ Видел вскрытую программу-идиоты отключили хэш функцию-в результате на зашифрованных уровнях мусор :)
                                                2cozy Мож я тоже не в тему, но не легче действительно сделать прогу с ограничениями :)
                                                Ну чтоб все функции работали наполовину...
                                                Ну это как игра у MajorMilizii.
                                                Или, например, как один чекер валидности почты, чекать можно скока хочешь, а вот сохранить результат нельзя.
                                                Для того чтобы получить все - надо купить и скачать уже полную версию.
                                                Сломать можно только купив и выложив уже полный вариант.
                                                А на нем можно в свою очередь уже поставить что-то посолиднее :)
                                                Типа тебе пользователь высылает инфу по компу, она зашивается в прогу (зашифровано) и проверяется.

                                                Но все равно - сломать можно все!!!!
                                                Сообщение отредактировано: LoSE -
                                                  А вот мне такая идея пришла в голову:

                                                  сделать глобальную переменную, смысл которой будет эквивалентен булекой константе. Т.е. опредаляемся, что TRUE == 123, а все остальное FALSE.

                                                  Делаем функцию на вход которой подяется ключ, а на выходе значение для TRUE. Т.е. если ключ правильный, то функция фозвращает 123, а если ключ левый, что возвращается что-то другое.

                                                  Ну и далее, по ходу работы программы в качестве значени TRUE использовать то, что вернула наша функция.

                                                  Что-то я как-то коряво объяснил :(
                                                  В коде это можно было бы выразить примерно так:

                                                  ExpandedWrap disabled
                                                    COMMON UINT g_bTRUE;
                                                     
                                                     
                                                    UINT CalculateKey (char *pchKey)
                                                    {
                                                       UINT nRet;
                                                       ....
                                                       return nRet;
                                                    }


                                                  при после ввода ключа инициалищируешь g_bTRUE
                                                  ExpandedWrap disabled
                                                    g_bTRUE = CalculateKey (pchKey);


                                                  Ну и дальне вместо привычного
                                                  ExpandedWrap disabled
                                                    if (bSomeVar == TRUE)

                                                  пишешь
                                                  ExpandedWrap disabled
                                                    if (bSomeVar == g_bTRUE)
                                                    Цитата
                                                    сделать глобальную переменную, смысл которой будет эквивалентен булекой константе. Т.е. опредаляемся, что TRUE == 123, а все остальное FALSE.


                                                    А кстати отличная идея :)
                                                    Сообщение отредактировано: LoSE -
                                                      На мой взгляд красота идеи будет поломана тем, что гораздо чаще используются обыкновенные конструкции сравнения типа
                                                      if (UnitCoordinate.X>MapLength)
                                                      {
                                                      ...
                                                      ...
                                                      ...
                                                      }
                                                      чем функции, которые возвращают TRUE/FALSE, т.е. простора для ветвления логики и запутывания следов будет не так много.

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

                                                      В третьих в любом случае надо стараться избегать деструктивных (или непредсказуемых) действий программы, потому что есть шанс, что невероятно удачливый юзер пройдет препоны хэш функции и введет таки неправильный ключ, а потом будет кричать по всем форумам, как его кинули и какие у вас кривые руки...
                                                        Совсем необязательно определять TRUE и FALSE, можно например создать список ошибок и определить ERR_OK. И подсчитывать значение удачного завершения какой-либо функции программы.

                                                        Там где надо ставить проверку на возвращаемую ощибку и все. Вбщем-то непредсказуемости особой не будет. Просто все время будет вылезать неизвестная ошибка и действовать юзеру на нервы.

                                                        Ну так надо было правильный ключ вводить -> сам виноват :D

                                                        А внесение всяких вредоносных фич типа формациторания - это уже на усмотрение программиста.

                                                        PS: Потом, можно сделать счетчик ошибок, при старте программы инитить этот счетчик случайным числом в диапазоне от 1 до 255 и как только количество ошибок достигдет этого числа завершить программу.

                                                        PPS: А настоящие ошибки можно отслеживать посредствам SetLastError / GetLastError, ну или еще одну глобальную переменную сделать с кодом реальной ошибки.
                                                          Есть такая идея защиты от взлома: суть в отличном от обычного стиля программирования. Как делаем обычно: есть главная функция, из неё вызываем одну, другую, третью... и т.д. Каждая из вызываемых, вызывается, отрабатывает и возвращается в точку вызова... Т.о. отключив "ненужные" функции проверки всяких ключей - ломаем защиту. Подход номер 2: Главная функция вызывает функцию номер один. Функция номер один больше никогда не возвращается в исходную точку, а вызывает следующую функцию, которая вызывает следующую... и т.д. При этом суть защиты в том, чтобы вычислять адрес следующего перехода, причем правильность адреса можно не проверять, просто тупо переходить туда, куда получилось (на основе введенного пользователем ключа). Очевидная проблема - в случае ввода неправильного ключа программа ведет себя непредсказуемо. Обычные проверки типа if ставить нельзя - сломают. Можно раскидать по коду чекпоинты и запускать watchdog timer на каждом из них. Если произошел неправильный переход, и чекпоинт во время не пройден - watchdog timer завершает программу.

                                                          Во избежание случайного неправильного ввода серийника юзером - просто делаем контрольную сумму на сам серийник и добавляем её в его конец. Вероятность случайного совпадения должна быть минимальной.

                                                          Вот B)
                                                            2 rvt
                                                            Неплохо, но опять же непредсказуемость. Я вот например когда расшифровывал уровни, то не только прогонял ключ через хэш функцию (та самая контрольная сумма), но еще по ключевым местам уровня проверял правильность расшифровки (что несколько снижало криптостойкость, но не очень сильно). Все таки программа не должна падать в случае ошибки ввода ключа. А так с тем же успехом можно зашифровать например всю текстовую информацию функционала, предоставляемого за отдельную плату- и ошибок особых не будет и работать крайне неудобно. Опять же можно поделиться ключом, можно отключить все проверки и расшифровку инфы, предварительно добавив незашифрованные ресурсы-т.е. простор для крякеров останется, но это уже немалая головная боль для них. Кроме того наверняка найдутся те, кто сломает и не проверит- а получится уде фигня, т.е. придется искать уже не просто сломанную версию, а правильно сломанную-а это уже головняк для юзеров.
                                                            Таким образом как и всегда в проблемах безопасности получаем 80% результата приложив 20% усилий. Однако чтобы получить оставшиеся 20% результата нужно приложить еще 80% усилий-а нужно ли?
                                                            Сообщение отредактировано: MajorMilizii -
                                                              Думаю, это зависит от схемы распространения. И к программированию уже не имеет отношения :)
                                                                самый лучший способ - сделать обрезанную нетриальную демо-версию..
                                                                  Имхо лучший способ защиты от простого юзера - повторные проверки через неделю другую. Отследить их крайне сложно, а вот если уж ты засек нечестное использование - тут можно уже и пофантазировать. К примеру пропатчить втихую собственную экзешку отключив совсем важные функции
                                                                    www.exetools.com -
                                                                    армадилло, аспротект и ещё туева хуча протекторов... бери самые неизвестный. для армадила с аспротектом автоматические распаковщики в сети валяются, так что бесмысленно узать.
                                                                      делал я как-то вариант.
                                                                      но мне самомо не понравился, т.к. больно много кода надо писать в кажду программу.
                                                                      суть была такова:
                                                                      генерился текстовый файлик с кучей хлама и парой-тройкой нужных байт.

                                                                      далее файлик переименовывался в key.dll.
                                                                      при запуске - программа проверяла наличие файлика, и изменения в нем по контрольной сумме.
                                                                      если изменения и КС не совпадают или файлик отсутствует - ошибка запуска.

                                                                      далее после каждого запуска программа модифицировала файлик - писала дату последнего запуска и сравнивала ее с датой первого запуска.
                                                                      если что-то не так - ошибка программы.

                                                                      таким образом обойти можно было бы эту защиту только одним способом - при каждом запуске подставлять чистый файлик key.dll.

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


                                                                      Рейтинг@Mail.ru
                                                                      [ Script execution time: 0,1502 ]   [ 16 queries used ]   [ Generated: 26.04.24, 00:49 GMT ]