ANTI-DEDE的幾個方法

來源:互聯網
上載者:User

 http://www.cnsw.org/bbs/thread-3547-1-1.html

ANTI-DEDE的幾個方法ANTI-DEDE的幾個方法
DEDE對於DELPHI程式的威脅是很大的,怎樣ANTI-DEDE呢?

方法一:在FORM上使用一個FRAME,防止通過DEDE的DFM EDITOR直接跳到函數或過程裡。

  目前DEDE並不能很好地支援FRAME,所以加上一個FRAME,他就無法產生FORM的圖形介面,現在可以利用DEDE的這個缺陷。

  類似的缺陷,如果感興趣可以自己找,比如:
  在FORM裡的某個控制項裡使用中文字,好像有的DEDE就無法正常顯示這個FORM,諸如此類。

方法二:隱藏你的過程或函數:
  有些人在分析DELPHI寫的程式時,有時會發現在反編譯後FORM的事件列表裡竟然是空的,這是怎麼實現的呢?

  DEDE使用DELPHI的RTTL原理,所以可以輕易地列出所有PUBLISHED下面的函數及過程名--注意是過程名,所以通過DEDE可以輕鬆地找到函數或過程的入口。

  如果你真的想阻止DEDE簡單準確地跳到函數或過程裡,可以嘗試下面的方法:
  不要用DELPHI自動建置事件,或者是最後自己手工刪除在屬性框裡對這些事件引用,改為動態建置事件。
     但 注意:這比較累,要寫些動態代碼。是不是要真的這樣做,你自己考慮好。
  把PRIVATE上面的函數或過程移動到PRIVATE裡面定義。

  這樣作的好處是:
   DEDE無法直接列出實名的過程或函數;但某些版本仍可以列出全部隨機命名的事件,但這時DEDE可以提供的協助就有限了;
   由於事件是動態產生,所以想通過尋找FORM裡的類似OnClick事件就找到入口地址的努力化為泡影,或者說增加了難度。
   如果你的一個FORM都是利用上面的方法產生的--比如連FORMCREATE你都自訂,那DEDE在顯示事件欄裡會顯示空。

   缺點:
     手工多;必須刪除屬性框裡產生的事件代碼,比較累,偶爾玩玩還可以。

簡單的例子:
//=========================================================
unit Unit1;  
interface   
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
  private
    { Private declarations }
    //!!!
    procedure yourFormCreate;
    procedure yourFormClose(Sender: TObject; var Action: TCloseAction);
    procedure yourFormDestroy(Sender: TObject);

    procedure yourButton1Click(Sender: TObject);

  public
    { Public declarations }

    constructor Create(AOwner: TComponent); override;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

constructor TForm1.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);

  yourFormCreate;

end;

procedure TForm1.yourFormCreate;
begin      
//!!!!!!!
    OnClose                         := yourFormClose;
    OnDestroy                       := yourFormDestroy;
    Button1.OnClick                 := yourButton1Click;

end;

procedure TForm1.yourFormClose(Sender: TObject; var Action: TCloseAction);
begin
  showmessage('yourFormClose');
  close;
end;

procedure TForm1.yourFormDestroy(Sender: TObject);
begin
  showmessage('yourFormDestroy');
end;
procedure TForm1.yourButton1Click(Sender: TObject);
begin
  showmessage('yourButton1Click');
end;

end.
//=========================================================

以上是我試出來的,歡迎大家抨擊不當之處,謝謝!

建立工程,只添加一個Button1,大家把以上代碼複製到UNIT1.pas裡,接著就編譯,然後用DEDE載入,看看可以看到什嗎??呵呵,在DEDE裡查看FORM1的事件列表是“空”的!

  注意:與方法一結合起來,會更有效地阻止他人取得事件進入點。方法一自己去試吧,就不貼代碼了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.