PDA

Показать полную графическую версию : Работа программы до определенной даты


Страниц : [1] 2

malev
02-07-2009, 22:08
Нужно реализовать работу программы до определенной даты, сравнение даты с датой на компьютере не подходят(легко изменить). Программа актуальна при работающем интернете, так что возможно ли получить дату с сайта для сравнения. Если кто знает подскажите шаги реализации и используемые функции

FlatX007
02-07-2009, 22:22
Могу предложить без инета ...

Вопрос: ограничение по дате стоит на какое-то конкретное число например 01.01.2010 или с момента старта программы должно пройти определённое количество дней часов ?

malev
02-07-2009, 22:56
именно до даты, может и 1 день отработать

SyDr
02-07-2009, 23:20
Скачиваешь с любого серъёзного сайта страничку на которой есть текущая дата.
#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


Дату незнаю как ... ищи сайт :)

beve
02-07-2009, 23:57
FlatX007, сделай для malev сверку с этим сайтом: http://time.jp-net.ru/, и желательно чтоб это не был только один сервер, можно сделать проверку с двух, с того и этого: http://bilet.pp.ru/calculator_rus/tochnoe_moskovskoe_vremia.php

Creat0R
03-07-2009, 01:47
Я лично не пользуюсь этим, но ради спортивного интереса написал вот такой модуль:

#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 с этим примером прикреплена к сообщению.

malev
03-07-2009, 09:11
Спасибо Creat0R, попробую. Только это не совсем trial, полнофункциональная программа просто требующая обновления, скачиванием с файлообменника. Вот и вся выгода :)
Вроде понял принцип работы модуля создает скрытые системные файлы в них зашифрованная дата/время окончания, проверяет на наличие хотя бы одного из них. Если время закончилось ищет в реестре ключ регистрации. Интересно с точки зрения реализации но не практично. Либо дорабатывать как у касперского, своего рода зашифрованный ключ на период времени без которого программа не будет запускаться или работать. Если кто еще знает сервера дат напишите http://time.jp-net.ru/ типа такого, чтобы парсить меньше и без флеш.

Creat0R
03-07-2009, 14:28
это не совсем trial, полнофункциональная программа просто требующая обновления »
Ну, вообще-то этот модуль можно использовать и в качестве ожидание определённого времени, просто вместо диалога запускать нужные действия (скачивание).

Интересно с точки зрения реализации но не практично. Либо дорабатывать как у касперского, своего рода зашифрованный ключ на период времени без которого программа не будет запускаться или работать. »
Почему не практично, там Product Key тоже как бы зашифровывается ;) - Он привязан к системе на которой запущена программа.

SyDr
03-07-2009, 15:30
Что мешает пользователю удалять ключи реестра и файлы?

Creat0R
03-07-2009, 15:55
Что мешает пользователю удалять ключи реестра и файлы? »
Это про мой пример?
Ну попробуй удали :) - но про эти файлы юзер не должен знать, и вообще, это пример концепции, каждый сам для себя может найти подходящий метод маскировки файлов и ключей.

P.S
А ключ реестра всего лишь содержит Product Key (после его верного введения), если его удалить, то программа снова станет Trial :)

SyDr
03-07-2009, 17:53
Удалил 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

Creat0R
03-07-2009, 18:17
А в чём должен был быть подвох? »
В том что удалив один или часть файлов, Trial заканчивается :) - Однако удалив все файлы, счётчик триала начинается с нуля :( - Но как я уже сказал: “это пример концепции, каждый сам для себя может найти подходящий метод маскировки файлов и ключей” - Мы можем добавить ещё кучу файлов, записей в реестре и т.п.

В данном случае не вижу другого выхода, кроме как с интернета получить текущую дату. »
А если программа не работает с интернетом, а у юзера инет не подключён?

P.S
Мне конечно было бы и самому интересно узнать как это в “реальности” делается, в прогах которые распространяются в виде Trial-версии...

SyDr
03-07-2009, 18:35
В том что удалив один или часть файлов, Trial заканчивается - Однако удалив все файлы, счётчик триала начинается с нуля - Но как я уже сказал: “это пример концепции, каждый сам для себя может найти подходящий метод маскировки файлов и ключей” - Мы можем добавить ещё кучу файлов, записей в реестре и т.п. »
Я знаю один весьма хороший способ защитить программу. Но подходит не для всех типов программ
А если программа не работает с интернетом, а у юзера инет не подключён? »
:) Посылаем юзера далеко и надолго :) Он то ответить не сможет.

P.S
Мне конечно было бы и самому интересно узнать как это в “реальности” делается, в прогах которые распространяются в виде Trial-версии... »
Защитить полностью программу невозможно. Всегда можно удалить все записи, которые она производит. Хотя и тут могут быть вариации. К примеру, программа устанавливает свои драйвера, котороые скрывают записи из реестра/файлы с диска.
Реальные программы обычно защищаются созданием файлов в папке Windows с каким-нибудь "устрашающим" названием, типа "system.dat". Или созданием ключей реестра. Зачастую ничего не маскируется. То есть при желании триал продлить легко.

Creat0R
03-07-2009, 18:44
Кстати, вот ещё метод гинерации 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

SyDr
03-07-2009, 18:53
По мне, так такой вариант вообще не подходит.
Имя компьютера легко меняется, IP адрес сетевой платы тоже. Можно установить СервисПак. И... Only For Current User...

Creat0R
03-07-2009, 19:14
Имя компьютера легко меняется, IP адрес сетевой платы тоже. Можно установить СервисПак. И... Only For Current User... »
Ну тогда эти данные можно исключить из строки гинерации :) - Поправил.

FlatX007
03-07-2009, 19:23
Я делал так .... возвращается ранодомный ключь, считывается некоторые разделы реестра, рандомный ключ умножается на число указанное в программе, перекодируется в HEX, инфа считанная из разделов реестра кодируется в RC4 ключём служит - (рандомный ключ умножается на число указанное в программе, перекодируется в HEX), кодированная инфа записывается в INI ... при проверке ключа происходит обратный процесс.
Дорабатывать можно безконечно...

Кому непонятно прикреплю рабочий пример (щас немогу, на работе был так сказать маленький собантуй...)

proxy
03-07-2009, 20:07
возвращается ранодомный ключь »
главное не увлечся, а то ж пользователь unIstall какойнить game, и проверочный ключ вместе с ней... :)
имхо, если ограничит список выбора ключа, на что нить, что меняется только с переустановкой ОС, то вариант поприятней, чем если генерировать по MAC or IP (к примеру MAC и в настройках сетевой поменять можно, чем ипользуюсь, так как привязка у провайдера), а IP меняется еще проще. + еще вариант, генерировать по процессору, чипсету, материнке.

Посылаем юзера далеко и надолго Он то ответить не сможет. »
))))))))))))))) жжжошь )
один единственный вариант - отсчитывать время работы программы и записывать куданить: в пару тройку файлов по разным путям (по ходу так у Creat0R-ра?) + резерв в реестре надежно замаскированный )


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

умммм, а кто нить вкурсе: как заминить байтики в файле, что бы приложение осталось работоспособным?

SyDr
03-07-2009, 20:18
C игрушками проще. Можно время триала в сохранке хранить :)
С программами только определёнными такое прокатит.

один единственный вариант - отсчитывать время работы программы и записывать куданить: в пару тройку файлов по разным путям (по ходу так у Creat0R-ра?) + резерв в реестре надежно замаскированный ) »
Знаю разработчика одного (не лично :)): у него ограничение в триале на число запусков. И настройки в этом же файле. Хочешь ещё 10 раз запустить - будь добр настраивай прогу заново))

Все варианты по проверке из интернет: не забывайте, если чужой сайт - он и изменен может быть, а доступ на ваш сайт, может быть временно закрыт, - т.е. необходимо сразу планировать - подымать тревогу, только через 1-2 дня, если недоступен важный файл из интернета )) +пользователь может использовать фаервол и сразу запретить вашему приложению доступ в интернет (например, у меня ESS 4, и им все блочу непотребное) - по этому, необходимо предупреждать (только с доступом в инет) .. »
"Будтье добры обновить программу и разрешить ей выход в сеть"




© OSzone.net 2001-2012