会员: 密码:  免费注册 | 忘记密码 | 会员登录 网页功能: 加入收藏 设为首页 网站搜索  
 安全技术技术文档
  · 安全配制
  · 工具介绍
  · 黑客教学
  · 防火墙
  · 漏洞分析
  · 破解专题
  · 黑客编程
  · 入侵检测
 安全技术论坛
  · 安全配制
  · 工具介绍
  · 防火墙
  · 黑客入侵
  · 漏洞检测
  · 破解方法
  · 杀毒专区
 安全技术工具下载
  · 扫描工具
  · 攻击程序
  · 后门木马
  · 拒绝服务
  · 口令破解
  · 代理程序
  · 防火墙
  · 加密解密
  · 入侵检测
  · 攻防演示
技术文档 > Delphi
防止用DeDe软件反编译delphi程序
发表日期:2003-07-23 00:00:00作者:D 出处:  

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

『谈谈我的看法,这种方法也许是一种简单的防止反编译的做法,但由于过于简单了,』

『到现在就不是很有用了,也许可以对付一些初学的朋友,我们可以看到查找窗口的名』

『字为"DEDE"也就是说它只是一个字符串,在程序中没有很重要的地位,也就是不耽误』

『程序的运行,我们可以借助一些软件把程序中所有的"DEDE"改为别的字符,呵呵,这』

『程序可是没有逻辑思维的,改后可就对"DEDE"没有办法了^_^~~~~~~』

返回顶部】 【打印本页】 【关闭窗口

关于我们 / 给我留言 / 版权举报 / 意见建议 / 网站编程QQ群   
Copyright ©2003- 2024 Lihuasoft.net webmaster(at)lihuasoft.net 加载时间 0.00148