-
Junior Member
- Вес репутации
- 29
Для модератора: Дешифровщик Trojan-Ransom.Win32.Xorist.ln файлы *.40156
Ниже представлен код для дешифровки файлов *.40156 (написан после вскрытия зловреда)
Действие вируса:
1. Шифрует все файлы (jpg / doc / docx / xls / xlsx / ...), в результате, файлы меняют сое расширение на "*.40156"
2. В каждой папке создает файл "КАК РАСШИФРОВАТЬ ФАЙЛЫ.txt" или "HOW TO DECRYPT FILES.txt"
3. Копирует себя под новым именем во временную папку (например, C:\Temp)
4. Создает в системном рестре ключ своего автозапуска из временной папки (раздел "Alcmeter")
5. Создает в системном рестре ключ для расширения "*.40156"
6. После окончания заражения появляется окно с заголовком "0p3nSOurc3 X0r157, motherfucker!"
7. Пытается создать картинку "pussylicker.bmp" и установить как фон
содержимое файла "КАК РАСШИФРОВАТЬ ФАЙЛЫ.txt" :
"Все ваши файлы зашифрованы!
Если хотите вернуть свои файлы в нормальное состояние, то пишите на email: [email protected]
Стоимость расшифровки 6500 руб., спешите! Цена скоро будет больше!"
Для генерации ключа используется первая буква имени файла.
void calculate_key(char first_letter, uint32_t *key_out) {
uint8_t base_key[16] = { 0xED, 0xA9, 0x34, 0x1E, 0x5C, 0xD0, 0x5D, 0xB8, 0x97, 0x3D, 0x28, 0xD3, 0xC2, 0x0E, 0x89, 0x71 };
uint8_t *key = (uint8_t*)key_out;
uint8_t base_byte = first_letter;
for (size_t i = 0; i < 16; i++) {
key[i] = base_key[i] ^ base_byte;
base_byte = (base_byte << 1) | (base_byte >> 7);
}
}
Функция дешифровки, buffer - содержимое файла, открытого бинарно
void decrypt(uint32_t *key, uint32_t *buffer, size_t num) {
uint32_t A, B, C, e, f;
for (size_t i = 0; i < num * 2; i += 2) {
A = bswap(buffer[i]);
B = bswap(buffer[i + 1]);
C = 0xC6EF3720;
do {
e = B - ((((A << 4) + key[2]) ^ (C + A)) ^ ((A >> 5) + key[3]));
f = A - ((((e << 4) + key[0]) ^ (C + e)) ^ ((e >> 5) + key[1]));
C = C - 0x9E3779B9;
B = e - ((((f << 4) + key[2]) ^ (C + f)) ^ ((f >> 5) + key[3]));
A = f - ((((B << 4) + key[0]) ^ (C + B)) ^ ((B >> 5) + key[1]));
C = C - 0x9E3779B9;
} while (C != 0);
buffer[i] = bswap(A);
buffer[i + 1] = bswap(B);
}
}
Использование: (работаем с содержимым начиная с 124-го байта)
size_t fsize = _ftelli64(in);
uint8_t *buffer = new uint8_t[fsize];
calculate_key(cfilename_out[0], key); // генерируем ключ
decrypt(key, (uint32_t*)(buffer + 0x7C), (fsize - 0x7C) / 8 ) ; // расшифровываем содержимое, начиная с 125 байта
Если файл меньше 0x7C байт - его содержимое не зашифровано, просто его переименовываем.
Алгоритм проверен, расшифровывает.
Надеюсь, я был полезен...
Последний раз редактировалось Blago; 19.05.2016 в 11:29.
-
Будь в курсе!
Будь в курсе!
Надоело быть жертвой? Стань профи по информационной безопасности, получай самую свежую информацию об угрозах и средствах защиты от ведущего российского аналитического центра Anti-Malware.ru:
-
Уважаемый(ая) Blago, спасибо за обращение на наш форум!
Удаление вирусов - абсолютно бесплатная услуга на VirusInfo.Info. Хелперы в самое ближайшее время ответят на Ваш запрос. Для оказания помощи необходимо предоставить логи сканирования утилитами АВЗ и HiJackThis, подробнее можно прочитать в правилах оформления запроса о помощи.
Если наш сайт окажется полезен Вам и у Вас будет такая возможность - пожалуйста поддержите проект.
-
-
Я и сам в состоянии справиться
Microsoft MVP 2012-2016 Consumer Security
Microsoft MVP 2016 Reconnect
-