Защитите файл DLL с помощью файла лицензии [закрыто]

При правильной комбинации $ lookup, $ project и $ match вы можете присоединиться к нескольким таблицам по нескольким параметрам. Это связано с тем, что они могут быть связаны несколько раз.

Предположим, что мы хотим сделать следующее ( reference )

SELECT S.* FROM LeftTable S
LEFT JOIN RightTable R ON S.ID =R.ID AND S.MID =R.MID WHERE R.TIM >0 AND 
S.MOB IS NOT NULL

Шаг 1: Свяжите все таблицы

, вы можете $ lookup сколько угодно таблиц.

$ lookup - по одному для каждой таблицы в запросе

$ unwind - поскольку данные денормализированы правильно, иначе они завернуты в массивы

Python code ..

db.LeftTable.aggregate([
                        # connect all tables

                        {"$lookup": {
                          "from": "RightTable",
                          "localField": "ID",
                          "foreignField": "ID",
                          "as": "R"
                        }},
                        {"$unwind": "R"}

                        ])

Шаг 2: Определите все условные выражения

$ project: определите здесь все условные операторы и все переменные, которые вы хотите выбрать.

Python Code ..

db.LeftTable.aggregate([
                        # connect all tables

                        {"$lookup": {
                          "from": "RightTable",
                          "localField": "ID",
                          "foreignField": "ID",
                          "as": "R"
                        }},
                        {"$unwind": "R"},

                        # define conditionals + variables

                        {"$project": {
                          "midEq": {"$eq": ["$MID", "$R.MID"]},
                          "ID": 1, "MOB": 1, "MID": 1
                        }}
                        ])

Шаг 3: Присоедините все условные обозначения

$ match - присоедините все условия, используя OR или AND и т. д. Их могут быть кратные ,

$ project: undefine all conditionals

Python Code ..

db.LeftTable.aggregate([
                        # connect all tables

                        {"$lookup": {
                          "from": "RightTable",
                          "localField": "ID",
                          "foreignField": "ID",
                          "as": "R"
                        }},
                        {"$unwind": "$R"},

                        # define conditionals + variables

                        {"$project": {
                          "midEq": {"$eq": ["$MID", "$R.MID"]},
                          "ID": 1, "MOB": 1, "MID": 1
                        }},

                        # join all conditionals

                        {"$match": {
                          "$and": [
                            {"R.TIM": {"$gt": 0}}, 
                            {"MOB": {"$exists": True}},
                            {"midEq": {"$eq": True}}
                        ]}},

                        # undefine conditionals

                        {"$project": {
                          "midEq": 0
                        }}

                        ])

Практически любая комбинация таблиц, условных обозначений и объединений может быть выполнена таким образом ,

14
задан Peter Mortensen 24 February 2013 в 10:14
поделиться

3 ответа

Несколько вещей Вы могли бы хотеть рассмотреть:

Контрольная сумма DLL. Используя криптографическая хеш-функция , можно сохранить эту внутреннюю часть файл лицензии или в DLL. Это предоставляет метод проверки решительному, если мой исходный файл DLL оригинален, или если это - файл лицензии для этого DLL. Несколько простых методов свопинга байта могут быстро взять Вашу хеш-функцию в глуши (и таким образом не легкие воспроизвести).

не хранят Вас хеш как строка, разделяют его на короткие целые без знака в различных местах.

, Поскольку Larry сказал, MAC-адрес довольно распространен. Существует много примеров того, как получить это на Проект Кода, но знать, что легко фальсифицировать в эти дни.

Мое предложение, должно быть использование частный/общедоступный ключи для поколения лицензии.

Короче говоря, режимы нападения будут двоичными (измените инструкции своего файла DLL), так защитите от этого или генерации ключей, так сделайте каждого пользователя лицензии, машину, и даже установку конкретными.

5
ответ дан Peter Mortensen 24 February 2013 в 10:14
поделиться
  • 1
    @user1876508 Вы попытались использовать str(b'hello', encoding)? Это могло бы работать с ' base-64' как Ваше кодирование. – Rob Watts 30 July 2013 в 22:24

Можно проверить на лицензию в DllMain () и умереть, если это не найдено.

4
ответ дан Cody Brocious 24 February 2013 в 10:14
поделиться

Это также зависит от того, как Ваш алгоритм лицензии работает. Я предложил бы, чтобы Вы изучили использование чего-то как Diffie†“обмен ключа Hellman (или даже RSA) для генерации своего рода общественности/закрытого ключа, которая может быть передана пользователям, на основе некоторой информации.

(В зависимости от приложения, я знаю об одном случае, где я записал код лицензии контракта для компании, они использовали MAC-адрес и некоторые другие данные, хешировали его и зашифровали хеш, дав им "значение ключа", если регистрационный номер был корректен). Это гарантирует, что файл ключей не может быть перемещен, (или дан) к другой машине, таким образом 'крадя' программное обеспечение.

, Если Вы хотите вырыть глубже и избежать хакеров, это - целое 'nother тема....

2
ответ дан Peter Mortensen 24 February 2013 в 10:14
поделиться
Другие вопросы по тегам:

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