C++蠕虫病毒免疫器 (antiAutoRun)

本文介绍了一种使用C++编程创建不可删除文件夹的方法来防止U盘病毒通过autorun.inf文件传播的技术。通过在指定盘符下创建特殊文件夹,可以阻止病毒的自我复制行为。

使用方法:
输入 一 个 想要免疫的磁盘盘符,如C:\ D:\ E:\ 填完整!
回车即可

原理:
创建一个无法删除的文件夹(运用Windows文件系统的特性)
导致蠕虫写autorun.inf失败,丧失传播效果

(↓控制台版)
源码

/* antiAutoRun.cpp *
 * Author:noexcept *
 */
//C++
#include <Windows.h>
#include <io.h>
#include <iostream>
#include <string> 
using namespace std;
#define AUTORUN "autorun.inf" //同名文件夹 
#define ANTIDELETE "\\con\\" //这个是无法删除的文件夹的名称,还有其他选择 


bool Immune(string szDisk) //如"C:\"
{ //定向免疫 
 cout<<"\n试图免疫...";
 if(access(szDisk.c_str(),S_OK)) //不存在此盘 
 {
  cout<<"\nERROR: 不存在这个磁盘 "<<szDisk;
  return false;
 }
 
 string dir;
 dir+=szDisk;
 dir+=AUTORUN;
 BOOL bRet = CreateDirectory(dir.c_str(),nullptr); //创建文件夹 
 if(!bRet)
 { //failed
  cout<<"\nERROR: 无法免疫此盘,可能有写保护或已经免疫。";
  return false;
 }
 
 dir+=ANTIDELETE;
 bRet = CreateDirectory(dir.c_str(),nullptr);
 if(!bRet)
 { //failed
  cout<<"\nERROR: 无法免疫此盘,可能有写保护或已经免疫。";
  return false;
 }
 return true;
}

int main()
{
 string szDisk;
 cout<<"输入想要免疫的磁盘盘符(like C:\\): ";
 cin>>szDisk;
 if(Immune(szDisk))
  cout<<"\n操作成功完成.";
 else
  cout<<"\n免疫失败!";
 return 0;
}

运行后尝试一下,发现建立了一个autorun.inf文件夹,里面还有一个con文件夹。
试图删除,Win10没有反应,Win7直接报错,说找不到。con是Windows保留的文件名,进都进不去
进不去滴
提示:con不是唯一选择。
这个con最猛,普通指令还弄不死它,搞了好久才行

经测验,把上面的ANTIDELETE换成"XXX…"(后面跟三个点)以及 nul 等都可以免删
删不掉滴
用各种删文件夹的命令都可以删他们滴
例如cmd指令 rd E:\autorun.inf\antidelete…
(先删里面的才行)

下面提供移除免疫器源码

/* disAntiAutoRun.cpp *
 * Author:noexcept *
 */
//C++
#include <Windows.h>
#include <io.h>
#include <stdlib.h> 
#include <iostream>
#include <string> 
using namespace std;
#define AUTORUN "autorun.inf"
#define ANTIDELETE "\\con\\" //必须和上面那个一致

void DisImmune(string szDisk) //如"C:\"
{
 cout<<"\n移除免疫...";
 if(access(szDisk.c_str(),S_OK)) 
  return;
 
 string dir;
 dir+=szDisk;
 dir+=AUTORUN;
 dir+=ANTIDELETE; //先删里面的才行
// RemoveDirectory(dir.c_str()); //哎呀呀,这样竟删不掉con 
 string cmd;
 cmd+="rmdir \"\\\\.\\"; //用个UNC路径,这个招式很管用的 
 cmd+=dir;
 cmd+="\" /s /q";
 //cout<<"\n"<<cmd<<endl;
 system(cmd.c_str()); //调用cmd删掉它 终于成功了 
 
 dir="";
 dir+=szDisk;
 dir+=AUTORUN;
 RemoveDirectory(dir.c_str()); //再删外面的 
}

int main()
{
 string szDisk;
 cout<<"输入想要移除免疫的磁盘盘符(like C:\\): ";
 cin>>szDisk;
 DisImmune(szDisk);
 //cout<<"\n操作成功完成."; //system()会回馈的
 return 0;
}

这样就行了!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值