• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當前位置:雨林木風下載站 > 技術開發(fā)教程 > 詳細頁面

        用Delphi5.0完成注冊表監(jiān)視

        用Delphi5.0完成注冊表監(jiān)視

        更新時間:2022-05-08 文章作者:未知 信息來源:網(wǎng)絡 閱讀次數(shù):

        中南大學湘雅二醫(yī)院信息中心 朱洪濤

        隨著Internet的不斷普及,網(wǎng)絡安全越來越受到人們的重視。除了計算機病毒以外,網(wǎng)上不斷出現(xiàn)的的各類黑客軟件、遠程控制軟件等,更讓人們對自己的機器越來越不放心。而這類軟件的多樣性及不斷更新等,使得單靠一些防病毒軟件已不能完全保護自己的機器。
        有沒有什么好的方法防止來歷不明的軟件安裝在自己的機器上呢?答案就是密切注意系統(tǒng)關鍵文件的變化。大家都知道,一個程序如果要在Windows啟動時自動運行,一般有三種方法:
        1.在開始菜單的[啟動]組中加入快捷方式
        2.在Win.ini中加入相關項目
        3.在注冊表的 HKEY_Local_Machine\SoftWare\Microsoft\Windows\CurrentVersion\Run主鍵下加入指向自己的鍵值。
        而第一種方法太明顯,很容易發(fā)現(xiàn)。所以一般的黑客程序使用后兩種方法啟動自己。筆者在此介紹一個自己編寫的簡單的注冊表監(jiān)視器,用于實時監(jiān)視注冊表中鍵值的變化,以發(fā)現(xiàn)不明來歷的程序。讀者有興趣的可以在此基礎上進一步完善。
        程序設計思路
        本程序用Delphi5.0開發(fā)。Delphi是Borland公司出品的快速可視化Windows程序開發(fā)工具,功能強大,易于使用。程序中通過一個定時器來實現(xiàn)每隔一定時間對注冊表比較一次。程序在啟動時保留一份原始的注冊表相關鍵值的數(shù)據(jù)備份,然后定時和當前的鍵值進行比較,如果發(fā)現(xiàn)變化,則提示用戶查看。
        程序?qū)崿F(xiàn)
        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用于保存原始注冊表數(shù)據(jù)
        LogTstringList用于記錄變化的日志
        RegKeysTstringList用于存放Run分支下的主鍵名
        4、在FormMain:OnCreate事件中保留原始注冊表數(shù)據(jù),主要代碼如下:
        ……
        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 //如果沒有保存過數(shù)據(jù)
        begin
        for i:=0 to Regkeys.Count-1 do //保存原始數(shù)據(jù)
        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;
        經(jīng)過實際運行,該程序在發(fā)現(xiàn)來歷不明的程序方面確實能起到一定的作用。當然,它的功能也很單一,如果要進一步完善,增加監(jiān)視系統(tǒng)其他關鍵文件的變化,則效果會更好。希望能與有興趣的讀者交流。 

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統(tǒng)下載排行

        主站蜘蛛池模板: 日本人的色道免费网站| 久久久免费观成人影院| 亚洲人成电影青青在线播放| 亚洲欧洲日产韩国在线| 麻豆亚洲AV成人无码久久精品| h在线看免费视频网站男男| 国产成人福利免费视频| mm1313亚洲精品无码又大又粗| 国产亚洲欧洲精品| 亚洲性无码AV中文字幕| 最新亚洲成av人免费看| 午夜成年女人毛片免费观看| 黄网站色在线视频免费观看| 亚洲天堂电影在线观看| 国产在线jyzzjyzz免费麻豆| 在线精品亚洲一区二区| 亚洲 综合 国产 欧洲 丝袜| 美女无遮挡拍拍拍免费视频| 老汉色老汉首页a亚洲| 国产99视频精品免费视频76| 亚洲日韩精品一区二区三区 | 久久亚洲国产欧洲精品一| 亚洲精品无码久久久久APP| 精品一区二区三区无码免费视频| 免费成人在线观看| 亚洲成A人片在线播放器| 91成人在线免费视频| 亚洲日韩国产精品乱-久| 国产中文字幕免费观看| 亚洲欧美乱色情图片| 亚洲精品成a人在线观看| 国产精品亚洲AV三区| 亚洲愉拍99热成人精品热久久| 2021精品国产品免费观看| 亚洲日本中文字幕区| 国产男女爽爽爽免费视频 | 日本不卡在线观看免费v| 亚洲精品123区在线观看| 亚洲日韩国产精品乱| 成人免费网站视频www| 国产男女猛烈无遮挡免费视频|