重新拾起c# 写点小东西玩玩,“浏览记录清理&启动项管理”

信息安全实验课题

             ——上网痕迹清除

1.实验目的及要求:

   上网痕迹自动清除、显示系统自启动项并能实现清除。

说明:实现一个软件,类似优化大师的部分功能,首先要列举出上网的过程中都会在系统中留下哪些痕迹,系统都包含哪些自启动项,然后能对指定的上网痕迹和指定的自启动项进行清除。

2. 实验环境:

   开发平台:WindowsXP sp2 中文版,framework2.0

开发工具:visual studio 2005.NET

开发语言:c#

3. 实验内容:

   1.上网浏览痕迹的类型:

上网历史

C:\Documents and Settings\ Username \Local Settings\History

上网保存在系统缓存中的网页

C:\Documents and Settings\cyher\Local Settings\Temporary Internet Files

Ie自动保存的密码

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\IntelliForms\Storage2

Ie6是HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\IntelliForms\spw

Ie自动完成的表单资料

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\IntelliForms\Storage1

Windows的临时文件夹

C:\Documents and Settings\Username\Local Settings\Temp

C:\WINDOWS\Temp

开始菜单中的文档记录

C:\Documents and Settings\Username\Recent

上网产生的cookies  

C:\Documents and Settings\Username\Cookies

Ie地址栏下拉菜单

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\TypedURLs

上 面的内容从原理上分,其中上网历史记录,上网保存在系统缓存中的网页,Windows的临时文件夹,开始菜单中的文档记录,上网产生的cookies这几 项都是缓存在Windows的特别文件夹中的。而Ie自动保存的密码,Ie地址栏下拉菜单,Ie自动完成的表单资料是在注册表中存放。

基本原理就是删除不想要的文件和注册表项就可以了。

所以,用c#编写的时候基本上就是两个类 一个DeleteFolder删除文件夹和文件,一个 DeleteKey删除注册表项。

public void DeleteFolder(string dir)

        {

            try

            {

                if (Directory.Exists(dir))   //如果存在这个文件夹删除之   

                {

                    foreach (string d in Directory.GetFileSystemEntries(dir))

                    {

                        string a = Path.GetExtension(d).ToString();

                        //if (d == dir+”\\index.dat“)

                        if (a == “.dat”)

                            continue;

                        else

                        {

                            if (File.Exists(d))

                                File.Delete(d);    //直接删除其中的文件   

                            else

                                DeleteFolder(d);

                        }//递归删除子文件夹   

                    }

                    // Directory.Delete(dir);    //删除已空文件夹   

                   // Response.Write(dir+” 文件删除成功”);   

                }

                else

                    MessageBox.Show(dir + ” 该文件夹不存在”); //如果文件夹不存在则提示   

            }

            catch { }

        }//删除文件夹类

private void DeleteKey(string keyName ,string keyUrl)//删除注册表值类

        {

            RegistryKey hklm = Registry.CurrentUser;

            RegistryKey runs = hklm.OpenSubKey(keyUrl, true);

            try

            {

                string[] runsName = runs.GetSubKeyNames();

                foreach (string strName in runsName)

                {

                    if (strName.ToUpper() == keyName.ToUpper())

                        runs.DeleteSubKey(strName);

                }

            }

            catch { }

        }

这两个类基本能实现要实现的两个功能。

4.算法描述即实现步骤

程序界面分两个部分

1.    上网浏览记录清除。

   

 

2.    启动项清除部分

 

 

 

基本由这两个部分构成,算法就是上面表示出来的两个类。其他的都是控件编程。

 

3.    在编程过程中遇到的困难。

1.    就是在删除浏览记录的时候,有个重要的index.dat文件删不掉,导致程序无法执行,于是就有这样的语句

                  if (a == “.dat”)

                       continue;

                        else

来跳过index.dat文件和其他删不了的.dat文件。等全部处理完以后在用算法处理index.dat文件。

2.    在写清除ie保存的密码的时候,发现了一个软件,能利用我要删除的着两个注册表项把密码还原出来

这两个注册表项分别为:

HKEY_CURRENT_USER\Software\Microsoft\Protected Storage System Provider\S-1-5-21-725345543-1788223648-839522115-1003\Data

 

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\IntelliForms\Storage2

 

密码和帐号保存在下面的注册表项中,是加密过的,经过看这个软件的文档,密钥就应该在第一个注册表项中。至于怎么提取并解密,还需进一步研究。(详见http://www.nirsoft.net/

 

 

5.项目小结

   经过这次项目,了解了Windows的浏览记录保存机制,发现Windows的这种机制是很不安全的,很容易被黑客利用。做个这个软件能有效的从表面上,遏制一下不安全的操作,不过还是需要我们在使用电脑的时候有一个安全的意识。

 

相关日志

Leave a Reply