防止用DeDe软件反编译delphi程序

Delphi教程 2025-08-20

防止用DeDe软件反编译delphi程序

这里有一篇防止用DeDe软件反编译delphi程序~

用『』里的是我的注释,其余的是原创作~

PRogram Project1;

Uses

 Forms,

 windows,

 sysutils,

 Unit1 In 'Unit1.pas' {Form1},

 Unit2 In 'Unit2.pas' {Form2};

Function RegisterServiceProcess(dwProcessId, dwType: dWord): Integer; Stdcall;

 External 'kernel32.dll'

{$R *.RES}

Var

 HMUTEX: HWND;

 RET: INTEGER;

 hCurrentWindow: HWnd; //反编译要的

 szText: Array[0..254] Of char; //反编译要的

Begin

 application.Initialize;

 APPLICATION.TITLE := 'delphi葵花宝典 设计:张国鹏';

 RegisterServiceProcess(GetCurrentProcessID, 1); //让程序在Ctl+Alt+Del中消失.

『我们可以看到作者用RegisterServiceProcess把程序注册成了WINDOWS服务程序~』

『但大家都知道这个函数包含在kernel32里,而且只在98/ME中管用~』

『所以并不要把这项作为反编译的关键,可以说可有可无~』

 //防止反编译开始

 hCurrentWindow := GetWindow(APPLICATION.Handle, GW_HWNDFIRST);

『由上面知道作者想知道自己的程序窗口是不是最顶级的窗口』

 While hCurrentWindow <  > 0 Do

 Begin

 If GetWindowText(hCurrentWindow, @szText, 255)  > 0 Then

   If pos('DeDe', StrPas(@szText)) <  > 0 Then

『如果不是,则获取现在顶机窗体的标题,在做判断是不是"DeDe"』

   Begin

     APPLICATION.MESSAGEBOX('想反编译我?没那么容易!',

       '哈哈......你这家伙!', mb_ok);

     //closewindow(hCurrentWindow);//使该程序窗口最小化

     enablewindow(hCurrentWindow, false);

     //使该程序的窗口不能被激活 如果能获取该程序的线程ID号,则可以使该程序又不能使用,又不能关闭,酷吧?

『以上这两句是对DEDE的处理~』

『closewindow:为把制定的窗口最小化,但窗口不会从内存中清除~』

『enablewindow:指定的窗口里允许/禁止所鼠标和键盘的输入,false肯定是不能了~』

     halt;

   End;

 hCurrentWindow := GetWindow(hCurrentWindow, GW_HWNDNEXT);

 End;

 //防止反编译结束

 //防止程序的二次运行

 HMUTEX := CREATEMUTEX(Nil, FALSE, 'delphi葵花宝典 设计:张国鹏');

 RET := GETLASTERROR;

 If RET <  > ERROR_ALREADY_EXISTS Then

 Begin

 Application.CreateForm(TForm1, Form1);

 // Application.CreateForm(TForm2, Form2);

 Application.Run;

 End

 Else

 APPLICATION.MESSAGEBOX('程序已经运行!', '提示', mb_ok);

 releasemutex(hmutex);

End.