首页
社区
课程
招聘
[原创]浅谈U盘防御文件夹!!!
发表于: 2007-12-20 15:27 13289

[原创]浅谈U盘防御文件夹!!!

2007-12-20 15:27
13289

因为牵涉到编程。所以只有发到这里来了!!!

此文章以前:是本人学做Web 页;发布自己以前的DOS版 C++学院管理系统,副带的U盘谈论!!
纯属娱乐(),原版是html 格式的!! 现在我将其中一部份处理出来! 如下:

下面我再跟大家谈谈<U盘病毒吧>

U盘相信大家都知道这个小巧方便的好东西了吧,

现在的存储介质已经从大象变成蚂蚁了,集成度也是相当高了!

呵呵.硬件我现在就不谈了,下面我拿U盘来做个小实验!

Hardware: PC一台&&U盘一个.

Software: windows2003(OS操作系统)&&一个U盘防毒软件.

首先我用U盘防毒软件对U盘防御一次

如图:



它在我的U盘根目录生成了一个Autorun.inf文件夹并且该文件夹里面还有一个无法删除

无法直接操作的免疫目录..

它的Autorun.inf防毒原理是什么呢?就是利用windows命名规则!

同一空间不能有完全相等的字符串命名!Autorun.inf文件夹里面为什么要建立一个

无法删除及操作的免疫目录..呢?它的主要目的是不让Autorun.inf文件夹被删除!

这里谈到无法操作删除的免疫目录..就要联想到文件夹加密,初步了解些加密软件其原理都大部分都是依赖windows的一些规则!

还记得上图不能删除的免疫目录..吗?当真不能删除吗?当然可以删除并且非常easy!

只需借助一个cmd命令提示符 ,

再开始菜单上打开命令提示符或者在运行框输入CMD!

然后:

I:(进入I:盘(这里I:盘是我的U盘盘符))

cd Autorun.inf (进入Autorun.inf文件夹)

rd 免疫目录...\(删除文件夹)

这里问什么要rd 免疫目录...\呢?因为直接删除是删不掉的!

打个简单的比方吧。它建立的时候是md 免疫目录...\这样的,我们删除当然也要同理!

md XX..\是啥意思呢?

XX是新建的文件夹名,

..\这里的\是路径,意思是告诉\前面的是一个文件夹!

好比md ok\a,这里的 md ok\a是建立了一个路径ok\a,告诉md ok是目录!

而windows命名规则不允许前一是.后一. ,比如.name.这样的命名是不合法的,.都会被忽略掉,而利用\就可以了 这是在命令提示符下!

现在我们又回到md xx..\了,

现在我打开CMD测试一下

e: (在e:测试吧)

md test..\(建立一个test.文件夹,\是告之之前是目录,最后一个.被忽略掉了)

试试别用..\删除,好像不能直接删除吧!甚至不能操作!

呵呵,既然我们建立了这个文件夹那当然要有及用处嘛!不然建这个不是做无用功!

下面我们就来用它放数据,

下面我把E盘的test.txt放到test.里,直接拖拉是不行的我们来copy吧

还是用dos命令

copy test.txt test..\

成功复制1个文件

这个时候我们再点击test.文件夹还是不能打开查看的,因为test.文件夹是指向test文件夹的。因为没有test文件夹所以不能打开查看!大家是不是越听越糊涂啊?

没关系做个实验:

md test(建立一个test文件夹)

这个时候再双击打开test.文件夹,相信大家能打开了吧!但是里面没有test.txt文件啊!

别急!test.是指向test文件夹的!当然打开test.文件夹就相当于test文件夹

test文件夹什么东西都没。那么打开test.指向也就什么都没有啊 !

那么刚才的test.txt到哪去了呢?它还是在test.文件夹里!我说过了双击打开test.是打开test文件夹.那么打开test.就应该建立一个test..文件夹!

md test...\(建立一个test..文件夹)

这个时候打开test..是不是看到了test.txt!

呵呵 接下来再把test..文件夹删除了,test.txt也就无法查看了 ,但是test.txt还没被删除哦,你删除的只是test..指向文件夹,真正的test.txt在test.里面!

如果你想要查看test.文件夹里面的内容,就新建个test..文件夹吧!是不是有点那么加密的意思啊 ?其实 这种只是障眼法并不是真正的加密!好了扯的太远了!

再回到我们的免疫目录...

我们接着说免疫目录..!

既然可以用rd 免疫目录...\删除 它!那么删除Autorun.inf文件夹当然也不成问题了

可是要是Autorun.inf有很多免疫目录..呢?难道我们先要一个一个删除完吗?

回答是不需要?我们可以借助cmd命令!呵呵对,又是命令提示符:

rd Autorun.inf /s/q 这里加了两个参数 /s删除所有,/q不提示。

意思是删除Autorun.inf本身以及子目录

就是把从Autorun.inf开始分支的树目录全删除了!是不是很方便啊 !

这样说那么它这个U盘防御是不是太脆弱了!

接下来我们用编程实现上述的操作!

这里我就用C++写个

先说明这段代码的意思吧,(代码已经过编译运行!)

首先它仿照U盘防御软件写了一个Autorun.inf\免疫目录..

然后直接破掉这个防御!写入Autorun.inf自动加载文件!

再又是一个加强防御再写一个Autorun.inf\nul防御文件夹!(此代码已经注释 之所以要用nul  是因为WINDOWS把nul 当设备看待 !)

这下强制删除不顶用了,不过还是有办法删除的 就是比删除 Autorun.inf\免疫目录..麻烦了些.

接着写了一个简单的数据隐藏,将test.txt文件隐藏在test.文件夹里!还有查看方法!其实还可以放入test.\test.\里面,这样复杂点!但是举例没

必要那么麻烦了!这只是个简单的例子,代码也不长!

代码暂时放在一边!先说Autorun.inf文件吧,它是系统自动调用的!(所以防御嘛!还是配置系统最好了!)

、autorun.inf文件分为三大部分[AutoRun] [AutoRun.Alpha] [DeviceInstall]。

[AutoRun]适用于Windows95以上系统与32位以上CD-ROM,必选。

[AutoRun.alpha]适用于基于RISC的计算机光驱,适用系统为Windows NT 4.0,可选。

[DeviceInstall]适用于Windows XP以上系统,可选。

那么我们就说这个比较通用的[Autorun]吧.

新建立一个Autorun.inf放再U盘根目录,用记事本(notepad)编辑Autorun.inf输入如下

[Autorun] (告之操作系统是[Autorun]格式 )

icon=icon.ico (前提一定要有icon.ico文件再当前目录)

接下来可以安全删除U盘了 拔出来然后再插上!

如图 :


U盘图标出来了吧!这只是一个简单的显示图标功能[Autorun]还有部分其他的功能

比如添加自动运行

在Autorun.inf文件里加一行: Shell\打开\Command=Udisk.exe Shell\

你就可以看到如下结果。如果你双击U盘那么你就运行了Udisk.exe了

如图:



怎么样现在基本了解了吧。要看详细的Autorun.inf可以去网上serach!其实就是windows操作系统从中读取的数据然后处理!并不是它正的会自动运行

呵呵,其实下面的代码完全可以编译!

1.

==================Udisk.h======================

#include <windows.h> //调用系统函数用

#include <direct.h> //调用文件夹函数用

2.

==================Udisk.cpp=====================

#include "Udisk.h"
int __stdcall WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd
)

{
char auVirus[]=" [Autorun]\r\nShell\\打开\\Command=Udisk.exe Shell\\\r\nicon=ok.ico\r\n\0";//被写入的串
const char au[]="Autorun.inf";//文件命串
HANDLE hf;//定义一个文件句柄
//=========================实现U盘防御===============
system("rmdir Autorun.inf /s/q");//强制删除先前Autorun.inf文件夹
SetFileAttributes(au,FILE_ATTRIBUTE_NORMAL);//把Autorun.inf文件特有属性先减掉
DeleteFile(au);//删除Autorun.inf文件
if(!_mkdir("Autorun.inf"))
{

}
if(!_mkdir("Autorun.inf\\免疫目录..\\"));
{

}
//=================================破掉U盘防御写入Autorun,inf文件============
system("rmdir Autorun.inf /s/q");//强制删除先前Autorun.inf文件夹
SetFileAttributes(au,FILE_ATTRIBUTE_NORMAL);//把Autorun.inf文件特有属性先减掉
//用createfile创建新文件
if(INVALID_HANDLE_VALUE==(hf=CreateFile(au, //文件名字符串
GENERIC_WRITE|GENERIC_READ,//打开模式为读加写
FILE_SHARE_READ, //于其他程序共享为读
NULL, //安全特性结构体指针
CREATE_ALWAYS, //相当于C++里的ios::out
FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM,//建立文件为只读隐藏加系统属性 只有建立新文件才有作用
0)//如果不为零,则指定一个文件句柄。新文件将从这个文件中复制扩展属性
))

{
::MessageBox(NULL,"无法创建","警告",MB_OK);

}
else
{
WriteFile(hf,auVirus,sizeof(auVirus),(unsigned long*)auVirus,NULL);//写文件需4个空字节
}
/*//===============================加强U盘防御==============
system("rmdir Autorun.inf /s/q");//强制删除先前Autorun.inf文件夹
SetFileAttributes(au,FILE_ATTRIBUTE_NORMAL);//把Autorun.inf文件特有属性先减掉
DeleteFile(au);
if(!_mkdir("Autorun.inf"))
{

}
if(!_mkdir("Autorun.inf\\nul\\"));
{

}
//=================================再次尝试破掉U盘防御写入Autorun,inf文件============
system("rmdir Autorun.inf /s/q");//强制删除先前Autorun.inf文件夹
SetFileAttributes(au,FILE_ATTRIBUTE_NORMAL);//把Autorun.inf文件特有属性先减掉
//用createfile创建新文件
if(INVALID_HANDLE_VALUE==(hf=CreateFile(au, //文件名字符串
GENERIC_WRITE|GENERIC_READ,//打开模式为读加写
FILE_SHARE_READ, //于其他程序共享为读
NULL, //安全特性结构体指针
CREATE_ALWAYS, //相当于C++里的ios::out
FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM,//建立文件为只读隐藏加系统属性 只有建立新文件才有作用
0)//如果不为零,则指定一个文件句柄。新文件将从这个文件中复制扩展属性
))

{
::MessageBox(NULL,"无法创建","警告",MB_OK);

}
else
{
WriteFile(hf,auVirus,sizeof(auVirus),(unsigned long*)auVirus,NULL);//写文件需4个空字节
}*/
//===============================把数据放入加密文件夹========================
char dataName[]="test.txt",pathName[]="test..\\test.txt";
_mkdir("test");
if(!_mkdir("test..\\"))
{

}
if(!CopyFile(dataName,pathName,0))
{
::MessageBox(NULL," ","",MB_OK);
}
//=============================查看数据=================================
if(!_mkdir("test...\\"))//数据在test..文件夹里
{

}
if(IDNO==::MessageBox(NULL,"是否继续查看test..里的秘密文件","提示",MB_YESNO))
{
if(!_rmdir("test...\\"))
{}
if(!_rmdir("test"))
{}
}
return EXIT_SUCCESS;
}


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (21)
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
2
参考zjjmj大牛的U盘安全助手的内核监控。。。

这种方法都没啥用了,病毒把文件夹改个名就可以释放自己的autorun.inf
2007-12-20 16:26
0
雪    币: 290
活跃值: (11)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
3
发篇具体的实现先!!!!  呵呵!
2007-12-20 18:58
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
4
解禁很用功啊。

呵呵。 支持~~~
2007-12-20 21:05
0
雪    币: 268
活跃值: (40)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
5
这是我前些天写的个小程序,也基本实现了AUTO的防御只是玩玩有兴趣的看看吧
http://hi.baidu.com/sghcz%5Flv/blog/item/dadfc903fd9476ef08fa934b.html
2007-12-20 21:51
0
雪    币: 290
活跃值: (11)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
6
  这都被你发现了 !!呵呵
2007-12-20 22:08
0
雪    币: 290
活跃值: (11)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
7
你的这个生成的防御文件夹是免疫目录..可以被删除哦。
请仔细看我的文章...可以改为nul 等Device
2007-12-20 22:15
0
雪    币: 234
活跃值: (61)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
有点意思,你在电脑里新建test..  test.  test  三个文件夹,如果这三个同时存在,那么任何一个都可以删除。不过有个有意思的现象,当你删除test..或者test.其中一个时,test会自动变成你删除的那个文件夹。这时候再删就删不掉了。但是test中放了文件,那么test..就删不掉,test.能删掉,但删除之后test变成了test.,test里面的文件看不到了,test..里也无法查看。不知道文件真的删除还是没删除。楼主能不能把原理讲清楚点啊。
2007-12-21 00:17
0
雪    币: 268
活跃值: (40)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
9
不好意思没仔细看
2007-12-21 08:12
0
雪    币: 288
活跃值: (112)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
10
如果cmd下用
ren  Autorun.inf dummyAutorun.inf

呢?
2007-12-21 13:37
0
雪    币: 290
活跃值: (11)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
11
  多谢!!!
2007-12-21 15:50
0
雪    币: 156
活跃值: (394)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
12
写的很好啊,支持一个
2007-12-21 15:59
0
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
楼主谈得很有道理,不过防御方法太弱了点吧,能不能加强再加强??~~
2007-12-23 15:40
0
雪    币: 221
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
通读3遍。原理是懂了。收藏起来。自己也模仿写一个。
                                  -----Calloy留
2008-3-22 22:37
0
雪    币: 1505
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
15
test. test.. 某大侠教的藏片方法
建立这三个文件夹,打开test..把东西放进去,删除掉test..很无敌! 用的时候再建立个test..
2008-3-24 07:47
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
不错,很有作用,回去好好研究下
2008-3-29 21:40
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
啊?我还以为这样防御很有用呢,这么容易就被你破了!
2008-4-4 13:56
0
雪    币: 298
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
很费解。。。同学你说错了吧。。。什么叫做建三个。。。
还有,费解的是怎么使用时还要建一个。。。命令行直接路径就哦了  X:\test...\
就是md test..\ md test...\ 就可以了,东西放到test...\里,不建立test...\也可以,但是文件夹会是错误路径提示,这样做的好处是直接打开了,没有路径提示。。。而且防删
2008-4-7 00:52
0
雪    币: 298
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
刚才回复中间的哥们了。。。呵呵。跑题了
LZ代码不错,尤其是属性判断那里学习了。。。
不过和DOS命令一样,你用C建立起来的文件夹一样无效。因为同样是利用了NT目录名的BUG,虽然防删,但是最外层文件名可以任意修改。并且整个文件夹可以任意在改分区下移动~~
2008-4-7 01:05
0
雪    币: 109
活跃值: (498)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
20
要免疫的盘符比如是 K:
cmd
K:
md autorun.inf..\

这样行不~ 投机取巧~
2008-4-7 22:09
0
雪    币: 230
活跃值: (429)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
似乎是呀。



你的这个怎么做到的,我的怎么行不能呀,我的系统是2003EE的。
建好这三个文件夹后,将文件copy到test..里面,然后再删除test..文件夹,但那个test去变成了test..文件夹,此时再打开test..时,什么也没有了,再打开test.文件夹,却出现了“引用了一个不可用的位置”。你是怎么做到的,能不能详细一点。
2008-5-26 10:47
0
雪    币: 360
活跃值: (77)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
22
记得很早前就看到了,而且还是一篇小说中。是利用的一个忽视实现的。
2008-5-26 20:16
0
游客
登录 | 注册 方可回帖
返回
//