Как защитить программное обеспечение от системных изменений даты и времени?

Я хотел бы добавить систему лицензирования в приложение. Например: пользователь покупает лицензию на 1 месяц и после истечения этой программы (стиль Kinda Anti-Virus?).

Проблема в том, что приложение должно работать в системах, которые могут или не могут быть подключены к интернету, поэтому как защитить от изменений даты и времени?

Сохранение времени запуска приложения и закрытия в зашифрованном файле не будет работать, поскольку дата может быть изменена (при продолжительности работы программы 8 часов в день, можно будет продлить лицензию почти до 300% в идеальном случае - изменить время закрытия приложения время + 1 секунда до запуска программы).

Другой вопрос - есть ли способ защитить от программного обеспечения, такого как http://en.wikipedia.org/wiki/Deep_Freeze_(software)? (возможно, сканирование драйверов?)

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

Ответы

Ответ 1

Шаг 1: Создайте запись trial_tracker в зашифрованном виде в реестре Windows и в файле.

Шаг 2: Назначьте временную метку установки приложения (yyyy-mm-dd-hh-mm-ss) в trial_tracker

Когда приложение запускается, проверьте, больше ли текущая временная метка системы, чем trial_tracker, и меньше ожидаемой даты истечения срока действия

  • Если да, обновите trial_tracker до текущей временной метки системы и продолжайте.

  • Если нет, пробная версия trial_tracker была изменена или пробное время истекло. Попросите пользователя приобрести полную версию или выйти.

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

Наряду с этим могут быть применены дополнительные удаленные проверки, которые зависят от интернет-соединения (необязательно)

Ответ 2

Да, можно было бы продлить лицензию на 300%, но с большим трудом для пользователя. Честно говоря, если кто-то собирается тратить каждый день месяца, переустанавливая свое время на одну секунду после того, как они покинут вашу программу, прежде чем снова начать использовать ее, вы ничего не собираетесь делать, и время, которое вы делаете, чтобы остановить они будут стоить вам больше, чем когда-либо.

Ответ 3

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

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

Если, однако, вы обманываете людей, делая навязчивые и страшные вещи, тогда вы потеряете оплату клиентов и создадите гораздо большую мотивацию для взлома ppl.

Ответ 4

Создайте службу Windows, которая будет установлена ​​с вашим приложением, но будет автоматически запускаться. Следите за истекшим временем и смещениями там. Предоставьте API для вашего приложения, чтобы поговорить с сервисом, чтобы запросить время использования/истекшее время.

Ответ 5

Я предполагаю, что телефоны с программным обеспечением, по крайней мере, один раз, чтобы вы знали, что лицензионный ключ был куплен/установлен/расширен?

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

Ответ 6

Может быть, вы могли бы комбинировать использование даты/времени с подсчетом тика? Затем, если вы видите дату/время с несовместимым тиком, вы можете отметить это как нарушение. Это изменит ваш худший сценарий, чтобы потребовать перезагрузки машины, когда они хотят манипулировать часами, чтобы злоупотреблять вашей лицензией.

Ответ 7

Из вашей программы вы создаете журнал времени, когда приложение запускается и завершается. Журнал зашифрован и не позволяет общему пользователю обмануть его содержимое.

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

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

Идея заключается в том, что время течет линейно в будущее, оно может только увеличивать счетчик с даты запуска, а внешние данные необходимы для запуска программы в будущем, поэтому вы создали зависимость зависимости от обновлений. Эта последняя стратегия - это то, что Microsoft и co использовали, и они называют ее обновлениями/исправлениями безопасности...

Ответ 8

Вы должны сократить время, прошедшее между проверками. Вместо проверки только при запуске приложения и завершении работы приложения вы должны проверять каждые 5, 10 или 15 минут с использованием таймера или фонового потока. Таким образом, пользователь не может изменить время (потому что программное обеспечение остановится через несколько минут).

Однако я бы предпочел заплатить нужное мне программное обеспечение, а не иметь правильную дату/время на моей машине.

Ответ 9

Создайте драйвер Windows, который запускается при загрузке, захватывает системную дату-время и запускается до выключения, отслеживая время независимо от Windows [sleep (1000); ++ время; ].

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

Примечание. Если какое-либо приложение выполнило это, я бы не установил его в первую очередь. Если бы мне было поручено взломать его, это было бы тривиально. Невозможно предотвратить обратное проектирование. НИКТО. Он будет взломан, несмотря ни на что. И когда это произойдет, вы будете сожалеть о том, чтобы положить в это время.

Ответ 10

Включить привилегию Использовать ведение журнала (в процессе установки), а затем проверить событие с измененным временем в журнале событий Windows, как описано здесь:

http://www.stevebunting.org/udpd4n6/forensics/timechange.htm

Затем вы можете вычесть разницу во времени с лицензией (а не аннулировать лицензию, так как некоторые изменения системных часов являются законными).

ПРИМЕЧАНИЕ. Это не будет защищать от изменения системных часов при изменении из BIOS.

Ответ 11

Вы прилагаете слишком много усилий в самой защите.

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

Ответ 12

Возможно, вы могли бы предлагать это программное обеспечение в качестве услуги, если вы так беспокоитесь о принудительном использовании лицензии?

Ответ 13

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

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