Анализ и расшифровка программ-вымогателей

Предисловие

В последние два дня в учебном центре было программное обеспечение для подсчета баллов под вывеской программного обеспечения для поиска, но на самом деле это программа-вымогатель. Разумеется, такое индуктивное название использовалось. На картинке ниже изображена коробка с программой-вымогателем. Я тоже получил этот образец и проанализировал его.

Вставьте описание изображения сюда

Образец информации

Глядя на эту кучу библиотек времени выполнения, на этот значок программного обеспечения, если вы не знаете заранее, что это программа-вымогатель, вы можете подумать, что это обычное программное обеспечение.

Вставьте описание изображения сюда

Программа 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

рекомендация

отblog.csdn.net/weixin_44001905/article/details/104415850