Artikelverzeichnis
Vorwort
In den letzten zwei Tagen gab es eine Scoring-Software in einem Lernkraftwerk unter dem Banner der Scouring-Software, aber es handelt sich tatsächlich um eine Ransomware. Sicher genug, diese Art von induktivem Namen wurde rekrutiert. Das Bild unten ist eine Ransomware-Box. Ich habe auch diese Probe erhalten und analysiert.
Beispielinformationen
Wenn Sie sich diese Reihe von Laufzeitbibliotheken und dieses Software-Symbol ansehen und nicht im Voraus wissen, dass es sich um Ransomware handelt, denken Sie möglicherweise, dass es sich um normale Software handelt.
Programm HASH
Kompilieren Sie mit .NET
PE: library: .NET(v4.0.30319)[-]
PE: linker: Microsoft Linker(48.0*)[EXE32]
Beispielverhalten
Ziehen Sie die Probe in das Zunderschwert
Lassen Sie das Programm im angegebenen Verzeichnis los und stellen Sie den Autostart ein. Beginnen Sie nach dem Löschen mit der Verschlüsselung der Dateien
Nach Abschluss der Dateiverschlüsselung werden auch die Verschlüsselungsliste und die Bitcoin-Brieftaschenadresse ausführlich aufgelistet.
Probenanalyse
Verwenden Sie dnspy, um das Beispiel zu öffnen und die Namensstruktur zu betrachten. Die Beispielfunktion ist grob in vier Teile unterteilt: Blocker, Hacking, Locker, Windows
Schauen Sie sich zuerst Blocker an. Es ist mit einem Bitcoin-Informationsnetzwerk verbunden. Einige Informationen werden über die Website-API abgerufen. Die Absicht des Autors kann hier nicht beurteilt werden.
Die beiden Teile von Hacking und Windows bestehen darin, das Programm im angegebenen Verzeichnis freizugeben und den Selbststart einzurichten und dann selbst zu löschen. Die folgende Abbildung zeigt, wie das Beispiel selbst gelöscht wird
Locker ist eine verschlüsselte Datei und der Schlüssel der verschlüsselten Datei
Beziehen Sie das verschlüsselte Dateisuffix aus der Ressource
.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
Bitcoin-Brieftaschenadresse
Entschlüsselungsprogramm
Diese Ransomware ist eigentlich sehr einfach. Die Verschlüsselung verwendet nur die AesCryptoServiceProvider-Funktion der Programmierschnittstelle des Verschlüsselungsprogramms. Der Schlüssel ist nicht verborgen oder verschleiert. Schreiben Sie den Entschlüsselungscode und verwenden Sie den Code des Autors direkt wieder.
Hier liste ich die Schlüsselcodes für die Entschlüsselung auf
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);
}
Haben Sie das Entschlüsselungsprogramm geschrieben, lassen Sie es uns testen
Ich habe eine verschlüsselte txt-Datei extrahiert und in das Entschlüsselungsprogramm gezogen. Sie können sehen, dass die txt-Datei wiederhergestellt wurde und die Entschlüsselung erfolgreich war
um zusammenzufassen
Technisch gesehen ist dieses Ransomware-Programm nicht clever. Im Vergleich zur heutigen Ransomware ist es ein bisschen pädiatrisch. Das .net-Programm verwirrt es nicht und verbirgt den Schlüssel nicht mit einem symmetrischen Verschlüsselungsalgorithmus. Es ist wirklich ein ehrlicher Junge.
Technologie ist unschuldig, und Lerntechnologie muss sie auf die richtige Weise einsetzen. Die Bösen werden sich auszahlen
Quellcode-Erfassung:
https://github.com/Iam0x17