网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Delphi
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.delphi中将UCS2编码的字符串转化.
.关于DBGrid的分类颜色显示.
.TreeView的使用.
.远程控制篇:服务端程序的隐藏.
.钩子(HOOK)机制的使用.
.Delphi程序设计之--惯用法.
.偶的第二个Delphi程序.
.如何让程序出现windows标准对话框.
.用Delphi编写VxD设备驱动程序.
.讲述如何开发一个控件,很有价值(.
.在Delphi里播放Flash.
.DELPHI的原子世界(2).
.Delphi中串行通信的实现.
.取得图片的透明区域.
.根据数据库表中记录自动构造一棵.
.Linux的开发利器,Kylix.
.对使用Delphi制作DLL复用文件的建.
.用DLL方式封装MDI子窗体.
.将多个jpg文件以追加形式合并成一.
.改造HINT的输出方式.

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

发表日期:2006-2-4


 

防止用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.

上一篇:设置全局快捷键 人气:5121
下一篇:利用Delphi编写Socket通信程序 人气:4531
浏览全部Delphi的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐