分享
 
 
 

用Delphi5.0实现注册表监视

王朝delphi·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

用Delphi5.0实现注册表监视

中南大学湘雅二医院信息中心 朱洪涛

随着Internet的不断普及,网络安全越来越受到人们的重视。除了计算机病毒以外,网上不断出现的的各类黑客软件、远程控制软件等,更让人们对自己的机器越来越不放心。而这类软件的多样性及不断更新等,使得单靠一些防病毒软件已不能完全保护自己的机器。

有没有什么好的方法防止来历不明的软件安装在自己的机器上呢?答案就是密切注意系统关键文件的变化。大家都知道,一个程序如果要在Windows启动时自动运行,一般有三种方法:

1.在开始菜单的[启动]组中加入快捷方式

2.在Win.ini中加入相关项目

3.在注册表的 HKEY_Local_Machine\SoftWare\Microsoft\Windows\CurrentVersion\Run主键下加入指向自己的键值。

而第一种方法太明显,很容易发现。所以一般的黑客程序使用后两种方法启动自己。笔者在此介绍一个自己编写的简单的注册表监视器,用于实时监视注册表中键值的变化,以发现不明来历的程序。读者有兴趣的可以在此基础上进一步完善。

程序设计思路

本程序用Delphi5.0开发。Delphi是Borland公司出品的快速可视化Windows程序开发工具,功能强大,易于使用。程序中通过一个定时器来实现每隔一定时间对注册表比较一次。程序在启动时保留一份原始的注册表相关键值的数据备份,然后定时和当前的键值进行比较,如果发现变化,则提示用户查看。

程序实现

1、在Delphi中建立一个新的Project,将Form1改名为FormMain

2、在FormMain上放置一个定时器控件TTimer,将Project保存为PiRegWatch.Dpr

3、修改PiRegWatch.Dpr中的代码:

Application.Initialize;

Application.CreateForm(TFormMain, FormMain);

//使主窗口启动时不显示

Application.ShowMainForm:=False;

Application.Run;

在FormMain中增加几个对象。

对象类型说明

RegTregistry用于注册表的访问

IniFileTiniFile用于保存原始注册表数据

LogTstringList用于记录变化的日志

RegKeysTstringList用于存放Run分支下的主键名

4、在FormMain:OnCreate事件中保留原始注册表数据,主要代码如下:

……

self.Reg:=TRegistry.Create;

with self.Reg do

begin

RootKey:=HKEY_Local_Machine;

If OpenKey('Software\Microsoft\Windows\CurrentVersion\Run',false)

then

begin

RegKeys:=TStringList.Create;

GetValueNames(RegKeys); //取得Run下面的所有主键名

if not self.IniFile.SectionExists('RunList') then //如果没有保存过数据

begin

for i:=0 to Regkeys.Count-1 do //保存原始数据

if (self.Reg.GetDataType(RegKeys.Strings[i])=rdString)

or(self.Reg.GetDataType(RegKeys.Strings[i])=rdExpandString)

then begin

value:=self.Reg.ReadString(RegKeys.Strings[i]);

self.IniFile.WriteString('RunList',RegKeys.Strings[i],value);

end;

end;

end;

end;

……

5、在TTimer1.OnTmer事件中加入比较注册表的代码。主要代码如下:

procedure TFormMain.Timer1Timer(Sender: TObject);

var i:integer;

RegVal,IniVal:string;

begin

self.Timer1.Enabled:=False;

self.Reg.GetValueNames(RegKeys);

for i:=0 to RegKeys.Count-1 do //检查新加的和已修改了的键值

if (self.Reg.GetDataType(RegKeys.Strings[i])=rdString)

or (self.Reg.GetDataType(RegKeys.Strings[i])=rdExpandString)

then begin

RegVal:=self.Reg.ReadString(RegKeys.Strings[i]);

IniVal:=self.IniFile.ReadString('RunList',RegKeys.Strings[i],'');

if RegVal<>IniVal then

begin

self.LogMsg('Item Add:'+RegKeys.Strings[i]+'='+RegVal);

self.IniFile.WriteString('RunList',RegKeys.Strings[i],RegVal);

try

//提示用户

SendMsg('ABC','','注册表被改变:新增项目'+RegKeys.Strings[i]+'='+RegVal);

finally

end;

end;

end;

self.IniFile.ReadSection('RunList',RegKeys);

for i:=0 to RegKeys.Count-1 do //检查已被删除的键值

begin

IniVal:=self.IniFile.ReadString('RunList',RegKeys.Strings[i],'');

if self.Reg.ValueExists(RegKeys.Strings[i]) and

((self.Reg.GetDataType(RegKeys.Strings[i])=rdString)

or (self.Reg.GetDataType(RegKeys.Strings[i])=rdExpandString) )

then

RegVal:=self.Reg.ReadString(RegKeys.Strings[i])

else

RegVal:='';

if (IniVal<>'') and (RegVal='') then

begin

self.LogMsg('Item Del:'+RegKeys.Strings[i]+'='+IniVal);

self.IniFile.DeleteKey('RunList',RegKeys.Strings[i]);

try

SendMsg('ABC','','注册表被改变:项目删除'+RegKeys.Strings[i]+'='+IniVal);

finally

end;

end;

end;

self.IniFile.UpdateFile;

self.Timer1.Enabled:=True;

end;

6、在FormMain:OnClose事件中进行对象释放及必要的清理工作

procedure TFormMain.FormClose(Sender: TObject; var Action:TCloseAction);

begin

if Assigned(self.Reg) then self.Reg.Free;

if Assigned(self.IniFile) then self.IniFile.Free;

if Assigned(self.LogFile) then self.LogFile.Free;

if Assigned(self.RegKeys) then self.RegKeys.Free;

end;

经过实际运行,该程序在发现来历不明的程序方面确实能起到一定的作用。当然,它的功能也很单一,如果要进一步完善,增加监视系统其他关键文件的变化,则效果会更好。希望能与有兴趣的读者交流。

下载源代码

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有