본문 바로가기
Tech/c#

C#에서 uac 수준을 가장 낮게 하는 방법은?

by 트리시스 2025. 3. 4.
반응형

C#을 사용하여 Windows의 UAC 수준을 가장 낮게 설정하려면 레지스트리 값을 변경해야 합니다. 그러나 이는 보안상 위험할 수 있으며 관리자 권한이 필요합니다.

1. 레지스트리를 변경하여 UAC 수준 낮추기

UAC 설정은 다음 레지스트리 키에 저장되어 있습니다:

경로:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System

중요한 값:
• "EnableLUA" (DWORD)
• 1: UAC 활성화 (기본값)
• 0: UAC 완전히 비활성화 (재부팅 필요)
• "ConsentPromptBehaviorAdmin" (DWORD)
• 2: 바탕화면이 흐려지고 UAC 프롬프트 표시 (기본값)
• 0: 자동으로 “예” 선택 (권장되지 않음)


C# 코드: UAC를 가장 낮게 설정

using System;
using Microsoft.Win32;

class Program
{
    static void Main()
    {
        try
        {
            // 관리자 권한 확인
            if (!IsAdministrator())
            {
                Console.WriteLine("이 프로그램은 관리자 권한이 필요합니다.");
                return;
            }

            // 레지스트리 키 경로
            string keyPath = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System";

            // 레지스트리 변경
            using (RegistryKey key = Registry.LocalMachine.OpenSubKey(keyPath, true))
            {
                if (key != null)
                {
                    key.SetValue("EnableLUA", 0, RegistryValueKind.DWord); // UAC 완전 비활성화
                    key.SetValue("ConsentPromptBehaviorAdmin", 0, RegistryValueKind.DWord); // UAC 프롬프트 자동 승인
                    Console.WriteLine("UAC 수준을 가장 낮게 설정했습니다. 재부팅 후 적용됩니다.");
                }
                else
                {
                    Console.WriteLine("레지스트리 키를 찾을 수 없습니다.");
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("오류 발생: " + ex.Message);
        }
    }

    static bool IsAdministrator()
    {
        var identity = System.Security.Principal.WindowsIdentity.GetCurrent();
        var principal = new System.Security.Principal.WindowsPrincipal(identity);
        return principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator);
    }
}

2. 관리자 권한으로 실행 필요

이 프로그램을 실행할 때 관리자 권한이 필요합니다.

관리자 권한으로 실행하도록 설정하는 방법
1. app.manifest 파일을 생성하고 다음 코드를 추가합니다:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

2. 프로젝트를 다시 빌드하면 관리자 권한을 요청하는 UAC 프롬프트가 나타납니다.

3. 적용 후 재부팅 필요

UAC 설정을 변경하면 반드시 시스템을 재부팅해야 적용됩니다.

C#에서 Windows를 자동으로 재부팅하는 방법:

System.Diagnostics.Process.Start("shutdown", "/r /t 0");

주의사항
• 보안 위험: UAC를 완전히 끄면 악성코드 실행 위험이 커집니다.
• 일부 프로그램 호환성 문제: UAC가 꺼진 상태에서 특정 프로그램이 정상 작동하지 않을 수 있습니다.
• 기업 환경에서는 GPO 정책에 의해 차단될 수 있음
• UAC를 다시 활성화하려면 "EnableLUA" 값을 1로 변경 후 재부팅해야 합니다.

결론

위 코드를 실행하면 UAC가 완전히 비활성화되며, UAC 프롬프트 없이 프로그램이 실행됩니다. 그러나 보안 위험이 크므로 작업 스케줄러 등을 이용한 우회 방법을 추천합니다.

반응형

댓글