Что нового

AppTrial Module - *Концепция* создания оценочной версий вашего продукта

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
AutoIt: 3.3.6.1
Версия: 1.1

Категория: Система / Реестр, Разное

Описание: Данный модуль демонстрирует концепцию создания пробной/оценочной (триальной) версий вашего продукта.
Примечание: Это всего лишь концепция, конкретно данную версию не следует применять в ваших скриптах. Используйте её как пример и составьте свой алгоритм защиты.

Пример:
Код:
#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
_AppTrialSetModule()

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.zip (страница в ф.архиве)

История версий:
v1.1
* Переименование функций.
+ Улучшенная обработка.
+ Добавлен патч.

v1.0
Первый релиз.

Источник: AppTrial Module, A concept idea for trial software
Автор(ы): G.Sandler (CreatoR)
 

Fever

Скриптер
Сообщения
308
Репутация
112
работает ваша программка на "ура", но я так и не как дать другому человеку ключ к программе... :blink:

понимаю что туплю, но всеровно ступор... :wacko:
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Fever [?]
как дать другому человеку ключ к программе
Хороший вопрос, даёте ему патч:

Код:
$sProductKey = _AppTrial_Generate_ProductKey()

InputBox("_AppTrial_Generate_ProductKey", "Unique <Product Key> for this PC:", $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


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

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
CreatoR
Может быть, патч сделать самоудаляющимся?
"Мавр сделал свое дело, мавр может уходить..."
 

SECTOR

Продвинутый
Сообщения
399
Репутация
59
Мне кажется что лучше будет если ключом будет зашифрованая информация о компе, но если информация не совпадает то ключ удаляется
 

FlatX007

Tattoo!
Сообщения
197
Репутация
35
madmasles сказал(а):
CreatoR
Может быть, патч сделать самоудаляющимся?
"Мавр сделал свое дело, мавр может уходить..."

А если его запустить из RAR архива =)
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
madmasles [?]
Может быть, патч сделать самоудаляющимся?
Это ничего не решает, патч всегда можно будет перезакачать ;)

SECTOR [?]
лучше будет если ключом будет зашифрованая информация о компе, но если информация не совпадает то ключ удаляется
Ну если информация не совпадает то ключ просто не сработает, это уже и так предусмотрено.
 

Fever

Скриптер
Сообщения
308
Репутация
112
даже если скачать самоудаляющийся патч ещё раз не получится, его всегда можна будет дублировать перед запуском, а не лучше ли сделать ключ не через инфе о компе, а присваивая каждой программе рендомное id и в результате некоторых логический вычислений выводить ключ?
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Fever [?]
не лучше ли сделать ключ не через инфе о компе, а присваивая каждой программе рендомное id и в результате некоторых логический вычислений выводить ключ?
Как ты себе это представляешь? мне как автору программы теперь нужно оценочную версию выдавать каждому лично? :smile:
 

Arei

Скриптер
Сообщения
938
Репутация
115
Скажите, а если я отправил файл другу как мне можно отправить ему ключ, не отправляя патч.Заранее спасибо.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Никак. Потому что патч считывает железо машины на которой запускается патч точно так же как это делает программа.
 

Arei

Скриптер
Сообщения
938
Репутация
115
а что можно сделать тогда на подобии выше указанного кода.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Ну во первых это всего лишь концепция. Во вторых создать систему которую невозможно взломать - невозможно. В третьих, все что можно сделать с данным кодом тут написано :smile: Все остальное полет вашей мысли.
 

Arei

Скриптер
Сообщения
938
Репутация
115
Понятно спасибо а можно спросить что бы программе выдавался индивидуальный id и что если человек прислал его то можно было ему выдать ключ подходящий под этот id ,такое можно сделать.
 

Fever

Скриптер
Сообщения
308
Репутация
112
писал об этом выше

Код:
#Include <String.au3>

Global $ID, $Code, $Pass

For $i = 1 To 9
	$ID &= Random(0,9,1)
	If $i <= 3 Then $Pass &= Random(1,3,1)
Next

MsgBox(0, '', $ID)
MsgBox(0, '', $Pass)

$Code = _StringEncrypt(1, $ID, $Pass, 1)

MsgBox(0, '', $ID & @CRLF & $Pass & @CRLF & $Code)


ИД и пасс писать гдето в реестре, но всегда можна будет сменить ИД вместе с пассом, если известна подборка к нему
 

mishatre

Новичок
Сообщения
1
Репутация
1
А если один раз с генерировать код, перевести в md5 и отправить на сервер. И переделать программу генерации пароля чтобы она при первом запуске генерировала код допустим в директорию windows и запускала прогу токо если этот файл на месте и информация в нем совпадает с той что в скрипте.
 

Guezt

Продвинутый
Сообщения
335
Репутация
82
mishatre

не все могут позволить себе сервер 24\7 онлайн :smile:
OffTopic:
Как вариант можно сгенерировать ID при первом запуске программы а в саму программу добавить алгоритм криптования, далее вам высылается этот сгенерированый ID вы его прогоняете по тому же Алгоритму что в самом скрипте и создается ключ который можно поместить в файл, который так же можно зашифровать что бы не было видно что в нем, далее высылаем файл как лицензию или как ключ регистрации, программа при запуске проверяет наличие файла находит его дешефрует его, считывает данные и сравнивает совпадает или нет то что сгенерирует программа по присвоенному ID и тому что выслали вы.

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

ynbIpb

Скриптер
Сообщения
399
Репутация
110
По поводу всяких концепций (как НЕ надо делать):

Исследовал я на днях одну программку на AutoIt буржуйского афтора. Реализация защиты была такая: Он читал МАК адрес сетевой карты, пропускал через хитрую функцию с неким алгоритмом, приводя его в нечто: 1235D012E6D6FF40CBF502430DBF9F33EE839A66EC57FB6A этот набор символов был Hardware ID. Далее афтор выдавал на его основе ключ, который тоже является маком сетевухи, пропущенным через хитрую функцию, но видимо с другим аргументом. При запуске программа ломилась на просторы интернета и скачивала хитрый файлик, который из себя представлял ini следующей конструкции:
Код:
[version]
v=1.06
[hardware_id]
n=30
hardware_id=registration_key
Где n= сколько дней осталось для этой лицензии. (вобщем в этом ini он хранил все лицензии, которые когда либо выдавал)
Программа читала секцию со своим HwId и пропускала регистрационный ключ через туже хитрую функцию в обратную сторону, результат сравнивался с текущим МАК адресом и на основе этого принималось решение, валидная лицензия или нет. Сложность обхода подобной защиты заключается в том, что даже если вы знаете алгорим и можете сгенерировать свой ключ, программа его не примет, так как его нет на сервере.

Обход защиты: обойти такую защиту можно было и модифицировав код, но получилось проще. На этой же машине поднимается http сервер (например smallsrv.com), и и все запросы программы за лицензиями заворачиваются на него через HOSTS файл. Имея функцию, формируем свою пару id=key (на деле ещё проще id сам являлся ключём) и подсовываем свой хитрый ini и программа его сжирает.
 

Gorenich

ГорыНыЧ
Сообщения
38
Репутация
0
На Windows 7 всегда выдает что срок действия лицензии окончен, что этот скриптик только на ХР работает?
 
Верх