林霄云 发表于 2014-1-12 18:43:02

acaddoc.lsp病毒破防(重磅解析源码级别)

acaddoc.lsp病毒破防
定义:
acaddoc.lsp病毒,其实不够资格叫病毒,只能说是利用程序自动加载的特点的恶意代码。其感染其他lisp文件一般设置开头标识,采用追加方式(算是业界良心了)。
破点:
acaddoc.lsp是lisp源码文本文件,故其是可解析破解的(当然这要有多无聊才做的事情)。而其升级版本是用fas保存源码,但在acaddoc.lsp至少存在加载语句。(做lisp恶意代码也是要多无聊才做的事情)
防点:
一般代码,避免无限次复制自己,都设置了标识。利用这个标识,可以作为代码欺骗防止感染。
我是有多无聊——还写贴说破防
粗暴做法一,全盘扫描,查杀之,但对于在服务器上画图,且有读写权限设置的情况下,是会次次感染的。
粗暴做法二,对感染目标文件设置只读属性。程序不写入文件,也写入了内存。治标之策而已。

精确破防:
本人恰好遇到两个acaddoc.lsp病毒,花了些时间破解了。病毒文件不会上传的。
不细说,直接上代码;解决病毒一

;此处插入删除当前目录下的acad.fas,acaddoc.lsp
(if (and acaddocpath (setq virus-file (findfile (strcat acaddocpath "\\acad.fas"))))
(progn(attset virus-file 0)
(if (vl-file-deletevirus-file) (princ (strcat virus-file "删除\n")));先删除acad.fas
));if

(if (and acaddocpath (setq virus-file (findfile (strcat acaddocpath "\\acaddoc.lsp"))))
(progn(attset virus-file 0)
(if (vl-file-deletevirus-file) (princ (strcat virus-file "删除\n")));先删除acad.fas
));if

;删除临时文件夹里acaddoc.lsp 和 menuname所定位置的acad.mnl acaddoc.lsp
(setq mnlpth (getvar "menuname"))
(setq dwgpre (getvar "dwgprefix"))

(if (setq virus-file (findfile (strcat dwgpre "acaddoc.lsp")))
(progn(attset virus-file 0)
(if (vl-file-deletevirus-file) (princ (strcat virus-file "删除\n")));先删除acaddoc.lsp
));if

(if (setq virus-file (findfile (strcat mnlpth ".mnl")))
(progn(attset virus-file 0)
(if (vl-file-deletevirus-file) (princ (strcat virus-file "删除\n")));先删除acaddoc.lsp
));if

(if (setq virus-file (findfile (strcat mnlpth "doc.lsp")))
(progn(attset virus-file 0)
(if (vl-file-deletevirus-file) (princ (strcat virus-file "删除\n")));先删除acaddoc.lsp
));if其中函数 attset 是病毒自带的(还写错了),设置文件属性作用——利用文件系统对象,本人修正,奉上(defun attset (fp code / fp1 )
(if (and fp (/= "" fp) code)
    (progn (vl-load-com)
    (vlax-put-property
      (setq fp1 (vlax-invoke-method
      (vlax-create-object "Scripting.FileSystemObject")
      'GetFile
      fp
          )
      )
      'Attributes
      code
    )
   (vlax-release-object fp1);源代码此句放置在if外,逻辑错误
   );progn
);if

);defun需要这个属性设置函数将要删的文件属性设置为0.
同时,给一个attget函数,获取文件属性值。用于设置只读的文件需要追加标识的时候。(defun attget (fp / fp1 attr)
(if(and fp (/= "" fp) )
    (progn (vl-load-com)
    (setq attr (vlax-get-property
      (setq fp1 (vlax-invoke-method
      (vlax-create-object "Scripting.FileSystemObject")
      'GetFile
      fp
          )
      )
      'Attributes
          ));setq attr
      (vlax-release-object fp1)
    )
)
    attr
);defun解决病毒一里提供的目录都是根据病毒源文件调整的,是精确破杀。此文其同时解决了病毒二的源文件
接下来是设置防毒标识
子程序app(target bz) 源代码详见附件
1,根据标识代码,检查目标文件target,如果有标识,且其后还有多行代码,则说明此中毒已深,修复之。否则提示已经修复。
2,如果没有标识,则设置标识。在追加方式打开target之前,读取其文件的属性,不判断,直接设置属性为0,追加后,再将属性改回去。
主程序 killvirus
根据病毒源代码的感染方式,主要是获取其感染目录,进行防毒。(setq bz "(setq flagx t)") ;bz为标识,为病毒开头

(if (setq acadmnl (findfile "acad.mnl"));寻找acad.mnl
(progn
(setq acadmnlpath (vl-filename-directory acadmnl))
(setq mnlfilelist (vl-directory-files acadmnlpath "*.mnl"));取得该文件下的所有mnl文件。生成文件名列表,存为mnlfilelist中。
(setq mnlnum (length mnlfilelist));mnlnum为mnl文件个数。
));if
(setq acadexe (findfile "acad.exe"))
(setq acadpath (vl-filename-directory acadexe))
(setq support (strcat acadpath "\\support"));在acad.exe目录下进入support文件夹
(setq lspfilelist (vl-directory-files support "*.lsp"))
;(setq lspfilelist (append lspfilelist (list "acaddoc.lsp")))
(setq lspnum (length lspfilelist));lspnum为support文件夹下lsp文件个数。

(if dwgpath
(progn
   
    (if mnlnum
      (progn
    (setq mnln 0);mnln为序数,对上述mnl路径下的所有mnl进行感染操作。
    (while (< mnln mnlnum)
      (setq mnlfilename (strcat acadmnlpath "\\" (nth mnln mnlfilelist)));mnlfilename为感染目标,全名。
      
      (app mnlfilename bz);
      (setq mnln (1+ mnln))
      );while
    (princ (strcat "\n检查mnl文件数:"(itoa mnlnum)));退出循环时,输出检查文件数
      ));if mnlnum

    (if lspnum
      (progn
    (setq lspn 0)
    (while (< lspn lspnum)
      (setq lspfilename (strcat support "\\" (nth lspn lspfilelist)))
      
      (app lspfilename bz)
      (setq lspn (1+ lspn))
      );while
   (princ (strcat "\n检查lsp文件数:"(itoa lspnum)));退出循环时,输出检查文件数
    ));if lspnum
   
);progn
);if
(princ)结果:本代码成功通过测试。详附图。
结论:
autocad2014已经设置acaddoc.lsp自动加载的控制变量。
鉴于acaddoc.lsp加载次序在acad20xxdoc.lsp之后,可以设置自动加载(load "killvirus.lsp"),由于其精确破防,增加的加载时间,是可以忽略的。

guohq 发表于 2015-11-11 09:15:19

再来一贴:
病毒载体文件:ACAD.VLX。该文件本身为 ACAD的自动加载机制的一个固定名称的自动加载文件,病毒伪装成合法文件搞鬼。
感染方式:打开一幅DWG时,ACAD.VLX 如与DWG在一个目录,则ACAD.VLX被自动加载;
         加载后动作:
            (1) 将自身复制为 {ACADSysPath}\Help\ LOGO.GIF,伪装成图片文件。
            (2) 寻找另一个自动加载文件(优先级比自身高?),如AI_UTILS.LSP,将一行代码嵌入其中,代码行为:
          (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)))
         意为将 LOGO.GIF 拷贝为 ACAD.VLX(且复制的目标路径为CAD的当前路径),作用为完成自身复制,用于传染。

破坏性:ACAD.VLX本身为自动加载文件,会屏蔽系统的其它自动加载文件。

ljxkm 发表于 2019-9-8 22:13:51

有病毒杀就完了,没必要说的那么透,双刃剑哈

水仙的错 发表于 2019-9-8 19:47:05

下载下来看看,不知道能不能防毒

linjian257 发表于 2014-1-12 19:12:15

好,学习一下,可以防病毒,我以前都是设置只读来防御的

林霄云 发表于 2014-1-12 20:03:41

linjian257 发表于 2014-1-12 19:12 static/image/common/back.gif
好,学习一下,可以防病毒,我以前都是设置只读来防御的

我遇到的病毒,是如果是只读属性,追加的病毒源码会在cad命令窗口中加载。只是不能感染了。传播还是会的。
以前没遇到,现在遇到了,就解决了,顺便写贴告知

lihuanqing 发表于 2014-1-13 14:11:22

vl-file-delete不能删除隐含文件,所以该方法有漏洞

ll_j 发表于 2014-1-13 14:36:09

值得鼓励但不完全靠谱的方法。
楼主知道ALisp病毒有多少变种么?至少我不知道。可以说,只要有点ALisp知识,只要够卑鄙,谁都可以修改,所以,没有一个万能的破解方案。
见过文件名叫做acad.vlx的病毒么?见过文件名叫做acadappp.lsp的病毒么?见过文件名叫做logo.gif的病毒么?知道病毒对acad.mnl做了些什么么?等等等等。

林霄云 发表于 2014-1-13 16:18:49

lihuanqing 发表于 2014-1-13 14:11 static/image/common/back.gif
vl-file-delete不能删除隐含文件,所以该方法有漏洞

没有仔细看代码啊,调用了属性设置函数,再调用vl-file-delete。原理上,只要有权限修改属性,都可以删掉。

林霄云 发表于 2014-1-13 16:21:28

ll_j 发表于 2014-1-13 14:36 static/image/common/back.gif
值得鼓励但不完全靠谱的方法。
楼主知道ALisp病毒有多少变种么?至少我不知道。可以说,只要有点ALisp知识 ...

没仔细看文章啊。这种代码,都有加载代码,在加载代码之前,将之删掉就行。唉,不靠谱的评论。文章已经提到,acaddoc.lsp加载在acad20xxdoc.lsp之后,所以杀毒的代码,加载在前面即可。逻辑有问题么?

328302216 发表于 2014-1-13 17:14:56

源码!!支持一下 只是没币~~~~

ll_j 发表于 2014-1-13 17:15:11

林霄云 发表于 2014-1-13 16:21 static/image/common/back.gif
没仔细看文章啊。这种代码,都有加载代码,在加载代码之前,将之删掉就行。唉,不靠谱的评论。文章已经提 ...

Alisp病毒不仅仅是在acaddoc.lsp和acad.mnl中,除了这种有“(setq flagx t)”特征的代码外,还有其它的表现形式,比如有一种是在代码中插入一句使用ascii数字写的代码的“病毒”形式,而且有些以acad.fas和acad.vlx文件传播的病毒,病毒源文件并不产生acadoc.lsp文件,我前面所说的logo.gif也只是保存病毒源文件的文件名之一,还有其它形式的文件名。
不要试图删去acad.mnl,这是acad的系统文件之一,虽然可能被“感染”,但直接删除的后果也可能是意想不到的。
按照acad文件的加载顺序,acad.lsp是很靠前的,而编译的acad.fas和acad.vlx的加载顺序都可能在自己定义的acad.lsp之前,如果想屏蔽后面的加载,必须在更前面的acad20xx.lsp中有屏蔽的代码,这些代码要自己手工加上去么?即便如此,也不能保证比和图形文件在相同目录下的acad.lsp更早加载,那么,屏蔽就无法保证了。
现在所见的明码变种文件名有acadoc.lsp、acadapp.lsp、acadapq.lsp、acadappp.lsp等,除了acaddoc.lsp外,都不是自动加载的,都是在acad.lsp中加载,而如果是编译的acad.lsp,并且随意取一个名字,能保证一定能拦截?
而且,感染的文件远不止几个常见的自动加载文件,还包括ET的一下自动加载文件及mnl文件,或许还包括其它软件设定的自动加载文件,感染了怎么办?删除显然是不可能的。
acaddoc.lsp和acad.lsp也不是随意删除的,不说acad.lsp使用很广,就是acaddoc.lsp,也有软件进行定制使用,如果贸然删除了,大概也多少有点不便吧?

林霄云 发表于 2014-1-13 17:34:14

ll_j 发表于 2014-1-13 17:15 static/image/common/back.gif
Alisp病毒不仅仅是在acaddoc.lsp和acad.mnl中,除了这种有“(setq flagx t)”特征的代码外,还有其它的表 ...

AutoCAD 将自动加载用户可定义的三个文件:“acad.lsp”、“acaddoc.lsp”和当前自定义文件附带的 MNL 文件。默认情况下,“acad.lsp”仅在启动 AutoCAD 时加载一次,而“acaddoc.lsp”可随每个文档(或图形)一起加载。这样可使用户将加载“acad.lsp”文件和启动应用程序相关联,将“acaddoc.lsp”文件和文档或图形启动相关联。

不要修改保留的“acad20xx.lsp”文件。Autodesk 提供了 acad20xx.lsp 文件,其中包含 AutoCAD 所需的 AutoLISP 定义的函数。此文件在加载“acad.lsp”文件之前加载到内存。

本文探索解决acaddoc.lsp病毒方式;对于用acad.lsp病毒,应该在其加载之前,进行删除文件操作,亦为破毒之道。对于感染了之后的文件,如果病毒是采取追加方式感染文件,亦可以修复,如果是文中插入,修复较难。

如果清晰了解到恶意代码的文件名称可目录,在其加载前加载杀毒代码,都应该是可行的破解之道。同时也是防毒之道。


页: [1] 2 3
查看完整版本: acaddoc.lsp病毒破防(重磅解析源码级别)