第二课 安全选项.docx
- 文档编号:3972806
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:18
- 大小:798.53KB
第二课 安全选项.docx
《第二课 安全选项.docx》由会员分享,可在线阅读,更多相关《第二课 安全选项.docx(18页珍藏版)》请在冰豆网上搜索。
第二课安全选项
安全选项(课堂记录)
首先申明,这是QQ聊天课堂,可以轻松一些,随意一些,内容也可能随时根据需求和现场反馈进行调整,所以不要用课堂内容和严密的出版物内容比较。
课堂在传授知识的同时,也需要即兴的发挥。
今天的课程是安全选项,包含三项内容:
VBA的安全性概述、了解ExcelVBA的信任中心、让自己的程序畅通无阻。
1.VBA的安全性概述
宏很强大,但也同时伴随着隐患。
如何最大限度地发挥宏的优势,随心所欲地应用宏的自动化,从而解放双手,同时又能规避隐患,这是每个VBA爱好者梦梦寐以求之事。
本课时从宏的起源、发展开始,向同学们阐述宏的强大与隐患这把双面刃。
最后教学如何应对这些存在的隐患。
1.1宏的起源与发展
在1994年上市的Excel5.0版本中即具备了宏功能。
宏的出现大大提升了Excel用户的制表效率。
尽管第一版的宏功能简单,也没有录制功能,所以必须靠记忆才能学会宏的应用。
但是早期的宏也可以批量地完成某些工作,从而解脱双手。
在OFFICE多次升级过程中,宏也在逐渐强化,陆续添加了可自动执行的过程(包括Auto_Open宏和Auto_Close)、窗体、事件(用于全面替代早期的自动宏),以及更多的对象、属性和方法,甚至允许调用其它的任何具有开放接口的程序,集成了诸多有用的工具,包括正则表达式(regex)、文件系统对象(FSO)、API(应用程序编程接口)、字典(Dictionary)、磁盘管理系统(DOS)、注册表(Registry)等等。
附:
在后面的课程中大家会熟悉这些对象,目前不明白含义并不影响学习当前课程。
直到现在的VBA7.01版,VBA已经相当完善,能自动化的执行诸多操作,甚至实现无人值守的工作模式。
对于“无人值守”,用我的一次亲身经历略作说明。
四年前我曾做过半年报表汇总工作,每天将前一天的品检部、生产部和生管部报表整理到一个工作簿中,然后分组统计,并生成图表和透视表发送给经理。
以前的同事每天让三个部门的文员将报表发到邮箱中,然后打开三份报表并整理数据、生成总表,每天需要0.5到1小时。
当我接手该工作后,采用以下方式处理:
(1)在服务器的共享磁盘中创建一个名为“明细”的文件夹,让三个部门的同事将每天完工的明细报表都按今天的日期命名并保存到该文件夹中;
(2)在本地磁盘创建一个文件夹“模板”,其中存放一个用于汇总的模板工作簿,工作簿中采用VBA代码自动打开远程共享的明细文件,并按设定的流程全自动汇总报表,当“模板”文件夹中生成汇总表后将汇总结果自动复制一份到服务器中名为“总表”的共享文件夹中,文件以当天的日期命名。
图11即为文件汇总流程与文件夹之间的关系示意图:
图11文件夹关系示意图
(3)通知经理从服务器共享文件夹“汇总表”中提取今日汇总的报表。
由于汇总表中的VBA代码设置为打开报表时自动执行,它会到指定的文件夹中检查是否存在需要汇总的三份报表,以日期文件名作为判断标准,如果不存在则产生提示框,然后自动关闭文件;如果文件存在自动汇总报表数据,完成后在本机保存一份汇总表,同时另存一份到共享文件夹“总表”中,一切工作全自动进行,需要执行的只有一步——双击打开本机中的总表模板。
换言之,以往近1小时的工作现在只需要双击工作簿就完成了。
后来的某天,我因某些原因睡过了头,第二天早上9点多尚未起床,结果经理9:
00开会时需要报表。
当接通经理的电话后,在电话中告知经理汇总表已经完成,自己有事在外,并请经理打开我的电脑,从D盘中打开汇总表模板查看即可。
其实当经理打开该模板时,代码才开始运行,数秒钟后自动汇总完毕,并生成一个汇总表。
换言之,某些工作借助VBA可以实现无人值守,让代码全自动执行,从而解脱双手。
这正是VBA的魅力。
1.2宏的安全隐患
不过,VBA在发展的同时也带了隐患——在90年代末期,由于宏具有自动化功能,所以也为病毒开发了一扇小窗,曾经宏病毒的泛滥给万千Excel用户造成了无穷的困扰。
后来微软公司被迫修改了宏的默认安全性设置——默认情况下禁止运行宏,手动单击按钮才可运行。
至此宏病毒已消声逽迹了多年。
不过在2012年下半年开始,又出了几个新的宏病毒,因为近几年Exce用户群体发展壮大较快,用户日益增多,同时由于宏病毒多年不再重现江湖,大家已开始放松了警惕。
所以去年新病毒刚开出来,就成千上万的用户中招,包括我自己所在的公司。
1.3当前几个宏病毒的特征
目前而言,几个较流行的宏病毒包括StartUp、results、Book1、Module1、K4。
其中K4病毒应该是EH一个会员开发的。
这也是五个宏病毒中稍有技术含量的一个。
不过,当你明白宏病毒的工作原理后,其实自己要开发很简单,当然要杀掉它就更简单。
先看看几个病毒都有哪些特征(不完全分析)以及使用了哪些VBA技术。
1.3.1病毒特征
就目前个人所看到的几个宏病毒而已,都没有什么破坏性,仅仅恶作剧而已,不会清除用户文件、不会格式化磁盘、不会收集用户登录过的网页注册信息等等。
对于恶作剧,主要体现在四方面。
其一:
禁用一些VBA功能,包括【Alt+F8】、【Alt+F11】等VBA用户必用的组合键。
其二:
在每个打开的工作簿中创建一个隐藏的工作表,工作表名称根据病毒不同而不同,通常是StartUp、Module1、pldt、laroux、Macro1、XL4Poppy等名字。
如果你当前的工作簿中包含这些工作表,且处于隐藏状态,那么十有七八是中了宏病毒。
其三:
在微软定义的自启动路径下创建一个含有病毒的工作簿,工作簿名称根据病毒不同而不同,通常是Startup.xls、k4.xls、Meralco.xls、Results.xls或者Binv.xls。
所以每次打开Excel软件时,这些病毒都会自动运行。
其四:
病毒代码具有自动复制的功能,通常会把病毒工作簿中的VBA代码复制到每一个打开的工作簿中,从而确保病毒可以继续扩散。
现在也有了一些变种、升级,新版的病毒加了每秒钟复制一次代码的操作,从而确保代码不会被破坏。
当然,中了病毒后的另个一个表现就是打开和关闭Excel都变慢了。
不过它不是病毒的特征,也不是开发病毒者的目的,而是病毒代码运行需要时间,并非开发者的目的是想让中毒者操作变慢。
从以上分析,其实病毒并没有任何破坏力,仅仅把代码复制到每一个工作簿中,使其能随时运行而已,在运行过程中不做任何数据破坏。
只不过,病毒往往会会遭到用户的干扰,从而不能正常运行,在不能正常运行的情况下反而表现出一定的破坏性。
这听起来有些矛盾,但现实就是如此。
简言之:
病毒正常运行的前提下对用户没有干扰,而在用户想法去阻止病毒,但又没有阻止彻底的情况下,病毒反而就体现出一定的破坏性了。
简单举三个案例吧:
其一,为了禁止病毒运行,用户将通过调整宏安全性来阻止病毒运行,但又没有在阻止的同时禁止提示,从而造成每次打开有宏病毒的工作簿时都弹出一个提示框,给用户带来困扰。
图12安全警告
其二:
宏病毒将切换工作表和【Alt+F8】、【Alt+F11】两个组合键都绑定了病毒代码,也就是说执行这三个操作都会执行代码。
如果用户仅仅手工清除代码,却没有使用代码来恢复这3个操作的原始功能,那么执行这三种操作时都会弹出以下提示:
图13未正确修复Excel时弹出的提示
其三:
手工删除了宏病毒代码所创建的宏表“Macro1”,但却没有清除调用宏表中的代码的名称,导至开启Excel时仍然会调用宏表“Macro1”中的代码,但由于该表已不存在,所以必定执行失败,从而弹出相应的提示。
图14未正确修复Excel时弹出的提示
这在一定程度上也算是一种破坏,只不过这不是病毒预设的操作,而是用户在破坏病毒时,破坏不完整、不彻底带来的副作用。
所以,除非您自己对VBA比较了解,可以自己手工清除病毒,并用代码正确地恢复被绑架了的几个功能,否则还不如不理会病毒,让它继续存在。
当然,最好的办法用比较成熟的工具来查杀。
当你我熟练掌握VBA后,都可以发开查杀宏病毒的工具。
1.3.2宏病毒所使用的VBA技术
就目前的几个宏病毒而言,并没有做什么破坏,但是它为了自我保护,要让代码自动扩散,所以需要使用一些VBA的自动化技术。
而这些技术本身是有很用的,大家不要排斥。
这就像菜刀一样,刀本身就没有错,只看你怎么用而已。
上面提到了5种宏病毒,由于时间关系,只分析一下第一种:
StartUp病毒,其它的几种大同小异。
StartUp病毒使用了以下几项关键技术:
1.传染代码到每一个打开的工作簿,所以创建了一个名为“ycop”的过程,在过程中将病毒工作表复制当前打开的工作簿中。
同时为了确保这个过程能自动执行,它采用了三句代码:
Application.OnSheetActivate="StartUp.xls!
ycop"
Application.OnKey"%{F11}","StartUp.xls!
escape"
Application.OnKey"%{F8}","StartUp.xls!
escape"
第一句表示每次切换工作簿都自运调用这个过程,从而复制病毒文件;第二句表示按下组合键【Alt+F11】想查看病毒代码时,无法查看到代码,而变成了执行病毒代码;第三句表示用户按下组合键【Alt+F8】想运行自己的代码来查杀病毒时,它能阻止用户运行自己的代码,同时变成执行病毒代码……想想是否可怕?
自己在主动调用病毒。
不过,这其实全是VBA的基本功能,将它们用在其它地方可以大大的方便工作。
另外,如果用户了解VBA,那么宏病毒在面你将无所遁形,瞬间消除它。
这叫知己知彼、百战不殆。
2.使用了定时执行的功能,即Application.OnTime方法,从而使病毒每一秒钟执行一次。
Application.OnTimeNow+TimeValue("00:
00:
01"),"StartUp.xls!
ycop"
3.使用了循环语句,逐个检查工作簿中是否存在名为“StartUp”的工作表,没有就复制一个过去。
4.使用了自启动宏,即过程命名为“Auto_open”。
微软规定只要模块中的不带参数的Sub过程命名为“Auto_open”,那么它就会在打开工作簿时自动执行。
病毒利用了这个规则来实现病毒的自动扩散。
5.使用了安全的自启动路径——StartupPath。
StartupPath这个路径是一个可以自动启动的、且相对安全的路径,也就是说一个病毒保存在这个文件夹中后,每次打开Excel都会自动打开病毒文件,而且微软认为这个路径下的文件是安全的,所以不会阻止打开,即使你将宏的安全性设为最高。
以下代码就是病毒代码:
ActiveWorkbook.SaveAs(Application.StartupPath&"\"&"StartUp.xls")
当你明白这些原理后,其实杀宏病毒就如探囊取物般轻松,主要包括:
使用循环语句清除当前所打开的所有工作簿中的指定名称的模块、指定名称的工作表,再使用代码恢复被绑架的三种操作(Application.OnSheetActivate、【Alt+F11】和【Alt+F8】),以及清除自启动路径(StartupPath)下的病毒文件。
Excel百宝箱中就有病毒查找功能:
图15Excel百宝箱
不过百宝箱为了不影响启用效率,没有设置为启动Excel时自动查杀,而手发现病毒时单击功能区中的“宏病毒专杀”按钮执行查杀。
附:
本课并不提供完整的病毒代码以及查杀代码,当你学会VBA后,这些知识其实都是初中级知识而已,一点都不高深和神秘,到时你会发现所谓的宏病毒其实不过尔尔,开发和查杀都没有想象中难。
2.了解ExcelVBA的信任中心
在学习VBA之前,有必要了解宏的安全性设置选项,在Excel2010中称之为信任中心。
打开信任中心的方法如下:
1.使用组合键【Alt+T+O】打开“Excel选项”对话框。
2.进入“自定义功能区”选项卡,将右边的“开发工具”打勾。
图21添加开发工具
然后返回工作表界面,就能看到“开发工具”选项卡了。
图22功能区中的开发工具
3.单击“开发工具”选项卡中的“宏安全性”菜单可以打开Excel的“信任中心”对话框。
图23通过“宏安全性”按钮打开“信任中心”
图24信任中心
在“信任中心”对话框中可以执行与宏的安全性相关的设置。
其中有几个较重要的设置选项:
受信任的位置、加载项、ActiveX设置、宏设置、受保护的视图、消息栏、文件阻止设置
2.1受信任的位置
受信任的位置表示此处所指定的路径是安全路径,不管如何设置宏的安全性,执行此路径下的文件都不会弹出提示“是不启用宏”或者“宏已被禁用”之类的提示。
2.1预设的受信任位置
Excel已经分配了一些受信任的路径,包括存放模板、存放加载项的路径,以及3个自启动路径。
上图中包含默认的受信任路径。
以下提供四句代码可以打开其中4个路径,将文件放到这些路径中后,打开文件就不再弹出提示(不管如何设置宏的安全性),相当于给文件开放安全通道。
Subtest()'打开受信任文件夹
Shell"explorer.exe"&Application.StartupPath,vbMaximizedFocus
Shell"explorer.exe"&Application.LibraryPath,vbMaximizedFocus
Shell"explorer.exe"&Application.TemplatesPath,vbMaximizedFocus
Shell"explorer.exe"&Application.Path&"\xlstart",vbMaximizedFocus
EndSub
代码中的Application代表Excel应用程序,Application.StartupPath代表用户自启动文件夹的完整路径。
explorer.exe代表资源管理器,我们常用的快捷键“Win+E”键打开我的电脑,其中字母E就来自explorer.exe的首字母,表示打开资源管理器。
也可以在开始菜单中打开“运行”,然后输入命令explorer.exe,单击回车键后就能打开资源理器。
在VBA中,当explorer.exe命令作为Shell函数的参数时就实现了VBA代码打开资源管理器。
如果在explorer.exe后面带参数(文件夹路径)那么就能打开文件夹,不过要注意explorer.exe和路径之间需要有一个空格。
例如:
Sub打开c盘的windows()
Shell"explorer.exec:
\windows\",vbMaximizedFocus
EndSub
Shell的第二参数vbMaximizedFocus表示将打开的窗口最大化。
关于Shell的详细说明可以在VBA的帮助中看到,操作方法如下:
(1)使用【Alt+F11】组合键打开VBA的代码录入界面;
(2)按【F1】快捷键调用VBA的帮助;
(3)在顶端的查询框中录入shell,然后单击回键,将看到与shell相关的所有词条;
(4)单击第一条“Shell函数”即可,下图是最终的帮助界面:
图25Shell函数的帮助
2.2添加新位置
“添加新位置”按钮表示设置新的路径,让Excel也信任此路径下的文件。
请大家跟着我操作(以下为手动操作练习)
……
前面的操作结果可以实现带有宏代码的文件保存在此路径后,打开时不弹出提示,不管宏的安全性如何设置,但是将文件放置在其它位置就会有提示。
2.2加载项
Excel的加载项是指将VBA代码封装后的文件,通常是Dll格式或者ocx格式。
Excel百宝箱就是一个加载项,使用VBA开发,利用VB6.0封装成DLL格式。
安装过Excel百宝箱的同学就知道,文件的外观如下图所示:
图26Dll格式的加载项
在本人的VBA入门图书《ExcelVBA程序开发自学宝典(第2版)》中第29章即为关于制作加载项的教学。
“信任中心”中的加载项选项卡用于控制加载项能否自动运行。
如果将“要求受信任的发布者签署应用程序加载项”打勾,那么所有加载项都会被阻止运行。
图27禁止加载项自动运行
图28关于加载项的安全警告
当你安装了Excel百宝箱或者其它DLL格式的工具后,若发现有上图中的提示,那么表明你的信任中心有阻止加载项运行的设置。
加载项选项仅对COM加载项有效,对于Xla和xlam格式的加载宏无效。
通常大家在设置Excel选项时,仅仅调置“宏设置”选项卡中的项目,而忽略了加载项,所以往往会发现不管怎么调,插件总能正常运行。
2.3ActiveX设置
ActiveX设置控制着ActiveX控件的可用与否。
设置界面如下图:
图29ActiveX设置
当选择“禁用所有控件,并且不通知”后,那么ActiveX控件将无法使用。
ActiveX控件处于“开发工具”→“插入”→“ActiveX”控件,见下图:
图210ActiveX控件
当插入ActiveX控件时,将弹出以下提示:
图211禁用ActiveX控件后不能使用ActiveX控件
默认选择第3项即可。
2.4宏设置
宏设置对宏有效,对加载宏和加载项无效。
这里所讲的宏就是大家平时所使用的VBA代码,而加载项与加载宏已经属于插件,属于工具了。
图212宏设置
宏设置选项卡中包括5项内容:
●禁用所有宏,并且不通知
它表示打开工作簿时不允许执行其中的代码,而且也不通知用户。
除非永远不打算侃用VBA,否则不要选择这一项。
它的好处是彻底禁止了宏病毒,不再受任何干扰,坏处是自己的代码无法再使用。
●禁用所有宏,并发出通知
它表示禁止执行宏代码,但是会在开启工作簿时弹出提示,用户可以根据提示选择是否让宏代码执行。
选择此项的好处是安全,但比较烦人,每次打开有宏的工作簿都有提示。
●禁用无数字签署的所有宏
事实上,每个人编的程序都没有数字签署,要使用数字签署是相当繁琐的事。
所以此项一般也不选择。
●启用所有宏
此选项表示允许任意宏代码执行,好处是方便,坏处是假设接收到有病毒代码的工作簿时也将病毒一并执行了。
具体选择哪一项,可以根据需求设置。
如果你较看重安全就选择“用所有宏,并发出通知”,如果你更看重便方便性,就选择“启用所有宏”。
那么是否“启用所有宏”就一定不安全呢?
当你学会了VBA后就不存在任何安全性问题了。
即使只学了一两个月,也足以判断代码是否存在破坏性,第一次打开工作簿时,按住Shift键打开,从而阻止宏运行,然后进入VBE窗口查看代码,如果没有破坏性,以后就直接打开。
所以“启用所有宏”也不会有问题
大家请跟我操作,测试按住Shift键打开文件的效果(以下是手工操作过程)。
……
2.5受保护的视图
受保护的视图用于控制打开网络文件时是否允许直接编辑文件。
网络文件指论坛下载时直接打开的文件、直接从邮件中打开的文件和直接从远程共享文件夹中打开的文件。
默认情况下,所有网络文件都不允行直接编辑,下图是Excel的默认设置情况:
图213受保护的视图
在默认设置下打开网络文件时将弹出下图所示的提示:
图214受保护的视图
当看到这种提示时,单击“启用编辑”即可。
2.6消息栏
消息栏选项卡中控制着消息是否显示出来,默认设置是允许显示提示消息,不需要修改。
2.7文件阻止设置
文件阻止设置表示阻止打开一些早期版本的工作簿。
工作中有时会发现一个文件用Excel2007和2003都能打开,但用Excel2010无法打开,其实就是这里阻止打开早期的文件。
可以根据个人需求修改这里的设置。
设共有开,但用E0着消息是否显示出灭害辑,禁直接从远程珙享文件夹________________________________________________________________________________________________
3.让自己的程序畅通无阻
如果既想要安全,确保宏病毒无法运行,又想要方便自己编程,每次打开自己的文件时都可以正常执行,是否有办法呢?
Excel已经提供了相应的办法!
方法如下:
1.在宏设置中将“禁用所有宏,并且不通知”打勾。
2.在受信任位置中添加一个受信任的文件夹,且将“同时信任此位置的子文件夹”也打勾。
3.将自己的文件保存在受信任的文件夹中。
如此设置后,双击打开自己的文件时,代码可以正常执行,也不弹出提示。
若打开其他人的文件则不执行文件中的代码。
不过如果信任他人提供的代码,那么将该文件复制到指定的文件夹中再打开即可。
附件中有一个名为“Test.xls”的文件,大家可以将它放在受信任文件夹中和受信任文件之外分别双击打开文件,了解两种打开方式的分别。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第二课 安全选项 第二 安全 选项