Каталог статей
Предисловие
В последние два дня в учебном центре было программное обеспечение для подсчета баллов под вывеской программного обеспечения для поиска, но на самом деле это программа-вымогатель. Разумеется, такое индуктивное название использовалось. На картинке ниже изображена коробка с программой-вымогателем. Я тоже получил этот образец и проанализировал его.
Образец информации
Глядя на эту кучу библиотек времени выполнения, на этот значок программного обеспечения, если вы не знаете заранее, что это программа-вымогатель, вы можете подумать, что это обычное программное обеспечение.
Программа HASH
Компилировать с .NET
PE: library: .NET(v4.0.30319)[-]
PE: linker: Microsoft Linker(48.0*)[EXE32]
Образец поведения
Перетащите образец в трутовик
Выпустить программу в указанную директорию и установить самозапуск, начать шифрование файлов после удаления
После завершения шифрования файлов список шифрования и адрес биткойн-кошелька также отображаются в подробном списке.
Анализ образца
Используйте dnspy, чтобы открыть образец и посмотреть на структуру именования. Примерная функция условно разделена на четыре части: Blocker, Hacking, Locker, Windows.
Сначала посмотрите на Blocker. Он подключен к информационной сети Биткойн. Некоторая информация получена через api веб-сайта. Здесь нельзя судить о намерениях автора.
Две части Hacking и Windows заключаются в том, чтобы выпустить программу в указанный каталог и настроить самозапуск, а затем самоудаление. На следующем рисунке показано, как самоудаление образца
Locker - это зашифрованный файл, а ключ зашифрованного файла
Получите суффикс зашифрованного файла с ресурса
.dwg .dxf .bak .exb .drw .igs .stp .sldasm .sldprt .SLDPRT .step .prt .x_t .stl .CATPart .CATProduct .CATdrawing .rspag .NC .lxe .3dm .max .php .asp .c .java .sql .mdb .mdf .prproj
.jpg .jpeg .txt .doc .dot .docx .zip .rar .pdf .7z .tar .wim .ppt .pot .pps .pptx .xls .xlsx .raw .tif .gif .png .bmp .rb .class .py .js .aaf .aep .aepx .caj .key .rc .sln .dll
.wav .mp3 .wma .mp4 .mkv .3gp .mpeg .avi .3g2 .mov .sgi .asf .asx .flv .mpg .wmv .flc .vob .m3u8 .dat .csv .efx .sdf .vcf .xml .ses .qbw .QBB .QBM .torrent .xml .config .pdb
.idml .pmd .xqx .xqx .ai .eps .ps .svg .swf .fla .as3 .as .docm .dotx .dotm .docb .rtf .crt .indt .indb .inx .accdb .db .dbf .cpp .cs .h .jar .exe
.wpd .wps .msg .pdf .xls .xlt .xlm .xlsx .xlsm .xltx .xltm .xlsb .xla .xlam .xll .xlw .aet .ppj .psd .indd .indl .GTX .gxw .MCE .drv .chm
.pptm .potx .potm .ppam .ppsx .ppsm .sldx .sldm .aif .iff .m3u .m4u .mid .mpa .ra .plb .prel .Iif .nd .rtp
.QBI .QBR .cnt .des .v30 .qbo .ini .lgb .qwc .qbp .qba .tlg .qbx .qby .1pa .qpd .txt .set .cur .des
.tlg .wav .qsm .qss .qst .fx0 .fx1 .mx0 .fpx .fxr .fim .ptb .pfb .cgn .vsd .cdr .cmx .cpt .csl
.dsf .ds4 .eps .ps .prn .pif .pcd .pct .pcx .plt .rif .svg .swf .tga .tiff .psp .ttf .wpd .wpg .wi
.raw .wmf .txt .cal .cpx .shw .clk .cdx .cdt .fpx .fmv .img .gem .xcf .pic .mac .met .pp4 .pp5 .ppf
.xlsm .ppt .nap .pat .ps .prn .sct .vsd .wk3 .wk4 .xpm .cs .resx .wbfs .iso .mdf .apk .api .gho
Адрес биткойн-кошелька
Программа расшифровки
Эта программа-вымогатель на самом деле очень проста. Для шифрования используется только функция AesCryptoServiceProvider программного интерфейса программы шифрования. Ключ не скрывается и не запутывается. Напишите код дешифрования и повторно используйте код автора напрямую.
Здесь я перечисляю ключевые коды для расшифровки
private static void DecryptFile(SymmetricAlgorithm alg, string inputFile, string outputFile)
{
byte[] array = new byte[65536];
using (FileStream fileStream = new FileStream(inputFile, FileMode.Open))
{
using (FileStream fileStream2 = new FileStream(outputFile, FileMode.Create))
{
using (CryptoStream cryptoStream = new CryptoStream(fileStream2, alg.CreateDecryptor(), CryptoStreamMode.Write))
{
int num;
do
{
num = fileStream.Read(array, 0, array.Length);
if (num != 0)
{
cryptoStream.Write(array, 0, num);
}
}
while (num != 0);
}
}
}
}
// Token: 0x06000003 RID: 3 RVA: 0x00002158 File Offset: 0x00000358
private static void DecryptFile(string path, string encryptionExtension)
{
try
{
if (!path.EndsWith(encryptionExtension))
{
return;
}
string outputFile = path.Remove(path.Length - 4);
using (AesCryptoServiceProvider aesCryptoServiceProvider = new AesCryptoServiceProvider())
{
aesCryptoServiceProvider.Key = Convert.FromBase64String("OoIsAwwF23cICQoLDA0ODx==");
aesCryptoServiceProvider.IV = new byte[]
{
0,
1,
0,
3,
5,
3,
0,
1,
0,
0,
2,
0,
6,
7,
6,
0
};
Form1.DecryptFile(aesCryptoServiceProvider, path, outputFile);
}
}
catch
{
return;
}
try
{
File.Delete(path);
}
catch (Exception)
{
}
}
// Token: 0x06000004 RID: 4 RVA: 0x00002214 File Offset: 0x00000414
internal static void DecryptFiles(string path)
{
string encryptionExtension = ".exe";
Form1.DecryptFile(path, encryptionExtension);
File.Delete(path);
}
Написали программу расшифровки, давайте ее протестируем
Я извлек зашифрованный txt файл и перетащил его в программу дешифрования, вы видите, что txt файл был восстановлен и расшифровка прошла успешно.
подводить итоги
С технической точки зрения эта программа-вымогатель не умен. По сравнению с сегодняшними программами-вымогателями она немного педиатрическая. Программа .net не путает ее и не скрывает ключ с помощью симметричного алгоритма шифрования. Это действительно честный мальчик.
Технологии невинны, и технологии обучения должны использовать их правильно. Нечестивые окупятся
Получение исходного кода:
https://github.com/Iam0x17