首页
社区
课程
招聘
怎么才能让dede认不出procedure?
发表于: 2004-11-29 16:04 4913

怎么才能让dede认不出procedure?

2004-11-29 16:04
4913
用delphi写一个procedure,把它放在Type里,怎么样才能让dede认不出来?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (14)
雪    币: 271
活跃值: (90)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
抱歉,说反了,呵呵
把函数或过程移动到PRIVATE 部分,不要在PUBLISHED里保留太多的关键函数或过程!

-这样作的结果是DEDE无法正确识别函数或过程名,但并不是可以绝对阻止DEDE去分析该过程。
  
可以肯定的是:
  如果一个FORM的函数或过程都是在PRIVATE或PUBLIC里生成的,那么正常情况下DEDE罗列出来的事件将会是0!!!
  这点也很重要,至少别人无法直接通过事件名找到相应的过程,比如button1Click,但是或许某些版本的DEDE或罗列出类似_proc_ 00428ce8之类的无名事件,但这也阻止了别人直接就窥视你的代码
2004-11-29 16:57
0
雪    币: 390
活跃值: (707)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
3
PRIVATE部分?

确定?
2004-11-29 17:11
0
雪    币: 271
活跃值: (90)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
抱歉,说反了,呵呵
把函数或过程移动到PRIVATE 部分,不要在PUBLISHED里保留太多的关键函数或过程!
2004-11-29 17:17
0
雪    币: 390
活跃值: (707)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
5
PUBLISHED?不会是public吧?
2004-11-29 17:21
0
雪    币: 271
活跃值: (90)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
是PUBLISHED,DEDE截取事件的机理是基于DELPHI的RTTL机制,所以给DEDE制造障碍也比较简单--从某方面来说,但是对于写CODE的人就不轻松了,因为不能直接使用DELPHI生成的button1.onclick。
2004-11-29 17:29
0
雪    币: 390
活跃值: (707)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
7
不用onclick,那我怎么写代码呢?

动态赋值?
2004-11-29 17:34
0
雪    币: 271
活跃值: (90)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
是动态赋值,所以很累
2004-11-29 17:56
0
雪    币: 218
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
[转贴]
如果你是共享软件作者,经常会为你的软件被 Crack 掉所烦恼,你能做的就是要加强你的软件的 Anti-Crack 功能,今天就交你一招。

  如果你用过 Delphi 的专用反汇编工具 DEDE,那么你肯定知道像 Button1Click 这种 Event Handler 的方法入口地址 极容易被定位,其原理是根据TForm 的 RTTI 信息获取的(通过分析 dfm 资源文件就可以获得地址),其实 VCL 窗体只有 published 过的类成员才会生成 RTTI 信息。知道这个关键点加上对 VCL 消息机制的深入了解你就可以防止这一切发生。

  1. Anti-Crack

  新建一个 Application,在 Form1 上放两个 Button,命名为 btnRegister、btnCancel,双击这两个按钮,分别生成TForm1.btnCancelClick、TForm1.btnRegisterClick 两个 Event Handler 骨架代码,然后在对象查看器中取消 btnRegister.OnClick 与 TForm1.btnRegisterClick 的关联, 随后将 TForm1.btnCancelClick 的声明放入 TForms1 声明的 private 区段。再按照下面的代码 内容加入其他部分:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
btnRegister: TButton;
btnCancel: TButton;
procedure btnCancelClick(Sender: TObject);
private
procedure btnRegisterClick(Sender: TObject);
procedure WMCommand(var Message: TWMCommand); message WM_COMMAND;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btnCancelClick(Sender: TObject);
begin
Close;
end;

procedure TForm1.btnRegisterClick(Sender: TObject);
begin
ShowMessage('Thx for ur registration.');
end;

procedure TForm1.WMCommand(var Message: TWMCommand);
begin
if Message.NotifyCode = BN_CLICKED then
if FindControl(Message.Ctl) = btnRegister then
begin
btnRegisterClick(Self);
Exit;
end;
inherited;
end;

end.  

  这个方法的本质就是截获 TForm1 的 WM_COMMAND 消息并自己处理,请自行分析代码,我就不多说了。编译完后你可以用 DEDE 反汇编一下,看看还能不能那么容易地找到 TForm1.btnRegisterClick 的入口地址。
[转贴]
2004-11-29 17:56
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
2004-11-29 18:00
0
雪    币: 218
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
这样做了之后,用dede反编译后,看不到btnRegister的procedure了,我想看到的是_proc_00428ce8那样的,应该怎么办?
2004-11-29 18:04
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
:(
2004-11-29 18:05
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
2004-11-29 18:05
0
雪    币: 271
活跃值: (90)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
没办法,一个一个看吧,用排除法??呵呵
2004-11-29 18:07
0
雪    币: 271
活跃值: (90)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
15
我个人觉得还是不要用WMCommand这种消息机制了,太麻烦--难道对每种消息都要分别去写?

建议大家还是参考我写的代码模板,个人觉得比WMCommand方便多了,而且可以直接对所有事件进行动态操作。

“[原创]ANTI-DEDE的几个方法” 地址:
http://bbs.pediy.com/showthread.php?s=&threadid=7681
2004-11-29 19:24
0
游客
登录 | 注册 方可回帖
返回
//