Как заставить программное обеспечение истечь в определенную дату в Windows? [закрытый]

Можно найти, что решение в 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

5
задан Paul 31 July 2009 в 10:29
поделиться

5 ответов

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

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

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

8
ответ дан 18 December 2019 в 05:55
поделиться

вы можете попробовать сохранить (внутри кода, а не в файле) дату истечения срока действия md5summed, это может добавить некоторую «защиту» от дизассемблеров. Скройте код проверки даты внутри какой-либо другой критической функции, не пишите для этого специальную функцию. Вы также можете редактировать exe-файл по истечении срока его действия, чтобы избежать уловки с «изменением даты».

2
ответ дан 18 December 2019 в 05:55
поделиться

Все, что вы делаете, будет взломано, поэтому вам лучше сосредоточиться на своем программном обеспечении, а не на защите. Будь проще. Если люди полны решимости обойти вашу защиту, они это сделают. Они могут даже виртуализировать его, так что дневные пробные версии на самом деле не являются ограничением, которое можно применить.

9
ответ дан 18 December 2019 в 05:55
поделиться

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

Вы можете добавить запись в реестр, когда срок ее действия истечет. или может быть удалением файла.

И это предыдущее обсуждение, начатое мной при рассмотрении аналогичной проблемы. Возможно, это будет полезно ..

Лицензирование

2
ответ дан 18 December 2019 в 05:55
поделиться

Вы можете сохранить первую и последнюю дату выполнения в файле, а также сохранить ее контрольную сумму. Как сказал @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 с текущей датой, чтобы проверить, была ли дата изменена в обратном порядке.

7
ответ дан 18 December 2019 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: