Что нового

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

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 164
Репутация
2 329
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 164
Репутация
2 329
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 319
CreatoR
Может быть, патч сделать самоудаляющимся?
"Мавр сделал свое дело, мавр может уходить..."
 

SECTOR

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

FlatX007

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

CreatoR

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

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

Fever

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

CreatoR

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

Arei

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

Medic84

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

Arei

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

Medic84

Омега
Команда форума
Администратор
Сообщения
1 527
Репутация
325
Ну во первых это всего лишь концепция. Во вторых создать систему которую невозможно взломать - невозможно. В третьих, все что можно сделать с данным кодом тут написано :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
Репутация
81
mishatre

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

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

ynbIpb

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

Исследовал я на днях одну программку на 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 и программа его сжирает.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 164
Репутация
2 329

Gorenich

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