Страницы: 1
RSS
Троян в макросе
 
Форумчане, прошу помощи!
В файле Excel разрабатываю программу. В ней много UserForm, много макросов. Ежедневная работа завершалась корректным сохранением файла. Но вот сегодня файл не сохранился (сообщение было о серьезной ошибке и невозможности сохранения). Мало того, файл исчез из папки, в которой он находился. Благо, что в облаке (и не только) обновляю каждый день свой файл. Снова скопировал из облака к себе программу, но действия с файлом снова повторились: Excel его не сохранил, а при закрытии файл удалился.
В итоге, Windows 10 (defender) сообщил об угрозе: троян 097M!ForetypeA!ml.     А сканирование с помощью утилиты DrWeb выявило инфицированный контейнер w97m.erab.
Кто-то может подсказать, как проверить код в файле, чтобы найти ошибку? Или что мне вообще делать?  
 
Антивирус нашел кусок кода, по семантике похожий на троян.

Цитата
gena10111 написал: сообщение было о серьезной ошибке и невозможности сохранения
Что-то косо-криво написано. Кофликт, переполнение памяти, зацикливаение... Проверяйте код частями. Удалить все модули, оставить один. Добавлять, каждый раз проверяя корректность сохраения.
Возможно, и не в коде проблема. Файл может быть перегружен форматированием, стилями, объектами...
 
Спасибо, буду пробовать и разбираться. Размер файла почти 1 MB. И до определенного этапа все было хорошо. Этот файл проверю. Но в другом файле с идентичной программой и кодом сохранение происходит корректно, а DrWeb пишет об инфицированном контейнере w97m.erab. Значит, похожая проблема? А обязательно удаление модулей? Нельзя просто закомментировать коды, а затем постепенно их проверять?
Изменено: gena10111 - 27.02.2019 22:56:50 (Добавление комментария и вопроса)
 
Если код Вы писали сами - откуда там взяться трояну?  
 
Если в редакторе все то же, но файл ломается - проблема или в даных, или в самом файле.
Создайте новую книгу, перенисите нужно туда. Но не Copy-Paste, иначе можно перетянуть проблему в новую книгу. Вставлять только данные, форматировать по-новому.
 
Есть коды, которые я копировал с интернета и подгонял под свои задачи
Спасибо ещё раз, буду разбираться...
 
Если в VBA коде есть фрагмент с .DeleteLines для удаления строк кода, то многие антивирусы этого не любят и ложно считают такой код вирусом.
 
Цитата
vikttur написал:
проблема или в даных, или в самом файле
Проблема также может быть в именах процедур и переменных, которые "слишком напоминают" "некоторые системные команды".
Я не найду теперь ничего "из головы", но иногда "странные вещи" происходили ...
 
Уважаемые специалисты, спасибо за дельные советы!
Сообщаю об устранении некоторых причин, дабы другим тоже бы надо знать:
1. Изменил имена 2-х переменных (varText и DateKP) на другие имена, файл сохранился без проблем;
2. Для подготовки документа к печати в авторежиме использовал .Delete для строк Rows. Изменил подход, с использованием скрытия строк .EntireRow.Hidden = True,
и Windows Defender перестал "ругаться", что в файле есть ТРОЯН.

Спасибо за подсказки и советы! Теперь разбираюсь с инфицированными контейнерами: если получится - я отпишусь!
 
Цитата
gena10111 написал:
Defender перестал "ругаться"
Так, может теперь продемонстрируйте свой код, интересно, напоминает ли он например допотопного "этхана", или нет  ...  ;)
 
Код
Private Sub txb_2bossnameVZ_Change()
    Dim IzmenitZaglav2 As Variant ' ввод в текстбокс каждого слова с заглавной Буквы
    Dim i As Long
    
    IzmenitZaglav2 = Me.txb_2bossnameVZ.Text  ' Взятие данных из текстбокса в переменную "IzmenitZaglav2"
    IzmenitZaglav2 = Split(IzmenitZaglav2, " ") ' Разбиваем данные на слова по пробелам
    
    'Изменение первой буквы во всех словах.
    'Нумерация элементов в массиве "IzmenitZaglav2" начинается с нуля
    For i = 0 To UBound(IzmenitZaglav2) Step 1
        IzmenitZaglav2(i) = UCase(Left(IzmenitZaglav2(i), 1)) & Mid(IzmenitZaglav2(i), 2)
    Next i
    'Соединие слов в одну строку и помещение результата обратно
    'в переменную "IzmenitZaglav2"
    IzmenitZaglav2 = Join(IzmenitZaglav2, " ")
    
    Me.txb_2bossnameVZ.Value = IzmenitZaglav2
End Sub
Данный макрос заменяет каждое слово в TextBox с заглавной буквы. Здесь я заменил имя переменной varText на IzmenitZaglav2 (Данный код был мною скачан из нета).

Код
        If ShAct_VZ.Range("ActOrgName2") = "-" Then
        ShAct_VZ.Rows("12:13").Select
        Selection.EntireRow.Hidden = True
        End If
Фрагмент макроса на скрытие строк по условию. Когда начались описанные выше в сообщениях проблемы, вместо Selection.EntireRow.Hidden = True было Selection.Delete

Я "самоучка", поэтому строго не судите) Стараюсь, как могу))
Изменено: gena10111 - 28.02.2019 17:28:36 (Дополнение)
 
С инфицированными контейнерами разобрался, уважаемые форумчане. Путем поочередного комментирования кодов, нашел код, в котором было прописано заполнение формы отчета, но некоторые строки кода ссылались на объединенный диапазон ячеек. После корректировки сообщение антивируса о наличии инфицированного контейнера О97М пропало: вирусов не обнаружено. Будьте тоже внимательны. Спасибо за ваше участие в поисках решения проблем!!!
 
Чудны дела твои, господи...
F1 творит чудеса
 
Цитата
Данный макрос заменяет каждое слово в TextBox с заглавной буквы
Может так проще?
Код
 MsgBox StrConv("наша таня громко плачет", 3)
 
Картинку хотел загрузить ... не получается копипастом
Изменено: Александр Моторин - 01.03.2019 19:30:21
 
Наверное, я многих рассмешил, но не нашел в нете, кроме вышеуказанного кода для заглавных букв, ничего. А тут все так просто))).
Действительно, теперь тот большой код превратился в маленькую строку:
Правильно? Главное - работает...

А если надо только первое слово чтобы  было с заглавной буквы, например "Главный инженер"?
Код
Private Sub txb_2bossnameVZ_Change()
    Me.txb_2bossnameVZ.Value = StrConv(Me.txb_2bossnameVZ.Value, 3)
End Sub
 
Кроме нижеуказанного кода я не нашел(
Код
Private Sub txb_boss_Change()   
    Dim IzmenitZaglav As Variant ' ввод в текстбокс с заглавной Буквы
    IzmenitZaglav = Me.txb_boss.Text
    IzmenitZaglav = UCase(Left(IzmenitZaglav, 1)) & Mid(IzmenitZaglav, 2)
    Me.txb_boss.Value = IzmenitZaglav
End sub
 
Вариант:
Код
Sub qqq()
Dim Stroka As String, Arr
    Stroka = "главный инженер"
    Arr = Split(Stroka)
    Stroka = Replace(Stroka, Arr(0), Application.Proper(Arr(0)))
End Sub
 
Стоп! Мы ушли от темы.
 
Прошу прощения)! Спасибо всем еще раз!
Страницы: 1
Наверх