Можно найти, что решение в SQL Определяемая пользователем Функция Анализирует Разграниченную Строку полезный (от Проект Кода).
можно использовать эту простую логику:
Declare @products varchar(200) = '1|20|3|343|44|6|8765'
Declare @individual varchar(20) = null
WHILE LEN(@products) > 0
BEGIN
IF PATINDEX('%|%', @products) > 0
BEGIN
SET @individual = SUBSTRING(@products,
0,
PATINDEX('%|%', @products))
SELECT @individual
SET @products = SUBSTRING(@products,
LEN(@individual + '|') + 1,
LEN(@products))
END
ELSE
BEGIN
SET @individual = @products
SET @products = NULL
SELECT @individual
END
END
Чтобы немного усложнить избежание истечения срока действия, вы можете сохранить время последнего выполнения где-нибудь «скрытым» и убедиться, что пользователь не может вернуться назад во времени. Любой приличный "хакер" обойдет это, но для обычного пользователя Джо это будет слишком хлопотно.
Работа с неправильной датой имеет некоторые плохие побочные эффекты при использовании других программ, которые полагаются на правильную дату / время . Поэтому, когда пользователь достаточно отчаянно пытается изменить свою дату / время каждый раз, когда он запускает ваше программное обеспечение, он все равно не будет покупать его ...
Дальнейшее улучшение механизма истечения срока действия на данном этапе похоже на защиту от копирования для игр. Хорошие игры все равно продаются, а плохие - нет.
вы можете попробовать сохранить (внутри кода, а не в файле) дату истечения срока действия md5summed, это может добавить некоторую «защиту» от дизассемблеров. Скройте код проверки даты внутри какой-либо другой критической функции, не пишите для этого специальную функцию. Вы также можете редактировать exe-файл по истечении срока его действия, чтобы избежать уловки с «изменением даты».
Все, что вы делаете, будет взломано, поэтому вам лучше сосредоточиться на своем программном обеспечении, а не на защите. Будь проще. Если люди полны решимости обойти вашу защиту, они это сделают. Они могут даже виртуализировать его, так что дневные пробные версии на самом деле не являются ограничением, которое можно применить.
В этом случае вы можете внести некоторые изменения в систему по истечении срока действия приложения. Другими словами, чтобы приложение работало, должна быть указана системная дата, а не системные изменения.
Вы можете добавить запись в реестр, когда срок ее действия истечет. или может быть удалением файла.
И это предыдущее обсуждение, начатое мной при рассмотрении аналогичной проблемы. Возможно, это будет полезно ..
Вы можете сохранить первую и последнюю дату выполнения в файле, а также сохранить ее контрольную сумму. Как сказал @Timbo, любой достойный хакер обойдет это (как и практически любой другой метод).
Таким образом, вы можете сохранить что-то подобное в файле где угодно (возможно, в реестре)
20090801:20090815:20090901
ca5579e3bacb7557b6ed22b5f553f9d5
, будучи:
20090801 - the start date
20090815 - the last execution date
20090901 - the final date
ca5579e3bacb7557b6ed22b5f553f9d5 - the salted MD5 checksum
таким образом вы можете проверить правильность контрольной суммы с помощью такого алгоритма
bool CheckExpiry()
{
string SecretSalt = "Y*##d3F!@g^hk";
string InitialDate = FetchInitialDate();
string LastExecutionDate = FetchLastExecutionDate();
string FinalDate = FetchFinalDate();
int Checksum = FetchChecksum();
string FinalString = InitialDate + ":" + SecretSalt + ":" + LastExecutionDate + ":" + FinalDate;
int InternalCheckSum = md5sum( FinalString );
return InternalCheckSum == CheckSum;
}
, конечно, вы можете использовать SHA-1 или любой другой алгоритм дайджеста, который вам больше нравится. Просто убедитесь, что вы используете нелегко угадываемый SecretSalt
.
И вы можете сравнить LastExecutionDate
с текущей датой, чтобы проверить, была ли дата изменена в обратном порядке.