安全类工具制作第001篇:制作AutoRun.inf免疫程序

一、前言

我曾经在《反病毒攻防研究第006篇:利用WinRAR与AutoRun.inf实现自启动》那篇文章中讨论过AutoRun.inf的原理与应对方法,作为对这个问题的收尾,我打算在此讨论一下如何利用MFC开发一个简单的免疫程序。尽管如今我们应该已经不会再受到AutoRun.inf的肆虐,但是这其中包含的很多思想依旧值得探讨。需要强调的是,这篇文章的重点在于预防,也就是在还没有受到AutoRun.inf的威胁时该如何给自己的计算机打预防针。如果计算机中了AutoRun.inf的破坏,可参考反病毒系列第006篇的文章内容。

二、AutoRun.inf的免疫原理

我们在网上可以找到很多免疫工具,现在一些修改版的操作系统里面也会提供这样一个免疫工具。它免疫的原理是建立一个不被删除的AutoRun.inf文件夹,以防止病毒生成一个运行病毒的AutoRun.inf。其免疫要点是:

1、防止病毒在驱动器根目录下生成autorun.inf文件。

2、防止病毒破坏我们的免疫措施。

对于第一点,我们可以在驱动器根目录下做一个autorun.inf文件夹,原理是同一个目录中文件不能和文件夹重名。对于第二点,我们在刚才建立的autorun.inf文件夹中做一个不可删除的目录即可实现。

Windows下,不能够以下面这些字样来命名文件/文件夹,包括:aux、com1、com2、prn、con、nul等,因为这些名字都属于设备名称,等价于一个DOS设备。如果我们把文件命名为这些名字,Windows就会误以为发生重名。而以这些名字命名的文件夹虽可以访问,也可以建立文件夹,但却无法删除,因为Windows不允许以这种方式删除设备。在系统看来,这个文件夹就是设备。如果不以设备名称作为文件名,也可以采用某些方法给文件或者文件起一个包含非法字符的名称,这样一来,它们也是不能够被删除的,这也是接下来所要讨论的方法。而这类名称,虽然不能够用正常的手段进行创建与删除,但是我们是可以通过编程实现的,接下来就对编程方法进行讨论。

三、利用MFC制作免疫程序的界面

首先需要建立一个基于对话框的MFC程序,然后界面上的默认控件,添加一个Combo Box控件和两个Button控件:

图1 程序界面

将界面中的三个控件的ID分别改为:IDC_COMBO_DRIVER、IDC_IMMUNITY和IDC_CANCEL。然后再给ComboBox控件添加一个类型为“Control”,名称为“m_ComboDriver”的变量。

这里有一点需要说明的是,很多初学者发现程序在运行后,单击Combo Box控件右边的下三角,无法打开下拉选项,而用键盘的“↓”却可以进行下拉项的选择。其实这是因为在界面设计时,需要将Combo Box控件向下拉一定的范围才可以。单击右边的倒三角,就能够进行调整:

图2 调整Combo Box控件显示范围

至此,界面设计完毕,还是非常简单的,接下来就要添加代码来实现功能了。

四、编写免疫程序的代码

程序中的Combo Box控件是用来选择想要进行免疫的盘符的,所以需要在控件中显示出所有的盘符供用户选择,这里定义一个函数以实现相应的功能。在CImmunityARDlg.cpp文件中,找到OnInitDialog()函数,在“// TODO: Add extra initialization here”与“return”之间的进行函数声明:

InitComboDriver();

以表明程序对话框的初始设定,然后在OnInitDialog()函数的后面添加InitComboDriver()函数:

void CImmunityARDlg::InitComboDriver()
{
        char szDriverString[MAXBYTE] = { 0 };
        char *pTmp = NULL;
        //设置编辑框显示的内容
        SetDlgItemText(IDC_COMBO_DRIVER,_T("Select a drive letter..."));
        //获取字符串类型的驱动器列表
        GetLogicalDriveStrings(MAXBYTE, szDriverString);

        pTmp = szDriverString;

        while( *pTmp )
        {
                //向CComboBox中添加字符串
                m_ComboDriver.AddString(pTmp);
                //每个盘符占据4个字节,所以加上4可以切换到下一个盘符
                pTmp += 4;
        }
}

对于初学者来说,还有一点需要注意的是,由于这里我们自定义了InitComboDriver()函数,因此一定要把这个函数的声明添加到头文件,也就是CImmunityARDlg.h中,可以在public下添加:

void InitComboDriver();

接下来添加“Immunity”按钮的代码,双击该按钮就可以来到代码编辑界面,首先在最上方添加两个宏定义:

//创建的目录名称
#define AUTORUN  "autorun.inf"
//创建无法删除的目录
#define IMMUNITY  \\Immunity...\\

然后对按键定义如下代码:

void CImmunityARDlg::OnBtnImmunity()
{
        // TODO: Add your control notification handler code here
        char szPath[MAX_PATH] = { 0 };
        GetDlgItemText(IDC_COMBO_DRIVER, szPath, MAX_PATH);
        //创建autorun.inf文件夹
        strcat(szPath, AUTORUN);
        BOOL bRet = CreateDirectory(szPath,NULL);
        //盘符无法免疫的情况,可能已经免疫或盘符不可写
        if(!bRet)
        {
                //在MFC中推荐使用AfxMessageBox
                AfxMessageBox("Immunity error!");
                return;
        }
        //创建无法删除的用来进行免疫的文件夹
        strcat(szPath,IMMUNITY);
        bRet = CreateDirectory(szPath, NULL);
        if(!bRet)
        {
                AfxMessageBox("Immunity error!");
        }
}

接下来是给Cancel按钮添加代码:

void CImmunityARDlg::OnBtnCancel()
{
        // TODO: Add your control notification handler code here
        char szPath[MAX_PATH] = { 0 };
        //删除文件夹Immunity...,其路径为X:\autorun.inf\Immunity...
        GetDlgItemText(IDC_COMBO_DRIVER, szPath, MAX_PATH);
        strcat(szPath, AUTORUN);
        strcat(szPath, IMMUNITY);
        RemoveDirectory(szPath);
        //清空保存有路径信息的数组
        ZeroMemory(szPath,MAX_PATH);
        //删除文件夹autorun.inf,其路径为X:\autorun.inf
        //注意这里的目录需要从里向外一层层删除
        GetDlgItemText(IDC_COMBO_DRIVER, szPath, MAX_PATH);
        strcat(szPath, AUTORUN);
        RemoveDirectory(szPath);
}

至此所有代码编写完毕,经实际测试,可以达到相应的效果,这里不再赘述。

五、知识补充

上述程序中用到了ZeroMemory()函数,我以前的程序中为了达到相同的目的,也用过memset()函数,二者的区别在于:

1、ZeroMemory()是微软SDK提供的,memset()是属于C Run-timeLibrary提供的,因此ZeroMemory()只能用于Windows系统,而memset()还可以用于其他系统。

2、ZeroMemory()是一个宏,只是用于把一段内存的内容置零,内部其实是用memset()实现的,而memset()除了对内存清零操作,还可以将内存置成别的字符。

3、如果程序是Win32程序而不想连接CRun-time Library,就用ZeroMemory;如果需要跨平台,就用memset。ZeroMemory相当于memset(buffer,0,length)。

对于AfxMessageBox和MessageBox的区别如下:

1、AfxMessageBox是MFC库提供的全局函数,提供了多种重载形式,而MessageBox是标准的Windows API函数。

2、AfxMessageBox函数在任何类里边都可以使用,而MessageBox()函数只能在CWnd类的继承类中使用。另外,AfxMessageBox()函数的参数没有MessageBox()函数的参数丰富,所以后者较前者灵活。

3、AfxMessageBox不能控制消息框标题,常用于调试程序时的内部数据输出或警告;MessageBox比较正式,常用在要提交的应用程序版本中,可以控制标题内容而不必采用含义不明的可执行文件名为标题。

六、小结

通过这个免疫程序的编写,很好地起到了举一反三的作用。这个免疫程序虽然在今天已经意义不大,可是编写过程中很多的注意事项和编程知识,是值得学习的。这只是一个基础,未来会编写更多的安全类工具。

时间: 2024-10-31 15:36:14

安全类工具制作第001篇:制作AutoRun.inf免疫程序的相关文章

安全类工具制作第002篇:U盘防火墙的制作

一.前言 我在上一篇文章中讨论了如何制作AutoRun.inf免疫程序,虽然这个免疫程序可以对所有的盘符有效,但是其实主要还是针对于U盘来进行防护的.由于目前新版的操作系统已经基本不支持AutoRun.inf,因此一般来说我们无需特别地关注这个问题.作为对U盘防御研究的收尾,这次我所讨论的是制作一个U盘防火墙.通过这个防火墙,当检测到有U盘插入时,则会产生提示,并且自动检查U盘中是否有AutoRun.inf文件,进行解析再进行删除操作,通过这个防火墙就可以安全地打开U盘. 其实现在很多杀毒软件都

【免费下载】全套最新 001网页制作HTML+CSS 视频教程+教学资料+学习课件+源代码+软件开发工具

001网页制作HTML+CSS视频教程 网盘地址: 链接:https://pan.baidu.com/s/1yTFfvxw8Mj9hoQfLh0G8TQ 提取码:bk9r 加公众号 获取更多新教程 教程目录大纲 ./001网页制作HTML+CSS ├── 01视频教程 │?? ├── 01HTML基础入门 │?? │?? ├── 10.HTML&CSS基础_实体.avi │?? │?? ├── 11.HTML&CSS基础_图片标签.avi │?? │?? ├── 12.HTML&C

制作U-boot ---AT91SAM9260篇

制作U-boot ---AT91SAM9260篇 0.制作交叉编译链请看<ARM交叉编译工具制作V2> ---------------------------------------------------转载请注明:xiaobin_hlj80---- 1.烧写boot-uboot 查看AT91SAM9260芯片文档,关于内存部分 P19– 6221s.pdf(http://www.atmel.com/zh/cn/devices/SAM9260.aspx?tab=documents) 起始地址

【app制作指南】如何制作一款属于自己的APP(移动客户端)?

大家都清楚制作app,都需要技术的,就这点技术会吓退很多想制作app的朋友们.我没技术,我也只能心有余而力不足啊.所以我今天给大家分享的是app制作指南,如果制作一款属于自己的APP(移动客户端). 其实,目前个人制作APP的方法有三种,一是合作开发,二是花钱找人开发,三是使用在线制作工具.本文将从这三个方面来一一介绍.  一.合作开发 合作开发是类似于资源互换方式,一方提供技术开发APP,而另一方则提供相应的资源,可以和一些团队合作开发APP,对于知名站点,一般都能免费帮助其开发,并与其资源互

7个有趣好玩的PPT制作神器,轻轻松松制作PPT

在职场中,PPT是经常需要用到的办公工具.还在为制作PPT找不到辅助工具而烦恼吗?想要制作一份惊艳的PPT,没有好用的神器那可不行.为大家整理的7个有趣好玩的PPT制作神器.赶紧看看吧!!! Nordri Tools一个让PPT制作变得简单的插件,最×××步解决一个PPT.这是一个带有思维的插件!草料二维码在做PPT时,有时最后一页需要放上企业的网站,但是为了想让观众直接了解,可以将网站链接转换成二维码的样式.办公资源这是一个模板素材丰富的网站,不仅有PPT模板,还有Word.Excel模板,o

PPT制作教程:如何制作ppt

PowerPoint(PPT)是专门用于制作演示文稿(俗称幻灯片).广泛运用于各种会议.产品演示.学校教学等.学会如何制作ppt,成为提升工作效 率的好帮手.PPT包含有很多的功能,我们可以根据个人喜欢和需求来选择其部分. 1.[新建PPT文件]安装好Office PowerPoint软件后,就可以打开程序创建PPT文件了.打开PPT方式有几种,可以按照如图所示的打开,点击“开始”-“所有程 序”-"Microsoft Office"-"Microsoft PowerPoin

转:Linux性能评测工具之一:gprof篇

1 简介 改进应用程序的性能是一项非常耗时耗力的工作,但是究竟程序中是哪些函数消耗掉了大部分执行时间,这通常都不是非常明显的.GNU 编译器工具包所提供了一种剖析工具 GNU profiler(gprof).gprof 可以为 Linux平台上的程序精确分析性能瓶颈.gprof精确地给出函数被调用的时间和次数,给出函数调用关系. gprof 用户手册网站 http://sourceware.org/binutils/docs-2.17/gprof/index.html 2 功能 Gprof 是G

PostMan工具使用之基础篇

PostMan工具使用之基础篇 一.什么是PostMan Postman一款非常流行的API调试工具.(其他测试工具 Jmeter.soapUI) 二.下载及安装: 1.下载: 下载地址:https://www.getpostman.com/apps 2.安装: Postman最早是作用chrome浏览器插件存在的,所以,你可以到chrome商店搜索下载安装,因为重所周知的原因,所以,大家都会找别人共享的postman插件文件来安装.由于2018年初Chrome停止对Chrome应用程序的支持.

[转帖]前端-chromeF12 谷歌开发者工具详解 Network篇

前端-chromeF12 谷歌开发者工具详解 Network篇 https://blog.csdn.net/qq_39892932/article/details/82493922 blog 也是原作者转帖的 应该是 不过挺好的 可以在1906 里面仔细实验学习一下. 原文链接:https://segmentfault.com/a/1190000010302235 开发者工具初步介绍 chrome开发者工具最常用的四个功能模块: Elements:主要用来查看前面界面的html的Dom结构,和修