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

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

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

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

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

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

13 ответов


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

Шаг 2: назначить метку времени установки приложения (гггг-ММ-ДД-чч-мм-СС ) trial_tracker

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

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

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

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

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


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


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

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

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


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


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

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


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


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

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

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

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


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

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


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

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

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


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

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

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

Примечание: это не защитит от изменений системных часов при изменении БИОС.


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

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


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


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

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