http://www.vihome.com.cn/bbs/forum.php?mod=viewthread&tid=23731
防止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.
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hsmserver/archive/2006/09/21/1261484.aspx
反编译(Decompilers)
http://www.pediy.com/tools/Decompilers.htm
|
请发表评论