关于acad.lsp病毒一下内容虽不是原创,但经历过,,对于病毒产生的机理分析得很透彻,有有助于网友们提高acad水平。
-- 关于AutoCAD中的LISP病毒
目前CADr14有一种lisp代码具备病毒的特征,有一定危害
具体情况如下:
在有DWG文件里如果带有ACAD.LSP双击打开DWG文件,就会自动加载这个lisp,
此lisp的功能是:
加载后炸开命令 外部引用等命令失效。并且可传染:
加载后在你SUPPORT目录下生成一个ACADAPP.lsp,在ACAD.mnl添加(LOAD "ACADAPP") (PRINC)
这样以后你打开acad就自动加载了ACADAPP,它在你每个操作过的acad图形文件的文件夹下生成带恶意代码的ACAD.LSP
这样如果你复制整个文件夹,或者通过局域网打开图形,就会导致在不同的机器内传染。
问题现象:
EXPLODE命令失效(同时还有XREF、XBIND);
每个编辑过dwg文件的目录下面都会有一个acad.lsp;
保存至另一目录时也同时产生acad.lsp;
打开别人的文件时,如果该目录下有acad.lsp,那么你必中招。
解决办法一: Autocad\\support\\下建立一个acad.lsp的空白文件,并将文件属性置为只读,你自己不会具有二次传染性,可以阻止病毒的扩散.如果中毒就删掉图形目录下的acad.lsp,最好进行网络全体搜索清除清除。
解决方法二:
用.Explode(在命令前加小数点“.”)可以分解;
删除所有这些acad.lsp文件。
解决方法三:
有个免疫设置的方法,将support目录下的ACAD.lsp设为只读,如果有ACADAPP.lsp就清空后也将其设为只读。
病毒名称 Harm.Bursted
该病毒是使用绘图软件:AutoCAD的内嵌脚本语言的写成,
文件名为:"acad.lsp" 可由AutoCAD启动时自动执行,但它不影响图形文件。
此病毒使AutoCAD的内部命令-EXPLODE, XREF 和 XBIND无效,并定义一个新的命令 BRUST,此命令将
显示如下消息:
BURST----将图块中的文字炸开后成为实体
中了病毒"ASL.Bursted.A"病毒之解決方案
我的電腦昨日中毒
諾頓掃描後顯示說
D:\RECYCLER\S-1-5-21-299502267-2139871995-726345543-1003\Dd44.rar感染ASL.Bursted.A病毒
我從網路上各網站找沒有確切的方案有的說刪掉該檔案<有的提供出殺毒小軟件但均無法刪除
但我從各論壇的的二次開發看到一段很重要的話
ACAD有个很大的优点就是开放性它有很多开放的接口
这给用户自定义以及第三方二次开发提供了极大的方便。
ACAD用户化门槛不算高只要有兴趣、有些耐心你总可以亲自动手不同程度地进行自定义。
马上要讨论的是关于启动自动化的AUTOLISP接口,这个接口现在被人用来搞了点恶作剧。
我花了1天的結果,找出解決方案了試驗如下必須對症下藥-
1.卸載AUTO CAD及其相關軟體
2.使用"Always Right"清理移除軟體及接口之軟體來清除
上述清除工作完成再重新按裝auto cad軟體
4.再行掃描已無中毒情形了
先给不了解LSP的同志稍微铺垫一下。
ACAD有个很大的优点,就是开放性,它有很多开放的接口,这给用户自定义以及第三方二次开发提供了极大的方便。ACAD用户化门槛不算高,只要有兴趣、有些耐心,你总可以亲自动手不同程度地进行自定义。
马上要讨论的是关于启动自动化的AUTOLISP接口,这个接口现在被人用来搞了点恶作剧。
在ACAD启动或开图时会被自动加载的LSP文件
浅见,这种LSP包括:
ACAD.LSP,新装的纯ACAD里面没有这个文件。一般由用户自己编写或者第三方软件提供,放在ACAD目录或SUPPORT子夹都可以。
ACADR$.LSP,$是系统版本号,比如ACADR14.LSP,在SUPPORT子夹。
还有一种先不说了.
加载时自动运行的由defun函数定义的函数名
就一种,S::STARTUP,它和ACAD.LSP配套,同时不支持其他扩展名为LSP的文件
可能是因为这个原因,目标被定位于ACAD.LSP? 不知道了,其实不一定非用S::STARTUP,用了那就说明这位大虾是个追求完美的人~
铺垫好了,来看看这个病毒acad.lsp的作用~
{00.定义自动函数S::STARTUP
{01.获取CMDECHO变量,改设为0,一般程序最后会再改回去,
目的是悄悄地进村打枪地不要.大家都喜欢这么干 }
{02.通过搜索base.dcl文件,获取ACAD安装路径(support子夹) }
{03.获取菜单文件完整路径和名称,后来又没用~}
{04.获取当前图形文件完整路径和名称,截取当前工作路径}
{05.获取当前首选ACAD.LSP文件完整路径和名称,截取其路径}
{06.预设程序标记变量LSPBJ为0,意思是假设还没得手}
{07.用只读方式打开support中的ACAD.LSP,如文件不存在则建立同名文件
逐行检查此ACAD.LSP文件内容,一旦发现某行开头为(load "acadapp")
则设程序标记变量LSPBJ为1,表示已经得手过
只读任务结束,关闭文件}
{08.如果找到的ACAD.LSP路径和当前工作路径不同,
并且不在ACAD\support里面,则
{如果LSPBJ为0,也即尚未得手,那么
就在ACAD\support\acad.lsp文件末尾添加(load "acadapp")(princ),
即ACAD启动或开图时自动加载acadapp.lsp并隐蔽命令行反应。
然后同路径创建acadapp.lsp文件,作为刚改过的acad.lsp的备份. }
{如果LSPBJ为1,即已得手,且当前绘图不是未命名的新绘图任务,则
用复写ACAD\support\acadapp.lsp的方式
在当前工作路径创建acad.lsp. }
}
;注:到此为止,ACAD启动时必搜的程序文件路径里面都放好了此acad.lsp!
{09.程序开始做真正让大家不愉快的事情,
它取消了3个系统预设的命令名: 不止explode, 还有xref和xbind
可能因为Xref和xbind不是每个人都常用,所以好象报案的不多,
而explode几乎是所有用ACAD画图的人都难以避免使用的,就显得很典型}
S::STARTUP函数定义结束}
还没完,前面取消了那3个命令的定义,现在要重新定义它们,幸好这位大虾良心不算坏,只是让命令不起作用或者改成其他加法命令,并没写成破坏性函数或OS命令
EXPLODE的新功能和交互情况是:
command: EXPLODE
Seltct objects: 200 found
Select objects:
200 was not able to be explode
command:
随你怎么选,它就是说炸不了
然后XREF和XBIND这对难兄难弟双双被改成了insert,交互响应制作很不精良,根本就是空白,可能大虾忽然觉得倦了吧.
最后,它还重新定义了BONUS和EXPRESS TOOLS工具集里面提供的BURST命令,其实是个外部函数(c:burst)
BURST原来的用途是"Explode Attributes to Text",把属性文本炸成text类物体
被重新定义后这样:
command: BURST
BURST----将图块中的文字炸开后成为实体
Select objects: 200 found
Select objects:
command:
ACAD的支持文件搜索路径(Support file search path)
ACAD在启动或开新图的时候,在程序进入ready状态前,首先会到支持文件搜索路径里面寻找系统需要的资源,在必须使用的东西全部找齐后,我们才有机会正常开始画图。这种路径分2种:
A、在preferences命令对话框的files分页最上面一项可以看到,一般新装的纯ACAD的这种路径包括support[外部命令、函数,图案、线形等资源库等]、fonts[ACAD专用字库、不包括TRUETYPE字体]、help[帮助文档],还可以有bonus\cadtools[bonus资源,选装].通常*.lsp文件都集中在support子夹。
B、当前工作路径,就是现在刚打开的那张图的存放位置。
acadapp.lsp并不是系统保留的文件名,虽然样子很酷,其实它就是被感染的标志,当然,这个标志不如到处都是acad.lsp那么壮观
现在可以分析大家是怎么感染的了。
用已经感染的ACAD系统画图
根据上文08:
{如果LSPBJ为1,即已得手,且当前绘图不是未命名的新绘图任务,则
用复写ACAD\support\acadapp.lsp的方式
在当前工作路径创建acad.lsp. }
这就是说,在这种情况下,它把已经被感染的CAD系统里面的acadapp.lsp克隆到当前工作路径,名字就叫acad.lsp
不小心工作路径里面混进了那个acad.lsp文件
一旦出现这种情况,即便你的ACAD原来是干净的,也瞬间就被做掉了。
还是根据上文08:
{如果LSPBJ为0,也即尚未得手,那么
就在ACAD\support\acad.lsp文件末尾添加(load "acadapp")(princ),
即ACAD启动或开图时自动加载acadapp.lsp并隐蔽命令行反应。
然后同路径创建acadapp.lsp文件,作为刚改过的acad.lsp的备份. }
克隆这个acad.lsp到ACAD\support,名字改成acadapp.lsp,通过acad.lsp自动加载它。
注意,上面的自动加载acad.lsp和这里的通过acad.lsp加载acadapp.lsp效果都是一样的。
那么,怎么就被这个acad.lsp给混进了工作路径呢?
可能性有很多,比如你通过局域网跟别人共享同个文件夹里面的dwg文件,不幸你的同伴的ACAD先感染了;或者用移动盘在别人,尤其打图公司,那里画图甚至只是开图,不幸别人的ACAD已经感染了,等等
这大段代码的自我复制原理很简单。从上面概括下来就是:你的机器是干净的,它[工作路径里的acad.lsp]就把自己复制到ACAD目录;你的机器是感染的,它[support里的acadapp.lsp]就把自己复制到工作路径。只是名字有点变化,被复制的代码是一样的。
补充楼上说的关于杀毒、防毒的办法:如果确认未被感染,那么把自己的原来的support\acad.lsp(没有就建一个空文本文件,改成这名字,注意确信改掉扩展名)文件改成只读属性;如果已感染,请采用mnhyyl 兄说的办法清除,之后再做前面的步骤(只读acad.lsp);同时安装多个CAD版本的要分别打“只读补丁”。
听说ACAD2000上就有VBA做的病毒。现在讨论的这个诚如“一般不管闲事”女士/先生/同志/朋友所说,只是在Lisp上做了些文章。是我看走眼了。
删除所有acad.lsp当然可以解决,但未免有些滥杀无辜。如果能下决心跟它和平相处的话,就到放base.dcl的目录下,打开acad.lsp,删除这样的两段:
(command "undefine" "explode")
(command "undefine" "xref")
(command "undefine" "xbind")
以及从
(defun C:explode (/ p cont old_cmd)
到末尾的(princ)之前的
)
以后开图应该不会有问题了,当然已经感染的目录下的acad.lsp还是要删除。另一个好处是:在ACAD程序目录里留下的这个acad.lsp可以当疫苗,估计是终身免疫的。不过我没有试过,如果不灵权当“疗妒汤”了。
最近一段时间论坛关于acad.lsp病毒的消息较多,其实平时养成良好的习惯,是完全可以杜绝的。
1.不随便将目录(含cad图纸)拷入本机;不要盲目打开目录下含有acad.lsp文件的图纸。
2.经常升级自己的病毒库。
3.推荐使用acad2000以上版本,内含程序组加载程序,杜绝了acad.lsp的存在。
4.中了acad.lsp病毒也不要害怕,该病毒本身没有什么危害性,只是炸开命令不能用了,可以使用xplode替代。
还是把acad.lsp和acadapp.lsp改为只读比较好
现在好多好多的设计院都反映中了lisp病毒——acad.lisp还附带acad.doc。中毒现象就是不能炸开块,不能用insert命令等等。
各路高手看看怎么能解决这个问题呀,瑞星查不出来,金山不置可否,KV倒是能查出来,但是过一会儿病毒还回来。手动删除的效果也不好。救命呀!!!
还有,大家能解释一下原因么,有说这个病毒是韩国过来的?
该病毒并不可怕。给你一种最简单的清除方法吧,赶快在你单位的所有计算机中(切记是所有计算机),搜索查硬盘内所有名为acad.lsp的文件和acadapp.lsp的文件,并将它们全部删除即可。
acadapp.lsp跟acad.lsp一样也是病毒,它是acad.lsp运行时自动生成的。
这是一个专门针对CAD的病毒程序,不是传统意义上的病毒,因此,用诺顿、金山毒霸等是不能杀除的。它的作用机制是这样的: 某台机器上没有这个病毒程序,在通过网上邻居拷贝别人的图纸时,大家经常会把整个目录拷贝过来,如果拷贝的这个目录中包含有acad.lsp和acadapp.lsp,你的机器就有了这个病毒,但是还没有起作用。当你用CAD打开这个文件时,CAD会自动加载该目录下的acad.lsp,这个LSP程序会检测你的CAD支持support目录下是否有这两个文件,如果没有,它会自动在那里创建他们的副本。以后,在你打开别的图纸时,它会在判断你要打开的图纸目录下有没有这两个文件,如果没有,它又在该目录下创建这两个文件的副本。就这样,你的机器上的dwg文件目录中逐步都有了这个程序。随着别人按照目录拷贝你的dwg文件,他们也感染上了。因此,如果你的机器上没有CAD病毒程序,只要你从别处拷贝图纸时,只拷贝dwg文件就不会感染CAD病毒了。 |
|