Мне нужна простенькая защита, генерировать и проверять серийный номер пользователя программы (уникальный для каждого ПК). Я так понимаю, что нужно брать ID оборудования и плясать оттуда, только что дальше делать, как обычно генерируют серийники? Спасибо.
Его вроде как подменить можно. Меня в общем-то интересует алгоритм. Получаю я ID процессора или винчестера, какие махинации обычно проводятся над ними чтобы потом получить исходную строку по которой генерировать серийный номе(как?) и потом проверять его обратным способом в программе.
да хоть какие, на что способна твоя фантазия, для примера, заполнил ты массив байтов инфой о железках, их номерах или какой иной инфой, (версией системы, номером сборки, используемой локали и т.д.), вычислил хэш, например, sha256 для данного набора, ну и взял 3, 5, 6,7,12-15,17... , байты получившегося хэша, для серийника, а для ключа 2,4,6,8,10,11-15 байт тройного sha256 хэша серийника. Это самое простое, что можно придумать, если нет желания загоняться особо о защите и привязке
Окей, понял, только не догнал этот момент. Что тут имеется в виду под ключом, если мы серийник генерируем и так?
Имелось ввиду схема: уникальный серийный номер, вычисленный программой, тот, что пользователь сообщит тебе и ключ (код активации) тот, что сгенерируешь ты и скажешь пользователю, чтобы он смог её активировать. Иначе, если ты собираешься обходиться одним серийном, тебе нужно придумать способ передачи тех данных о ПК, на основе которых ты будешь генерировать номер
1) Генеришь открытый и закрытый ключ RSA. На WinAPI без проблем 2) В прогу прошиваешь открытый ключ 3) В проге генеришь какое-либо число, зависимое от компа. Желательно как можно больше методов объединить. На выбор - метка тома системного диска - имя проца - серийник винды - дата установки винды. по факту время создания папки windows - на крайняк дата установки программы. - версии системный библиотек В общем большой простор для выбора 4) Далее полученное число и есть идентификатор компа. Желательно его сохранить еще в реестре в шифрованном виде. 5) И вот юзер сообщает полученное число + свой идентификатор, вы юзер + хеш(идентификатор) подписываете ключем и отсылаете в виде этих данных + подпись 6) прога проверяет валидность цифровой подписи зная открытый ключ и идентификатор. Если вдруг утечет ключ (через подделку идентификаторов) то вы всегда знаете кто это сделал, потому что всегда в ключе содержится имя юзера // пля, многие напиваясь звонят бывшим, а тут пробило на форум
slesh, чем это принципиально отличается от проверки зашитого в бинарник серийника? Вся суть взлома сводится к простому патчу в месте проверки. Ну да, придётся ещё открытый ключ затереть, чтобы обезличить сборку. Как по мне, лучше обойтись обычным xor'ом и сосредоточиться на функциональности программы. А тот, кто не хотел платить за софт, и так не станет его покупать.
Ну вам не угодишь. Другой пример 1) Весь очень важный функционал оформлен в виде DLL. Можно даже не чисто dll а выдранный из неё код. 2) Этой DLL нет в комплекте 3) При указании серийника высылается пользователю файл dll шифрованный с использованием ID компа 4) Далее эта dll грузится напрямую из памяти. В идеале не dll а шелкод большой Патч программы ничего не даст, потому что функционал в DLL DLL для каждого пользователя своя. Внутри DLL свой функционал проверки. Пропатчить на лету расшифровываемую DLL это уже сложнее. Можно конечно пропатчить программу чтобы грузили сразу распакованную DLL и отключить проверку в DLL. Но это уже слишком много работы и требует спец лоадера. А вообще как сказал ктото из известных: Если программа запускается, то её можно взломать.
А если мне нужно в линупс сконпилить? Никаких персональных претензий, просто смешно становится, когда в софте функционала на 100 строк, а там нужно дополнительную dll качать, бред какой-то. Если уж очень хочется защиты, то лучше вынести исполнение части кода на сервер, либо воспользоваться рефлексией, и функцилнальные куски кода также дёргать с сервера.
Если функционала на 100 строк, то этот функционал не требует защиты в виду того что он очень примитивный и любой дебагер справится с этим. В линуксе есть so файлы. И там всё также по факту. Конечно можно некоторые сугубо вычислительные функции реализовать на сервере. Вот только нагрузка и поддержка - не стоят того.