Шифрование исполняемого файлаDelphi , Синтаксис , Шифрование
Автор: DDA { **** UBPFD *********** by delphibase.endimus.com **** >> В данном примере реализована процедура шифрования и расшифрования одной только процедуры "вывода сообщения".Процедура изночально не зашифровано ,что ни есть хорошо.Для того что бы процедура была при запуске программы уже зашифрована надо написать внешнюю программку, которая ба сканировала ехе-шник и находила определенные метки (начальную и конечную) и шифровала бы всё между ними.Таким образом вы получите готовый ехе-шник с уже зашифрованой(зашифроваными)процедурой. Для того чтоб некоторым умным людям (crackers)жить было не легко, после расшифровки и выполнения процедуры можно её опять зашифровать. Более потробную информацию читайте в статье на «Королевства Delphi» http://delphi.vitpc.com/mastering/safe/safe.htm Там же читайте Открытый проект "Анти крэковые мучения" http://delphi.vitpc.com/mastering/safe/index.htm Зависимости: Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls; Автор: DDA, Vologda Copyright: «Королевства Delphi» Защита от несанкционированного использования программ, написанных на Delphi Дата: 3 марта 2004 г. ***************************************************** } unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure metka1; //Начальная метка - нужна что бы находить потом в exe файле эти символы и знать //откуда начинать шифровать //Здесь метка представляет из себя десятичные числа от 0 до 256 через запятые //Если метка 50,60,70,80,90 то это соответствует символам 2<FPZ //Кстати, такого кол-во символов в метке может быть мало и лучше использовать больше //Т.к если программа большая то такие последовательности могут встретиться не один раз begin asm DB 50,60,70,80,90 //2<FPZ это метка начальная end; end; procedure TForm1.Button1Click(Sender: TObject); begin beep; ShowMessage('Период использования программы истёк!'); end; procedure metka2; //Конечная метка - нужна чтобы знать до куда нужно шифровать в файле и //докуда расшифровывать в памяти begin asm DB 68,68,67,45,61 //DDA-= это метка конечная end; end; procedure TForm1.Button2Click(Sender: TObject); //Процедура Расшифрования(В даном примере и зашифрования) var ptrAddr: Pointer; {для Адреса процедуры вывода сообщения} dwOldProtect: DWORD; begin ptrAddr := @TForm1.Button1Click; //Получаем адрес процедуры вывода сообщения VirtualProtect(@TForm1.Button1Click, 2048, PAGE_READWRITE, @dwOldProtect); //2048 это размер в байтах с которыми можно работать(по моему) //Если процедура большая то нужно подбирать соответствующий размер while ptrAddr <> @metka2 do //шифрование(слабое) выполняем пока не дойдем то конечной метки begin Byte(ptrAddr^) := Byte(ptrAddr^) xor $41; //каждый байт в памяти ксорится с кодом 65'A'(к примеру) //Используйте более надёжные алгоритмы шифрования inc(Integer(ptrAddr)); end; exit; //нужно так сделать что б компилятор включил эти процедуры metka1; //в код,т.к Delphi не вставляет в результирующий код процедуры, metka2; //которые никогда не используются end; //Такое шифрование взято для примера и не рекомендуется для использования серьёзной защиты //Также рекомендуется использовать и проверочную контрольную сумму для проверки //целостности кода программы. //Теперь осталось только сделать отдельную программу которая искала бы //в этом exe файле начальную и конечную метки и шифровало бы всё между ними //Но для демонстрации можно посмотреть результат и сейчас //Запустите программу и нажмите на кнопку 1 -Должно вывестись сообщение и звук.сигнал //А если нажать на кнопку 2 - то прцедура нажатия на кнопку 1 зашифруется //И если после этого нажать на кнопку 1 -то должно произойти что-то не предсказуемое //т.к процедура зашифрованна и что-то нормального вы не увидите. //Источник информации: CopyRight «Королевства Delphi» //"Защита от несанкционированного использования программ, написанных на Delphi" end. Пример кода на языке Delphi, демонстрирующий простую механизм шифрования и дешифрования для исполняемого файла. Код включает в себя два процедура: Главная форма имеет два кнопки: Button1 и Button2. При клике на Button1 отображается сообщение с предупреждением и звучит сигнал тревоги. При клике на Button2 шифрует процедуру Разбивка кода:
Автор кода отмечает, что это очень простой и не безопасный механизм шифрования и рекомендует использовать более robust алгоритмы и техники для реальных приложений. Кроме того, они советуют создать отдельное программное обеспечение, которое сканирует исполняемый файл в поисках маркеров начала и конца и шифрует/дешифрует соответствующие регионы. В целом, это пример кода демонстрирует простой способ реализации базового шифрования и дешифрования в Delphi, но не рекомендуется использовать его как основу для разработки безопасных приложений. Шифрование исполняемого файла: пример реализации процедуры шифрования и расшифрования одной только процедуры 'вывода сообщения'. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Шифрование ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |