zoukankan      html  css  js  c++  java
  • [Delphi源码] 防止DEDE反编译的DELPHI程序

    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

  • 相关阅读:
    LeetCode5654. 盒子中小球的最大数量
    LeetCode40. 组合总和 II
    LeetCode39. 组合总和
    LeetCode17. 电话号码的字母组合
    Leetcode216. 组合总和 III
    eclipse相关使用
    matlab符号的含义
    matlab矩阵相关的笔记
    vi编辑器
    Linux 环境变量
  • 原文地址:https://www.cnblogs.com/chulia20002001/p/2471214.html
Copyright © 2011-2022 走看看