用Delphi5.0实现注册表监视

用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;
经过实际运行,该程序在发现来历不明的程序方面确实能起到一定的作用。当然,它的功能也很单一,如果要进一步完善,增加监视系统其他关键文件的变化,则效果会更好。希望能与有兴趣的读者交流。
下载源代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Delphi7 是一种编程语言,主要用于创建 Windows 应用程序。而 Tessercat5.0 是一款开源的 OCR (光学字符识别) 库,用于将图像中的文本转换为计算机可读的文本格式。在 Delphi7 中使用 Tessercat5.0,可以实现对图像文本的识别和提取。 具体来说,在 Delphi7 中使用 Tessercat5.0,需要先将图像载入程序中,然后通过调用 Tessercat5.0 库的 API (应用程序接口) 进行文本识别。Tessercat5.0 库内部使用了 OCR 技术,将图像中的字符进行分析和识别,并将文本信息转换为计算机可读的字符串格式。 在 Delphi7 中使用 Tessercat5.0 可以帮助开发者快速实现文本识别和提取功能,用于各种文本识别应用,比如识别印刷文本、手写文本、车牌识别等。同时,通过开源库的使用,可以降低开发成本和提高开发效率,为开发者节约时间和精力。 ### 回答2: Delphi7和Tesseract 5.0可以结合使用,以实现文字识别的功能。Tesseract是一个开源的文字识别引擎,可用于OCR(光学字符识别)任务。通过将Tesseract集成到Delphi7中,可以方便地将图像转换为可编辑的文本。在编写程序时,需要连接Tesseract库和Delphi7。通过访问Tesseract API,可以将文本识别功能添加到应用程序中,然后使用Delphi7的UI元素来展示结果。然而使用Tesseract5.0需要进行训练模型的选择和下载,以便针对特定的图像类型进行优化,以获得更准确的结果。虽然集成Tesseract可以实现OCR功能,但其中某些设置可能会比较复杂,需要花费一定的时间和精力来调整和处理。总体而言,Delphi7和Tesseract 5.0可用于 OCR 任务,并且可以最大限度地发挥其在图像处理和文本识别方面的优势。 ### 回答3: Delphi7是一款强大的集成开发环境,可以用于Windows平台上的软件开发。而Tesseract5.0则是一款开源的光学字符识别引擎,可以识别数字和字母等字符。结合这两个工具可以实现Delphi7中对图片中的文字进行自动识别和转换。 在使用Delphi7和Tesseract5.0之前,需要先将Tesseract5.0下载并安装到计算机中。接着,在Delphi7中创建一个新项目,添加一个Tesseract5.0的组件,然后在代码中调用Tesseract5.0的API,读取图片文件中的文本信息。 值得注意的是,Tesseract5.0提供了多种识别语言的支持,因此可以根据需要进行语言的选择。此外,为了增强识别效果,可以在处理图片前先进行一些预处理工作,比如图像二值化、去噪等。 总的来说,使用Delphi7和Tesseract5.0进行光学字符识别是一项非常有用的工作。它可以帮助开发者快速有效地将图片中的文本信息转换为可编辑的文本格式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值