Шифрование исполняемого файла
01.01.2007
{ **** UBPFD *********** by kladovka.net.ru **** >> Шифрование исполняемого файла В данном примере реализована процедура шифрования и расшифрования одной только процедуры "вывода сообщения".Процедура изночально не зашифровано, что ни есть хорошо.Для того что бы процедура была при запуске программы уже зашифрована надо написать внешнюю программку,которая ба сканировала ехе-шник и находила определенные метки(начальную и конечную)и шифровала бы всё между ними.Таким образом вы получите готовый ехе-шник с уже зашифрованой(зашифроваными)процедурой. Для того чтоб некоторым умным людям (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.