近两天出现了一个学习强国刷分软件,打着刷分软件的旗号,但实际上是个勒索软件,这种诱导性的名字果然就有人中招了,下图是勒索框。我也获取到了这个样本,对此分析。
看这一堆运行时库,这软件图标,要不是提前知道这是勒索软件,很可能就以为这是正常软件了
程序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程序不加混淆,用对称加密算法也不将密钥隐藏一下,真的是一个耿直boy
技术本无罪,学习技术就要将它用到正途上,恶人终有恶报
源码获取:
https://github.com/Iam0x17