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

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

防止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"没有办法了^_^~~~~~~』

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值