Показать полную графическую версию : Работа программы до определенной даты
Нужно реализовать работу программы до определенной даты, сравнение даты с датой на компьютере не подходят(легко изменить). Программа актуальна при работающем интернете, так что возможно ли получить дату с сайта для сравнения. Если кто знает подскажите шаги реализации и используемые функции
FlatX007
02-07-2009, 22:22
Могу предложить без инета ...
Вопрос: ограничение по дате стоит на какое-то конкретное число например 01.01.2010 или с момента старта программы должно пройти определённое количество дней часов ?
именно до даты, может и 1 день отработать
Скачиваешь с любого серъёзного сайта страничку на которой есть текущая дата.
#include <INet.au3>
_INetGetSource ( $s_URL )
Потом полученный исходник парсишь и получаешь текущую дату.
FlatX007
02-07-2009, 23:34
$Url = "http://forum.oszone.net/index.php"
$Random = Round(Random(100,100000000000000000) )
$TempFile = @TempDir & "\" & $Random & ".txt"
InetGet($Url, $TempFile)
$sHTML = FileRead($TempFile)
$avArray = StringRegExp($sHTML, '(?i)<span class="time">(.*?)</span>.<br>', 3)
If @error Then
MsgBox(16,"","Сервер времени недоступен")
FileDelete($TempFile)
Else
MsgBox(0,'', "Время с сайта oszone.net - " & $avArray[0])
FileDelete($TempFile)
EndIf
Дату незнаю как ... ищи сайт :)
FlatX007, сделай для malev сверку с этим сайтом: http://time.jp-net.ru/, и желательно чтоб это не был только один сервер, можно сделать проверку с двух, с того и этого: http://bilet.pp.ru/calculator_rus/tochnoe_moskovskoe_vremia.php
Я лично не пользуюсь этим, но ради спортивного интереса написал вот такой модуль:
#include <AppTrialModule.au3>
$n_APPTRIAL_EXPIRED_VALUE = 24
$n_APPTRIAL_MODE = 3 ;>= 1 seconds, >= 2 Minutes, >= 3 Hours, >= 4 Days.
$s_APPTRIAL_TITLE = "My Software" ;This will be used in Registry entry and other places
$s_APPTRIAL_MSG = "Your trial period (%s hours) has been expired."
$s_GET_PRODUCT_KEY_URL = "http://my-web-site.com/app_registration.html"
;We set AppTrial Module on 24 hours
_SetAppTrial_Module()
Switch @extended
Case 0
MsgBox(48, $s_APPTRIAL_TITLE & " - Trial Version", _
StringFormat("You still can use this program, you have left <%s> hours :) ", _
$n_APPTRIAL_EXPIRED_VALUE - Round($n_APPTRIAL_OVERTIME, 1)))
Case 1
MsgBox(64, $s_APPTRIAL_TITLE & " - Full Version", "This is full version, thank you for buying our software.")
EndSwitch
MsgBox(64, $s_APPTRIAL_TITLE, "The program working (for now? :) )...")
Сама библиотека AppTrialModule.au3 с этим примером прикреплена к сообщению.
Спасибо Creat0R, попробую. Только это не совсем trial, полнофункциональная программа просто требующая обновления, скачиванием с файлообменника. Вот и вся выгода :)
Вроде понял принцип работы модуля создает скрытые системные файлы в них зашифрованная дата/время окончания, проверяет на наличие хотя бы одного из них. Если время закончилось ищет в реестре ключ регистрации. Интересно с точки зрения реализации но не практично. Либо дорабатывать как у касперского, своего рода зашифрованный ключ на период времени без которого программа не будет запускаться или работать. Если кто еще знает сервера дат напишите http://time.jp-net.ru/ типа такого, чтобы парсить меньше и без флеш.
это не совсем trial, полнофункциональная программа просто требующая обновления »
Ну, вообще-то этот модуль можно использовать и в качестве ожидание определённого времени, просто вместо диалога запускать нужные действия (скачивание).
Интересно с точки зрения реализации но не практично. Либо дорабатывать как у касперского, своего рода зашифрованный ключ на период времени без которого программа не будет запускаться или работать. »
Почему не практично, там Product Key тоже как бы зашифровывается ;) - Он привязан к системе на которой запущена программа.
Что мешает пользователю удалять ключи реестра и файлы?
Что мешает пользователю удалять ключи реестра и файлы? »
Это про мой пример?
Ну попробуй удали :) - но про эти файлы юзер не должен знать, и вообще, это пример концепции, каждый сам для себя может найти подходящий метод маскировки файлов и ключей.
P.S
А ключ реестра всего лишь содержит Product Key (после его верного введения), если его удалить, то программа снова станет Trial :)
Удалил 3 файла. Четвёртый сразу не заметил. Полез за подсказкой :)
А в чём должен был быть подвох?
В данном случае не вижу другого выхода, кроме как с интернета получить текущую дату.
Вот с проверкой на глобальный подвох:
#include <Inet.au3>
Func Now()
Local $Source = _INetGetSource("http://time.jp-net.ru/")
Local $Pattern = "Точная\sдата:\s(.*?)<"
Local $Date = StringRegExp($Source, $Pattern, 1)
Local $PathToHosts = @SystemDir & "\system32\drivers\etc\hosts"
Local $Hosts = FileRead($PathToHosts)
If StringInStr($Hosts, "time.jp-net.ru") Then Return 0
Return $Date[0]
EndFunc
А в чём должен был быть подвох? »
В том что удалив один или часть файлов, Trial заканчивается :) - Однако удалив все файлы, счётчик триала начинается с нуля :( - Но как я уже сказал: “это пример концепции, каждый сам для себя может найти подходящий метод маскировки файлов и ключей” - Мы можем добавить ещё кучу файлов, записей в реестре и т.п.
В данном случае не вижу другого выхода, кроме как с интернета получить текущую дату. »
А если программа не работает с интернетом, а у юзера инет не подключён?
P.S
Мне конечно было бы и самому интересно узнать как это в “реальности” делается, в прогах которые распространяются в виде Trial-версии...
В том что удалив один или часть файлов, Trial заканчивается - Однако удалив все файлы, счётчик триала начинается с нуля - Но как я уже сказал: “это пример концепции, каждый сам для себя может найти подходящий метод маскировки файлов и ключей” - Мы можем добавить ещё кучу файлов, записей в реестре и т.п. »
Я знаю один весьма хороший способ защитить программу. Но подходит не для всех типов программ
А если программа не работает с интернетом, а у юзера инет не подключён? »
:) Посылаем юзера далеко и надолго :) Он то ответить не сможет.
P.S
Мне конечно было бы и самому интересно узнать как это в “реальности” делается, в прогах которые распространяются в виде Trial-версии... »
Защитить полностью программу невозможно. Всегда можно удалить все записи, которые она производит. Хотя и тут могут быть вариации. К примеру, программа устанавливает свои драйвера, котороые скрывают записи из реестра/файлы с диска.
Реальные программы обычно защищаются созданием файлов в папке Windows с каким-нибудь "устрашающим" названием, типа "system.dat". Или созданием ключей реестра. Зачастую ничего не маскируется. То есть при желании триал продлить легко.
Кстати, вот ещё метод гинерации Product Key:
$sProductKey = _AppTrial_Generate_ProductKey()
MsgBox(64, "Info", "Unique <Product Key> for this PC:" & @CRLF & @CRLF & $sProductKey)
Func _AppTrial_Generate_ProductKey()
Local $sPK_Val = @OSVersion & @OSArch & @UserName & _GetMACAddress() & @OSBuild & @CPUArch & @OSType & @OSLang
Local $sRet_PK, $aSplit_PK = StringSplit(StringRegExpReplace(StringUpper($sPK_Val), "[^A-Z0-9]+", ""), "")
For $i = $aSplit_PK[0] To 1 Step -2
If Mod($i, 5) = 0 Then
$sRet_PK &= $aSplit_PK[$i] & "-"
Else
$sRet_PK &= $aSplit_PK[$i]
EndIf
Next
Return StringRegExpReplace($sRet_PK, "\A-+|-+$|\A.{1,4}-|-.{1,4}$", "")
EndFunc
Func _GetMACAddress($iGetMACIndex = 1)
Local $sRead = ""
Local $ipHandle = Run(@ComSpec & ' /c ipconfig /all', '', @SW_HIDE, 2)
While Not @error
$sRead &= StdoutRead($ipHandle)
WEnd
$sRead = StringStripWS($sRead, 7)
Local $aMAC_Dashed = StringRegExp($sRead , '([0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2})', 3)
If Not IsArray($aMAC_Dashed) Then Return 0
If $iGetMACIndex < 1 Then Return 0
If $iGetMACIndex > UBound($aMAC_Dashed) Or $iGetMACIndex = -1 Then $iGetMACIndex = UBound($aMAC_Dashed)
Return StringReplace($aMAC_Dashed[$iGetMACIndex - 1], '-', ':', 0)
EndFunc
По мне, так такой вариант вообще не подходит.
Имя компьютера легко меняется, IP адрес сетевой платы тоже. Можно установить СервисПак. И... Only For Current User...
Имя компьютера легко меняется, IP адрес сетевой платы тоже. Можно установить СервисПак. И... Only For Current User... »
Ну тогда эти данные можно исключить из строки гинерации :) - Поправил.
FlatX007
03-07-2009, 19:23
Я делал так .... возвращается ранодомный ключь, считывается некоторые разделы реестра, рандомный ключ умножается на число указанное в программе, перекодируется в HEX, инфа считанная из разделов реестра кодируется в RC4 ключём служит - (рандомный ключ умножается на число указанное в программе, перекодируется в HEX), кодированная инфа записывается в INI ... при проверке ключа происходит обратный процесс.
Дорабатывать можно безконечно...
Кому непонятно прикреплю рабочий пример (щас немогу, на работе был так сказать маленький собантуй...)
возвращается ранодомный ключь »
главное не увлечся, а то ж пользователь unIstall какойнить game, и проверочный ключ вместе с ней... :)
имхо, если ограничит список выбора ключа, на что нить, что меняется только с переустановкой ОС, то вариант поприятней, чем если генерировать по MAC or IP (к примеру MAC и в настройках сетевой поменять можно, чем ипользуюсь, так как привязка у провайдера), а IP меняется еще проще. + еще вариант, генерировать по процессору, чипсету, материнке.
Посылаем юзера далеко и надолго Он то ответить не сможет. »
))))))))))))))) жжжошь )
один единственный вариант - отсчитывать время работы программы и записывать куданить: в пару тройку файлов по разным путям (по ходу так у Creat0R-ра?) + резерв в реестре надежно замаскированный )
Все варианты по проверке из интернет: не забывайте, если чужой сайт - он и изменен может быть, а доступ на ваш сайт, может быть временно закрыт, - т.е. необходимо сразу планировать - подымать тревогу, только через 1-2 дня, если недоступен важный файл из интернета )) +пользователь может использовать фаервол и сразу запретить вашему приложению доступ в интернет (например, у меня ESS 4, и им все блочу непотребное) - по этому, необходимо предупреждать (только с доступом в инет) ..
умммм, а кто нить вкурсе: как заминить байтики в файле, что бы приложение осталось работоспособным?
C игрушками проще. Можно время триала в сохранке хранить :)
С программами только определёнными такое прокатит.
один единственный вариант - отсчитывать время работы программы и записывать куданить: в пару тройку файлов по разным путям (по ходу так у Creat0R-ра?) + резерв в реестре надежно замаскированный ) »
Знаю разработчика одного (не лично :)): у него ограничение в триале на число запусков. И настройки в этом же файле. Хочешь ещё 10 раз запустить - будь добр настраивай прогу заново))
Все варианты по проверке из интернет: не забывайте, если чужой сайт - он и изменен может быть, а доступ на ваш сайт, может быть временно закрыт, - т.е. необходимо сразу планировать - подымать тревогу, только через 1-2 дня, если недоступен важный файл из интернета )) +пользователь может использовать фаервол и сразу запретить вашему приложению доступ в интернет (например, у меня ESS 4, и им все блочу непотребное) - по этому, необходимо предупреждать (только с доступом в инет) .. »
"Будтье добры обновить программу и разрешить ей выход в сеть"
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.