Вирус vaccine в Autodesk Maya
0. Пациент зеро. Откуда?
Я поймал эту штуку с рига от Polywink. Сцена была в mb. Возможно, кто-то до меня открыл сцену на зараженной машине.
1. Что это такое?
Версия №1. По сути это некий локальный "антивирус". Судя по коду, некто написал обработку на чистку сцены от некоего вируса/нежелательных нод/черта лысого. Вероятно, кто-то намудрил с нодами (или, что хуже, есть действительно вирус) и при открытии сцены майка либо крашилась, либо происходили какие-либо деструктивные действия и сцена была потеряна. И некий китаец написал данную обработку.
Версия №2. Кто-то опробовал внедрение кода и несанкционированное исполнение его на стороне.
2. Почему я называю его вирусом?
Потому что по характеру действий это вирус. Кусок кода самостоятельно внедряющийся и прописывающий себя при загрузке ПО без ведома владельца. Благо, не производящий деструктивных действий.
3. Как работает данный vaccine?
- Зараженный майский файл содержит две кастомные ноды "truc_vaccine_gene" и "truc_breed_gene". При открытии зараженной сцены (будь то в ASCII или в бинарнике) автоматически создаются два файла userSetup.py и vaccine.py в папке %Documents%/maya/scripts. Первый дает возможность всегда исполнять файл vaccine.py при старте майки.
- После того как машина заражена при каждом сохранении в сцену добавляются данные ноды и выводится предупреждение на китайском 你的文件贼健康~我就说一声没有别的意思, мол, ваш файл чист. Если открыть данный файл на чистой машине, см. выше
4. Как чистить?
- Ручной способ.
Вычищаем "вакцину" из сцен. Я сделал так. После обнаружения зараженного файла userSetup.py посмотрел на дату создания. Поставил поиск строки vaccine по всем сценам начиная от этой даты. Благо их было немного, так как обнаружил вирус довольно быстро с момента его появления на моей машине. А дальше с помощью текстового редактора удалил из сцен строки с нодами "truc_vaccine_gene" и "truc_breed_gene".
createNode script -n "truc_vaccine_gene"; ...... createNode script -n "truc_breed_gene"; ......
Чуть позже все равно поставил поиск по всем сценам, но все было чисто.
С бинарниками было посложнее. Пришлось пересохранить их в ma, а затем также почистил.
Закрываем майку. Удаляем файлы vaccine.pyc, vaccine.py и UserSetup.py либо, в случае если userSetup.py вам нужен, удаляем следующие строки
import vaccine cmds.evalDeferred('leukocyte = vaccine.phage()') cmds.evalDeferred('leukocyte.occupation()')
Всем здоровья!
P.S. По хорошему стоит написать обработку, которая пробегает по всем файлам и автоматически вычищает. Но времени подумать не было к сожалению, а говнокодить делать спустя рукава не хотелось. И как быть с бинарниками - непонятно. Единственное решение описано выше (с пересохранением их в ma). Не забудьте автосейвы почистить либо удалить.