[QT,C++] RDP 원격제어 차단

JEONGKI'S Note·2023년 2월 14일
0

QT Creator 소스

QSettings를 사용해 레지스트리를 수정한다.

void IntroDialog::blockRDP()
{
    // 원격제어 서비스 중단을 위한 레지스트리 수정
    onIntroDlgDebug(QString("[%0] Check RDP").FUN_INFO);
    try
    {
        QSettings registry("HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Terminal Server",QSettings::NativeFormat);
        if(registry.value("fDenyTSConnections") == 0){
            onIntroDlgDebug(QString("[%0] Disable RDP").FUN_INFO);
            registry.setValue("fDenyTSConnections",1);
            registry.sync();
        }
    }catch(...)
    {

    }
}

어플리케이션 실행시 관리자 권한 부여

관리자 권한을 부여하는 방법에는 두가지 방법이 있습니다.
이미 배포되어있는 경우에는 첫번째 방법을 적용하기 어렵습니다.
소스의 레지스트리 수정은 어플리케이션이 관리자로 실행되어야 정상적으로 작동하므로
위의 소스를 정상적으로 작동시키려면 어플리케이션에 관리자 권한을 부여야 해야합니다.

방법1. 출력된 실행파일의 속성에서 관리자 권한으로 실행되도록 수정한다.

방법2. 빌드시 관리자 권환 실행파일로 생성

2.1 "프로젝트명.rc"와 "프로젝트명.exe.manifest" 두 파일을 메모장으로 생성해준다.

2.2 rc 파일 내용

#include <windows.h>
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "프로젝트명.exe.manifest"

2.3 manifest 파일 내용

<?xml version="1.0" encoding="utf-8" standalone="yes"?>

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

  <assemblyIdentity version="2.0.0.0" processorArchitecture="X86"

  name="App" type="win32" />

  <description>App</description>

  <dependency />

  <!-- Identify the application security requirements. -->

  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">

    <security>

      <requestedPrivileges>

        <requestedExecutionLevel

          level="requireAdministrator"

          uiAccess="false"/>

        </requestedPrivileges>

       </security>

   </trustInfo>

   <!-- padding to four-byte multiple file size including the byte order mark -->

  <!-- padding 123 -->

</assembly>

2.4 QtCreator를 관리자 권환으로 실행한다.

2.5 pro 파일에 아래 내용을 추가한다.

win64
{
   RC_FILE = 프로젝트명.rc
}

참고자료
CMD RDP 차단 명령
Manifest파일을 활용한 관리자 권한부여

profile
주니어 개발자 공부노트입니다 :)

0개의 댓글