noCry: Windows Ransomware texniki baxiş
NoCry .NET ilə hazırlanmış, qabaqcıl şifrələmə və gizlənmə mexanizmlərinə malik ransomware növüdür.
Static Analiz
Yalnız bir exe faylımız var
Ransomware proqramının yazıldığı proqramlaşdırma dilini, IDE və packerlərini öyrənmək üçün onu DIE tətbiqinə yükləyirik.
Die (Detect It Easy) vasitəsilə aparılan statik analiz zamanı faylın Visual Basic ilə yazıldığı və anti-analiz mexanizmləri tətbiq etdiyi aşkarlandı. Xüsusilə proqram Anti-debug, Anti-Sandboxie və Anti-VM texnikaları ilə özünü qorumağa cəhd edir.
Təhlili davam etdirək və hash dəyərlərini götürək.
1
2
3
MD5: 00c127d803d89f32024afdcff3903162
SHA1: 6ed4558be1130499456aaef9a717e6517c45406a
SHA256: 8c922fb6caaa11a681987a59d3dac34fb0c10d75753217dde72fa845022b7b8f
Analizin ilk mərhələsində faylı IDA Pro vasitəsilə nəzərdən keçirəcəm. Səbəb, IDA-nın proqramın ümumi strukturunu, funksiyaların qarşılıqlı əlaqələrini və potensial kod axınını göstərmək baxımından çox güclü olmasıdır.
Buradan görmək olur ki: _CorExeMain adresi EXE faylında external entry point kimi qeyd olunub proqram CLR (Common Language Runtime) üzərindən icra olunacaqdır.
IDA Pro analizində Functions siyahısında yalnız Start adlı bir funksiya görünür.
Bu normaldır, çünki fayl .NET əsaslıdır və IDA Pro managed kodu natıve funksiya kimi tanımır. Buna görə proqramın əsas logic hissələri IDA-da görünmür və real kod strukturu dnSpy ilə görsənir ora daha sonra gələcəyik. Aşağı endikdə faktiki kodla qarşılaşmırıq. Onun əvəzinə .NET layihəsinə aid string metadata-lar görünür. Burada db, dw və align kimi dəyərlər göstərilir.
bu normaldır çünki: Native assembly yoxdur, kod CLR tərəfindən idarə olunur, IDA Pro bu hissələri data kimi göstərir.
Buradakı string-lər proqramın içində olan metod, UI komponenti və API requestlərinə aiddir. Analiz zamanı bizi UI Form komponentləri və SystemParametersInfoA kimi funksiyalar qarşılayır.
(malwarenin 2025də yox 2020də yazıldığını bu screenshotu almazdan əvvəl bildim…)SystemParametersInfoA Windows sisteminin parametrlərini dəyişməyə imkan verən API-dir. Normal proqramlar tərəfindən də istifadə olunur, amma malware də onu zərərli məqsədlər üçün işə sala bilər, aşağda bəzi nümunələr verəcəm.
Desktop wallpaper-i dəyişmək
1
SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, "C:\\path\\msg.bmp", SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);
Ekranı bloklamağa çalışmaq
1
SystemParametersInfoA(SPI_SETSCREENSAVEACTIVE, FALSE, NULL, 0);
Dediyim kimi IDA Pro ilə baxılacaq çox şey yoxdur son olaraqda ransomwarenin runtime olaraq mscoree.dll istifadə etdiyini göstərdiyim screnshota nəzər salaq.
Göstərilən PE Debug Directory strukturu NoCry ransomware-in build zamanı hansı PDB faylından istifadə etdiyini və .NET CLR tərəfindən icra olunduğunu göstərir, Entry point isə _CorExeMain funksiyasına jump edərək CLR host‑a yönləndirilir. Fikrimcə artıq tool olaraq dnSpy istifadə etmək zamanıdır.
Analiz prosesini dnSpy ilə davam eləməzdən əvvəl exe faylını .NET Reactor Slayer alətinə yükləyəcəyik. Bu addımın məqsədi obfuscate olunmuş string-ləri aşkar etmək və kodun oxunaqlılığını artırmaqdır. Alət avtomatik olaraq .NET Reactor tərəfindən gizlədilmiş və ya şifrələnmiş stringləri deobfuscate edir.
Indi dnSpy istifadə etmək olar.
Biz Assambly infoları və namespacelər görürük, bunlardan ən vacibi namespacelərdir. Proqramın əsl “beyni” məhz budur. {} NoCry əsas namespace-dir və proqramın bütün funksional hissələri buradadır, ən vacib modul və kodlara baxaq. {} NoCry içindən çıxan Anti modulunun kodlarına nəzər salaq.
Emulator() — Emulyator aşkarlanması
1
2
3
4
long ticks = DateTime.Now.Ticks;
Thread.Sleep(10);
if (DateTime.Now.Ticks - ticks < 10)
return true;
Bu funksiya vaxt gecikməsini ölçərək proqramın real Windows mühitində işləyib-işləmədiyini müəyyən edir. Əgər gecikmə normaldan azdırsa, proqram emulyator olduğunu düşünür.
DetectVirtualMachine() — VM aşkarlanması
1
2
3
4
5
6
7
8
9
10
11
public static bool DetectVirtualMachine()
{
foreach (ManagementBaseObject managementBaseObject in managementObjectCollection)
{
string text = managementBaseObject["Manufacturer"].ToString().ToLower();
if ((Operators.CompareString(text, "microsoft corporation", false) == 0 && managementBaseObject["Model"].ToString().ToUpperInvariant().Contains("VIRTUAL")) || text.Contains("vmware") || Operators.CompareString(managementBaseObject["Model"].ToString(), "VirtualBox", false) == 0)
{
return true;
}
//Kod uzun olduqundan bəzi hissələri kəsilmişdir!
Bu funksiya WMI vasitəsi ilə kompüter istehsalçısı və model adını alır. Əgər sistem VirtualBox, VMware kimi virtual maşında işləyirsə onu aşkar edib true qaytarır.
DetectDebugger() — Debugger aşkarlanması
1
2
[DllImport("kernel32.dll", ExactSpelling = true, SetLastError = true)]
private static extern bool CheckRemoteDebuggerPresent(IntPtr hProcess, ref bool isDebuggerPresent);
Prosesin üzərinə debugger qoşulub‑qoşulmadığını API vasitəsilə aşkarlayır.
DetectSandboxie() — Sandbox aşkarlanması
1
2
3
4
public static bool DetectSandboxie()
{
return Anti.GetModuleHandle("SbieDll.dll").ToInt32() != 0;
}
Bu funksiya Sandboxie sandbox mühitini aşkar etmək üçün Sandboxie DLL-in mövcudluğunu yoxlayır.
Faylarımızın şifrələmə prosesi isə check modulu altında baş verir:
- AES_Encrypt()
Bu funksiya AES şifrələməsindən istifadə edərək verilmiş mətni Base64 formatında geri qaytarır. Açar MD5 hash-i əsasında formalaşdırılır və ECB (Electronic Codebook) rejimində işlədilir.
- AES_Decrypt()
Bu funksiya verilmiş şifrənin düzgün açılıb‑açılmadığını yoxlayır. Əgər açma prosesi uğurlu olarsa true, əks halda false qaytarır. Bu metod ransomware‑in daxilində şifrənin doğruluğunu test etmək üçün istifadə oluna bilər məncə. bir digər modul del
del Modulunun Funksiyası: Tam Təmizlik
del adlı StandardModule sinfi, .NET (Visual Basic) əsaslı proqramlarda rast gəlinən bir quruluşdur və təmizləmə (delete/self-destruct) işlərini görür.
Şifrələnmiş faylların orijinallarının silinməsi.
1
2
3
4
5
6
7
8
9
List<string>.Enumerator enumerator = Form4.listenc.GetEnumerator();
while (enumerator.MoveNext())
{
string text = enumerator.Current;
if (File.Exists(text))
{
File.Delete(text);
}
}
Interaction.SaveSetting(): Bu, Visual Basic-də Windows Registry-ə məlumat yazmaq üçün istifadə olunan funksiyadır.
Ransomware işləyərkən bəzi vəziyyət məlumatlarını Registry-də saxlayır. Bu sətirlər həmin bütün dəyərləri (“P”, “H”, “M”, “S”, “X”, “D”, “T”, “G”, “F”, “C” və s.) “0” olaraq sıfırlayır.
1
string text3 = Path.GetTempPath() + "del.vbs";
vbs Skripti Temp qovluğunda (C:\Users...\AppData\Local\Temp\del.vbs) yaradır.
del.vbs skripti, NoCry.exe prosesi bağlandıqdan dərhal sonra işə düşür və proqramın həm əsas yerini, həm də Startup qovluğundakı nüsxəsini silir. Bu, prosesin artıq işləmədiyi anda özünü təmizləyən klassik bir “Self-Delete” texnikasıdır.
Malwarenin içində olan Form1, Form2, Form3 və .s namespacelər var, hamsına tək tək baxıb ən çox önəm daşıyan kod və funksiyaları aşağı yazacam.
Form1_Load metodunda this.Timer1.Start() ilə timer işə salınır.
Timer1.Interval = 1000 olduğu üçün bu, hər 1 saniyədə bir icra olunur. Timer1_Tick metodu saat (hour), dəqiqə (minute) və saniyə (second) dəyişənlərini hər saniyədə bir azaldır. Bu dəyərlər Label9 (saat) və Label7 (dəqiqə) pəncərədə göstərilir. Timer dəyərləri hər dəfə dəyişəndə Registry-də (Interaction.SaveSetting) saxlanılır. Bu, kompüter söndürülüb açılanda belə, Timerin qaldığı yerdən davam etməsini təmin edir.
Əgər gerisayım sıfıra çatsa (this.hour == 0.0 & this.minute == 0.0)
del.del() metodu çağırılır. Xatırlayırsansa yuxarda bunun haqqında yazmışdım bu, öz-özünü silmə əməliyyatına start verir və çox güman ki, faylları bərpaetmə şansı olmadan məhv edir.
Form2 qurbanın Decryption açarını daxil etdiyi və fayllarını geri almağa cəhd etdiyi pəncərə, Form3 isə hackerin qurbanla əlaqə saxlamaq üçün istifadə etdiyi klassik ransomware pəncərəsidir buralar haqqında heçnə yazmayacam. Form4 Ransomware tərəfindən istifadə edilən şifrələnmiş faylların siyahısını göstərən pəncərədir. Bu pəncərənin əsas məqsədi qurbanı əmin etməkdir ki, onun faylları həqiqətən şifrələnib. Modul1 adındakı modula nəzər salaq.
Bu modul proqramın başladığı, Anti-Analiz yoxlamalarının aparıldığı, AES şifrələmə açarının hazırlandığı, faylların şifrələndiyi, fidye qeydlərinin hazırlandığı və hacker-ə məlumat göndərildiyi yerdir.
startup metodu: Əgər konfiqurasiya icazə verirsə, hackerin faylını Windows-un Startup qovluğuna kopyalayır. Bu, sistem yenidən başladıldıqda ransomware-in yenidən işə düşməsini təmin edir.
Module1.HWID() Bu, CPU ID, BIOS serial nömrəsi və Ana Plata serial nömrəsi kimi sistem məlumatlarını toplayaraq, onlardan MD5 Hashını yaradır.
1
2
3
4
5
6
7
8
9
10
if (!text3.EndsWith("Bin"))
// ...
if (!text3.EndsWith("indows"))
if (!text3.EndsWith("tings"))
if (!text3.EndsWith("System Volume Information"))
// ...
// Proqram Faylları qovluqları istisna edilir
if (!text3.EndsWith("rogram Files (x86)"))
if (!text3.EndsWith("rogram Files"))
// ...
Ransomware Windows əməliyyat sistemi üçün kritik olan qovluqları şifrələməmək üçün istisna edir. Bu, sistemin çökməsinin qarşısını alır ki, qurban fidyeni ödəyə bilsin.
EncryptOrDecryptFile Faylı açır, onu Module1.CryptoAction.ActionEncrypt istifadə edərək şifrələyir və orijinal faylı silir (fileInfo.Delete())
Şifrələnmiş fayla isə St.exs uzantısı .NoCry əlavə olunur. Yadınızdan çıxmasın deyə namespacelərin screenshotun aşağı yenidən yerləşdirdim.
Son olaraqda NewWebhook və ST moduluna baxaq, Şifrələmə prosesi başa çatdıqdan dərhal sonra, “Discord Webhook URL”-dən istifadə edərək hacker-ə göndərir.
1
2
public static string webhookk = St.webhook;
//Məlumatların göndərilməli olduğu Webhook URL-i saxlayır bu, St konfiqurasiya sinifindən götürülür.
Bu metod Module1.sends metodu tərəfindən çağırılır və qurbanın tam məlumat paketini ötürmək üçün istifadə olunur. MultipartFormDataContent Bu, həm mətn, həm də ekran görüntüsü eyni HTTP sorğusunda göndərməyə imkan verən standart veb formatıdır. Bu sorğu uğurla başa çatdıqda, hacker Discord kanalında qurban haqqında bütün detalları o Decryption açarını əldə etmiş olur.
Ransomware yuxarda yazdıqımız bəzi dəyərləri buradaki St modulunun içindən götürür.
Dynamic Analiz
Indi isə Ransomwareni işə salaraq dinamik analiz aparaq, görək dinamik analiz zamanı nələr öyrənə bilirik.
Heçbir child process yoxdur.
RAM-dan dump olunan kodla dnSpy-da baxdığımız kod eynidir, bu hissədə heç bir fərqlilik yoxdur. Ona görə Dinamik analiz aparmağa dəyməz
Ransomwarenin görünüşü bu formadadır
Hackerin bizə verdiyi keyi bura yazmalıyıq 3 dəfə səhf yazsaq bütün faylarımız silinir.
IOC
Aşağıdakı göstəricilər NoCry Ransomware ilə yoluxmanı təsdiqləmək və sistemi təmizləmək üçün istifadə edilə bilər.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
Zərərli faylın unikal imzaları:
MD5: 00c127d803d89f32024afdcff3903162
SHA1: 6ed4558be1130499456aaef9a717e6517c45406a
SHA256: 8c922fb6caaa11a681987a59d3dac34fb0c10d75753217dde72fa845022b7b8f
Malware-in xarici əlaqələri:
C2 Kanalı: https://discord.com/api/webhooks/816008354065416215/oYSubP4bdGoy9bWfFabwIi4Vc9A_utG5BOlFFIFXRUj8WtL8i98RhbtRyQkOk6EG91-t
IP Sorğusu: http://ip-api.com/csv/?fields=country,query
User-Agent: Standart .NET HttpClient və ya WebClient agent başlıqları.
Sistemdə yaradılan və ya dəyişdirilən fayllar:
Temp Faylları (%TEMP%):
%TEMP%\del.vbs
%TEMP%\Cry.img
%TEMP%\[Username]-screenshot.jpg
Başlanğıc (Startup):
%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\[RandomName].exe (Qalıcılıq üçün kopyalanmış fayl).
HOW_TO_DECRYPT.html (və ya Resources.html-dən gələn ad).
Malware-in öz vəziyyətini (state) yadda saxlamaq üçün istifadə etdiyi açarlar:
Yol: HKCU\Software\VB and VBA Program Settings\[ProqramAdı]\Setting
Parametrlər (Keys):
"F" –
"H", "M", "S" –
"P", "X"
"T"
"G"
Behavioral Indicators
WMI Aktivliyi: Win32_Processor, Win32_BIOS, Win32_BaseBoard sorğuları
Kölgə Nüsxələri: SRRemoveRestorePoint funksiyasının çağırılması və ya vssadmin əmrləri.
Masaüstü Dəyişikliyi: Divar kağızının qəfil dəyişməsi.
Mitre Technique ID
1
2
3
4
5
6
7
8
9
10
T1059.005 Command and Scripting Interpreter
T1547.001 Boot or Logon Autostart Execution
T1497 Virtualization/Sandbox Evasion
T1486 Data Encrypted for Impact
T1490 Inhibit System Recovery
T1082 System Information Discovery
T1113 Screen Capture
T1102 Web Service
T1491 Defacement
T1070.004 Indicator Removal
Yara Rule
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
rule Ransomware_NoCry_NET
{
meta:
description = "Improved detection for NoCry .NET ransomware variants (reduce FP)"
author = "rafok2v9c"
date = "2025-12-04"
reference = "Internal Analysis"
threat_level = "High"
category = "Ransomware"
strings:
// Namespace / module identifiers (likely wide UTF-16 in .NET)
$s_nocry1 = "NoCry.My" wide
$s_nocry_res = "NoCry.My.Resources" wide
$s_newwebhook = "NewWebhook" wide
// Crypto / key derivation / functions (Rijndael must be present)
$c_rij = "RijndaelManaged" wide
$c_sha512 = "SHA512Managed" wide
$c_encrypt_method = "EncryptOrDecryptFile" wide
$c_check_aes = "check.AES_Decrypt" wide
// WMI / HWID queries (wide)
$w_cpu = "Win32_Processor" wide
$w_bios = "Win32_BIOS" wide
$w_base = "Win32_BaseBoard" wide
$w_gpu = "Win32_VideoController" wide
// Web / exfil / screenshot markers (ascii/wide as appropriate)
$net_multipart = "MultipartFormDataContent" wide
$net_sendinfo = "SendSysInfo" wide
$net_screenshot = "-screenshot.jpg" ascii wide
// look for discord webhook path (common C2 for this sample)
$discord1 = "discord.com/api/816008354065416215" ascii nocase
$discord2 = "discordapp.com/api/816008354065416215" ascii nocase
// Destructive / anti-analysis markers
$d_delvbs = "del.vbs" ascii
$d_spi = "SystemParametersInfoA" ascii
$d_restore = "DeleteRestorePoints" wide
condition:
uint16(0) == 0x5A4D and
(
// HIGH CONFIDENCE: specific namespace + Rijndael + discord webhook-ish
($s_nocry1 or $s_nocry_res) and $c_rij and (any of ($discord*))
or
// Behavioral signature: HWID/WMI + destructive + ransom-string
(2 of ($w_*) and 1 of ($d_*) and 1 of ($msg_*))
or
// Generic but stricter: Rijndael + encrypt method + multipart exfil
$c_rij and $c_encrypt_method and $net_multipart
)
}
SON
NoCry Ransomware, .NET (VB.NET) üzərində qurulmuş, modul quruluşa malik “Ransomware-as-a-Service” (RaaS) və ya fərdi istifadə üçün hazırlanmış zərərli proqramdır. Kod analizi aşağıdakı əsas xüsusiyyətləri ortaya qoydu:
Texnologiya: .NET Framework (Windows Forms) istifadə edir. Kodun oxunmasını çətinləşdirmək üçün Obfuscation (qarışdırma) tətbiq olunub, lakin decompile edilə bilir.
Şifrələmə: Standart AES-256 alqoritmindən (RijndaelManaged) istifadə edir. Açar (Key) və IV, istifadəçinin HWID-si (Hardware ID) və təsadüfi sətirlərin SHA-512 heşindən törədilir. Bu, “Static Key” deyil, hər qurban üçün unikal açar yaradıldığını göstərir.
C2 və Məlumat Sızdırma: Ənənəvi C2 serveri əvəzinə, məlumatları (Açar, ID, Ekran görüntüsü, IP) oğurlamaq üçün Discord Webhooks (NewWebhook sinifi) istifadə edir.
Davamlılıq və Dağıdıcılıq: Özünü Startup qovluğuna kopyalayır, Windows Bərpa Nöqtələrini (DeleteRestorePoints) silir, masaüstü divar kağızını dəyişir və işini bitirdikdən sonra izləri silmək üçün del.vbs skripti ilə özünü məhv edir.
Anti-Analiz: Virtual maşınları, Sandbox-ları və debuggerləri aşkarlamaq üçün Anti sinifindən istifadə edir (lakin bu yoxlamalar bəzi konfiqurasiyalarda yan keçilə bilir).



























