На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются.
4. Используйте теги [ code=cpp ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Старайтесь формулировать свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной и более давности без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта (C++) user posted image FAQ Форума user posted image Наши Исходники user posted image Поиск по Разделу user posted image MSDN Library Online (Windows Driver Kit) user posted image Google

Ваше мнение о модераторах: user posted image B.V.
Модераторы: B.V.
  
> Как определить, что системное время перевели назад?
    Простенькая программа, без инсталяшки, должна после определенной даты, хранящейся в программе, перестать запускаться.
    Но вот есть проблема: как можно отследить, что пользователь перевел время/дату назад?
    Реестр можно подправить, файлы программы можно заново скопировать...
    Думал при старте определять время последнего доступа в каталоги "Program Files" и Windows, и брать самое позднее время/дату,
    но ведь после запуска система исправит на время, установленное пользователем.
    Сканировать каталог и смотреть время у каждого файла - во-первых это долго, во-вторых, если старенький винт, то грохот будет...
    А сканировать определенное число файлов, так можно не попасть на самый свежий...

    Как быть?
      Самый надежный вариант, при наличии инета, это - NTP, опрос серверов времени.

      Добавлено
      Если без инета, то "осмотр" некоторого множества, скажем так, "ключевых" файлов и времен их создания/доступа:
      %SYSTEMDRIVE%\hiberfil.sys
      %USERPROFILE%\NTUSER.DAT
      %USERPROFILE%\NTUSER.DAT{*}
      %USERPROFILE%\Local Settings\History\History.IE5\*
      %USERPROFILE%\AppData\Roaming\Mozilla\Firefox\Profiles\*
      ...
      ...
      ...
      Ну и в таком духе ... Ну и ждать кряка программы, если программа норм - быстро ее вылечат.
        Спасибо!
        Тут не только без интернета, да еще на некоторых ПК стоит Windows 98!
        А что в ней схожего есть?
          Цитата Vladimir_ @
          должна после определенной даты, хранящейся в программе, перестать запускаться.

          Предлагаю заменить дату на количество запусков.
            Цитата B.V. @
            Предлагаю заменить дату на количество запусков.

            Это самое простое - что обходится, даже без кряков. Монитор реестра + Файловый монитор + контроль операций удаления, создания и записи (чтение не интересует). Пишется loader который приводит все в первозданное состояние. ИМХО, нужно читать даты тех файлов, которые пишет не эта программа, а системные, временные, кэши разные.
              Цитата B.V. @

              Тут дата нужна
                Цитата JoeUser @
                Это самое простое - что обходится, даже без кряков.

                То, что ты описал далее, на самом деле и является "кряком". А насчет "простое" -- это проще, чем поменять системную дату?
                  Цитата B.V. @
                  То, что ты описал далее, на самом деле и является "кряком"

                  Ну да, я имел ввиду - патчи.

                  Цитата B.V. @
                  А насчет "простое" -- это проще, чем поменять системную дату?

                  В том то и дело, если ловить действия программы по файлам и реестру, то:

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

                  В итоге, "счетчик" я бы обошел легче.
                    Тут надо найти какие-то хитрые файлы, которые после смены даты/времени не сразу меняют свою дату/время - а то как отследить, если система после перезагрузки сразу изменит?
                      В чистом виде никак, имхо проще сделать триал, с реально вырезанным функционалом, а не просто заблоченным по какому либо критерию.
                        Да у меня простенькая программа, нужно так же просто ограничить время работы с отслеживанием перевода даты назад. И ломать смысла нет
                          Цитата JoeUser @
                          Самый надежный вариант, при наличии инета, это - NTP, опрос серверов времени.

                          При реализации этой задачи возможны интересные препятствия.
                          Указанный формат не соответствует правильному, хотя эта
                          информация из RFC.
                          Впрочем, Wireshark декодирует и покажет всё как надо.
                          ---
                          Удивительно, уже не первый раз сталкиваюсь.
                          Читаешь RFC, а потом оказывается, что "не соответствует".
                            Цитата Vladimir_ @
                            Тут надо найти какие-то хитрые файлы, которые после смены даты/времени не сразу меняют свою дату/время - а то как отследить, если система после перезагрузки сразу изменит?

                            "Против лома - нет приема!" :lol: Совет простой - не зацикливайся на 100%-ном отказе работы по лимиту календаря. Напиши шрифтом стопицотого размера, что "программа по истечении времени и без регистрации будет нестабильна на 77%". Нарушения ищи по файлам, на которые я тебе дал наколку, молча выгружай прогу спустя 3-17 мин, как- только обнаружен ахтунг. Для энд-юзера это гемор аццкий и уверенный аргумент достать лопатник и отслюнявить лавэ :lol:
                              В общем поигрался с переводом времени и перезагрузкой винды.
                              Пока нашел какие файлы искать, которые после перезагрузки не меняют свои дату/время:
                              C:\Windows\*.ini
                              TEMP\*.*
                              Добавлю еще время каталогов C:\Windows, С:\RECYCLER и самой программы.
                              Думаю, что этого для такой проги будет достаточно.

                              И еще попутные вопросы:
                              1. чем быстрее получить время создания/модификации ОДНОГО каталога или файла? Ведь он может быть не доступен. Для поиска по маске пользуюсь FindFirstFile()
                              2. поиск файлов засуну в поток, стартанув его при старте проги. Допустим было найдено, что время перевели. Как более-менее правдоподобно аварийно завершить программу? Т.е. чтобы было видно, что это не защита сработала, а ошибка в проге?
                                Цитата Vladimir_ @
                                И еще попутные вопросы:
                                1. чем быстрее получить время создания/модификации ОДНОГО каталога или файла? Ведь он может быть не доступен. Для поиска по маске пользуюсь FindFirstFile()

                                Быстрее API не найдешь.

                                Цитата Vladimir_ @

                                2. поиск файлов засуну в поток, стартанув его при старте проги. Допустим было найдено, что время перевели. Как более-менее правдоподобно аварийно завершить программу? Т.е. чтобы было видно, что это не защита сработала, а ошибка в проге?

                                Самое, имхо, правильное - сообщать не сразу по факту обнаружения, а спустя 7-27 минут. Это усложнит реверс.
                                  Цитата Vladimir_ @
                                  Как более-менее правдоподобно аварийно завершить программу? Т.е. чтобы было видно, что это не защита сработала, а ошибка в проге?

                                  Например, вообще ничего не сообщать и не завершать.
                                  Просто с какого-то момента ограничить функционал.
                                  Не выполнять какие-то функции и всё.
                                    Цитата
                                    Как более-менее правдоподобно аварийно завершить программу? Т.е. чтобы было видно, что это не защита сработала, а ошибка в проге?

                                    "Точка входа в процедуру в библиотеке kernel32.dll не найдена" :whistle:

                                    У меня вопрос: - какой смысл НЕ сообщать пользователю о том, что период триала простенькой программы закончился?
                                      Цитата Prince @
                                      какой смысл НЕ сообщать пользователю о том, что период триала простенькой программы закончился?
                                      Очевидно, чтобы пользователь не захотел рыться в поисках взлома программы, а обдумал свои действия и наверняка увидел, что период закончился. Если же не увидит, то может сообщить издателю, а тогда автор прожки намекнёт, что "срок то вышел, поди? :whistle: ".
                                        Пожалуй, я бы подумал, что автор программы очень странный и лучше с ним не связываться. Куплю лицензию, вылезет какая-то ошибка, и поди знай, намек ли это автора на что-либо, или глюк программы...
                                          Ограничивать функционал непродуктивно, найти под дебагером точку ветвления несложно. Однако простое отсрочивание решения куда сильнее напрягает хацкеров. Сделать несколько прокси-объектов, передающий некое состояние друг другу с произвольной задержкой каждый (особенно если состояние не банальный bool, а какое-нибудь DWORD, а ещё лучше HANDLE от GlobalAlloc(), хранящий экземпляр полиморфного класса, чем метод будет PostMessage()ить этот признак каким-нибудь WM_COPYDATA), явно на порядок проще в реализации, чем во взломе. Только главное, как абсолютно верно заметил Prince, ничего не портить. Выдать транспарант, сохранить состояние и выйти – самое то. Пусть запускает повторно, открывает документы итп заново, если ему нравится такой рабочий процесс.
                                            Цитата Qraizer @
                                            Ограничивать функционал непродуктивно, найти под дебагером точку ветвления несложно.

                                            Найти не сложно, если такая точка вообще есть.
                                            Можно ограничить функционал (в dll, например) как посредством физической
                                            редакции исполнимого файла, так и полной заменой полноценной dll
                                            на демо-версию.
                                            Те полноценное приложение вообще может отсутствовать.
                                            .. И пусть тогда заново скачивает, устанавливает..
                                            "запускает повторно, открывает документы итп заново, если ему нравится такой рабочий процесс". ©
                                              Vladimir_
                                              Можно поставить диапазон дат в которые прога запускается(или минимальную дату) 05.05.2016-07.09.2016. Если умельцы мотают дату, как правило сразу несколько лет.
                                                Цитата ^D^ima @
                                                Можно поставить диапазон дат в которые прога запускается(или минимальную дату) 05.05.2016-07.09.2016. Если умельцы мотают дату, как правило сразу несколько лет.

                                                Не не не :lol: Мотают на дату первого запуска.

                                                Vladimir_, а в чем суть программы, что она делает?
                                                  Все советчики в этой теме забывают главное: не ломаемой защиты не существует. Весь вопрос в целесообразности взлома, а целесообразность зависит от востребованности. Если программа простая и не пользуется особой популярностью, смысла усложнять защиту никакого нет.

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


                                                    Рейтинг@Mail.ru
                                                    [ Script execution time: 0,0508 ]   [ 18 queries used ]   [ Generated: 28.03.24, 09:13 GMT ]