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


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