| 查看: 319 | 回复: 0 | |||
| 当前主题已经存档。 | |||
sdlj8051金虫 (著名写手)
|
[交流]
[转贴]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的事件列表是“空”的! 注意:与方法一结合起来,会更有效地阻止他人取得事件入口点。方法一自己去试吧,就不贴代码了。 [ Last edited by sdlj8051 on 2006-10-6 at 12:33 ] |
» 猜你喜欢
基金申报
已经有5人回复
基金委咋了?2026年的指南还没有出来?
已经有7人回复
国自然申请面上模板最新2026版出了吗?
已经有17人回复
纳米粒子粒径的测量
已经有8人回复
疑惑?
已经有5人回复
计算机、0854电子信息(085401-058412)调剂
已经有5人回复
Materials Today Chemistry审稿周期
已经有5人回复
溴的反应液脱色
已经有7人回复
推荐一本书
已经有12人回复
常年博士招收(双一流,工科)
已经有4人回复











回复此楼