На главную Наши проекты:
Журнал   ·   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.
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Как определить, что системное время перевели назад?
    Простенькая программа, без инсталяшки, должна после определенной даты, хранящейся в программе, перестать запускаться.
    Но вот есть проблема: как можно отследить, что пользователь перевел время/дату назад?
    Реестр можно подправить, файлы программы можно заново скопировать...
    Думал при старте определять время последнего доступа в каталоги "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 минут. Это усложнит реверс.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


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