Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 5개 있습니다.)

실행 파일로부터 관리자 요구 권한을 제거하는 방법(부제: 크랙 버전을 보다 안전하게 실행하는 방법)

쉽게 말해서... 불나방처럼 멋모르고 불에 뛰어드는 컴퓨터 사용자들을 종종 보곤 합니다. 물론... 뭐랄까, 어쩔 수 없는 경우도 있겠지요. 가령, 학생의 신분으로 공부는 하고 싶은데 정품을 구매하자니 너무 비싼 경우가 있을 것입니다.

... 이 글을 쓰기 전에 고민이 많이 되었는데요. 제가 이런 글을 쓴다고 해서 그분들이 크랙(crack)같은 프로그램을 실행하지 않을 것도 아니고, 그래서 그나마 불에 데인다는 것은 알고 있어야 하지 않을까 싶어서 써봅니다.

그래요. 인터넷상에서 널리 퍼져 있는 각종 소프트웨어의 크랙 버전에 대해서 이야기를 해보겠습니다.

크랙 버전은 원본 소프트웨어 개발자가 배포하는 것이 아니기 때문에 그 안에 어떤 악의적인 코드가 들어있을지 알 수 없습니다. 크랙 자체가 이미 내부의 코드를 변경하는 것이기 때문에 공식적으로 배포되는 해시값을 확인하는 것도 아무런 의미가 없지요.

그렇기 때문에 크랙 버전을 여러분의 컴퓨터에서 실행한다는 것은 바이러스를 비롯해 각종 트로이 목마같은 프로그램이 "운에 따라" 설치된다고 그냥 기정 사실로 받아들이시면 됩니다. 크랙 버전을 만든 제작자가 단순 재미로 크랙을 했다면 여러분의 컴퓨터가 안전하겠지만, 혹여나 악의적인 의도를 가진 제작자였다면 여지 없이 바이러스에 감염될 것입니다.

즉, 크랙 버전을 설치하는 것은 자신의 컴퓨터를 좀비 PC로 만드는 것이나 다름없습니다.

하지만, 그나마라도 이를 막을 수 있는 방법이 있습니다. 윈도우 비스타 이후부터 제공되는 사용자 컨트롤(UAC)이 바로 그것입니다. 좀비 PC를 만들려면 대개의 경우 "관리자 권한"을 요구해야 하는데 UAC가 활성화된 경우 높은 권한의 작업들을 사용자 허락없이 할 수 없기 때문입니다.

윈도우 XP를 아직까지도 설치하시는 분들이 있는데, 크랙 버전을 사용하는 분들이라면 최소한 비스타 이후의 운영체제를 설치하시는 것이 이런 면에서 좋습니다. 따라서, 이 글은 윈도우 XP 사용자들을 위한 글이 아닙니다.




크랙된 소프트웨어의 경우, 사실 소프트웨어 자체가 관리자 권한을 요구하는 경우는 많지 않습니다. 일례로, 여러분들이 포토샵에 대한 크랙 버전을 실행한다면 관리자 권한을 요구하며 실행하지는 않는다는 것입니다.

이 때문에 종종 크랙 버전을 만드는 (악의적인) 제작자들은 악성 코드를 설치 단계에 심어놓을 수 있습니다. 애석하게도 이런 경우는 비-개발자의 힘으로 막을 수 없는 부분입니다. 이런 식으로 크랙된 소프트웨어를 설치해서 사용해야 하는 경우라면 반드시 가상 머신을 만들어서 그 안에서만 실행하는 것이 권장됩니다. 윈도우 8의 경우 Hyper-V 가상 소프트웨어가 무료로 제공되기 때문에 이를 이용하거나 Virtual Box같은 제품을 사용해도 됩니다.

그다음 대표적인 크랙 유형으로는 시리얼 키 생성 및 원본 프로그램에 대한 패치 방법이 있습니다. 예를 들어, Unity3D 같은 소프트웨어의 경우 원본 프로그램은 unity3d.com에서 받고 크랙 소프트웨어 제작자는 그에 대한 바이너리를 정품으로 인식하도록 만들어주는 크랙을 배포하는 것입니다.

엄밀히 말해서 이런 크랙인 경우 '관리자 권한'을 요구할 필요가 없습니다. 물론, 원본 실행 파일이 "C:\Program Files"에 설치되기 때문에 그 하위 폴더의 파일을 건드리려면 반드시 '관리자 권한'이어야 하므로 이런 부분 때문에 패치 프로그램도 관리자 권한을 요구하는 경우가 있습니다. 다행히, 이런 식의 프로그램이라면 안전하게 실행할 수 있는 방법이 있습니다.

우선, 원본 프로그램을 설치할 때 "C:\Program Files" 기본 폴더가 아닌 다른 폴더(예: d:\mytools)를 지정해야 합니다. 그럼, 패치 프로그램도 관리자 권한이 필요하지 않습니다.

그다음 패치 프로그램을 보면 다음과 같이 '방패' 모양의 아이콘이 달려 있을 텐데요.

runas_medium_1.png

이건 실행할 때 관리자 권한을 요구하도록 명시되어 있는 프로그램임을 의미합니다. 따라서 실행하면 다음과 같이 관리자 권한을 얻기 위한 창이 뜹니다.

runas_medium_2.png

바로 여기에 허점이 있는데요. 해당 패치 프로그램이 정말 순수하게 원본 프로그램에 대한 패치만 하는 역할이라면 관리자 권한이 필요없다는 점입니다. 따라서 관리자 권한을 요구하는 부분을 빼버리고 실행해도 악성 프로그램이 아니라면 정상적으로 패치가 이뤄지게 됩니다. (물론, 악성 프로그램이어도 정상적으로 패치가 될 수 있겠지만 어쨌든 시스템에 대한 공격은 할 수 없습니다.)

이런 식으로 관리자 권한을 요구하는 프로그램을 만드는 방법에 대해서는 예전에 설명한 적이 있습니다.

필수 무결성 제어(신뢰도 등급)을 조절하는 방법(1) - Manifest 파일 이용
; https://www.sysnet.pe.kr/2/0/445

즉, EXE 프로그램 안에 아래와 같이 설정된 .manifest 파일을 리소스로 가지고 있기 때문에,

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
  <ms_asmv2:trustInfo xmlns:ms_asmv2="urn:schemas-microsoft-com:asm.v2">
    <ms_asmv2:security>
      <ms_asmv2:requestedPrivileges>
        <ms_asmv2:requestedExecutionLevel level="requireAdministrator"
          uiAccess="false"/>
        </ms_asmv2:requestedPrivileges>
       </ms_asmv2:security>
  </ms_asmv2:trustInfo>
</assembly>

애당초 실행할 때부터 관리자 권한을 요구하도록 '방패' 모양의 아이콘이 달려 있는 것입니다. 따라서, requireAdministrator 값을 원래의 asInvoker 값으로 바꿔주면 해당 프로그램이 실행될 때 관리자 권한을 요구하지 않게 됩니다.

이를 위해 HxD와 같은 헥사 에디터를 다운로드하고,

HxD - Freeware Hex Editor and Disk Editor
; http://mh-nexus.de/en/hxd/

관리자 권한을 요청하는 패치 프로그램을 열어서 "requireAdministrator" 문자열을 검색하면 다음과 같이 찾을 수 있습니다.

runas_medium_3.png

이제 그 부분을 'asInvoker'로 바꾸고 그다음 uiAccess 문자열까지 남는 부분은 공백 문자(0x20)로 채워주시면 됩니다.

runas_medium_4.png

이렇게 바꾸고 저장하면 패치 프로그램의 아이콘에 방패 모양의 이미지가 사라지게 됩니다.

runas_medium_5.png

이 상태에서 실행시키면 이제 해당 프로그램은 관리자 권한이 아닌 일반 사용자 계정으로 실행이 되고, 따라서 시스템의 설정을 바꿀 수 있는 높은 권한의 작업들을 할 수 없게 됩니다.

적어도 이 정도의 처리만 해주셔도... 많은 경우 악성 코드 제작자로부터 자신의 PC를 보호하실 수 있을 것입니다.




정리해 보면 간단합니다.

  1. 가장 좋은 것은, 출처를 알 수 없는 인터넷상에서 프로그램을 받아 사용하지 마세요.
  2. 1번이 불가능하다면, 제발 윈도우 비스타 이상의 운영체제를 사용하시고 절대 UAC를 끄지 마세요. 이렇게만 하셔도 알 수 없는 그 프로그램이 높은 권한을 요구하는 것인지 정도는 인지할 수 있습니다.
  3. 만약 다운로드한 프로그램이 상식적으로 높은 권한을 요구할 이유가 없는 것이라면, 헥사 에디터를 이용해 권한 요청을 제거하고 실행할 수 있습니다. 또는, 가상 머신을 하나 만들어서 그 안에서 설치를 합니다. 당연히 그 가상머신은 바이러스에 걸렸다고 기본적으로 가정하고 민감한 사용자 데이터 작업은 하지 마세요.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 1/9/2023]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2014-02-18 04시38분
저는 manifest 수정해야 하면, *ResEdit* freeware 프로그램을 사용합니다. http://www.resedit.net/ 한 번 사용해 보세요
GiSeong Eom
2014-02-18 11시35분
@GiSeong Eom 좋은 툴 소개 감사합니다. ^^
정성태
2014-04-04 11시04분
[내찬RB] 경우에 따라 관리자권한이 실행시 상속되는거 같던데.
[guest]
2014-04-05 06시28분
"내찬RB"님, 그건 '경우에 따라'가 아니라 기본 동작이 그렇습니다. cmd.exe를 관리자 권한으로 실행시키고 그 안에서 다른 프로그램을 실행하면 역시 관리자 권한으로 실행됩니다.
정성태
2014-04-05 12시26분
[Visual Studio 2010] 프로페셔널 버전 (크랙판) 구해놓고,
바이러스 차단 프로그램까지 막은 후,
깔려고 하다고.. 시간이 너무 많이 걸릴 것 같아서 그만 두었는데..
오늘 아침에..
이런 글을 읽게되네요..

어쩔까나..

docx를 Visual Studio에서 보려면 Add-In을 설치해야 한다는데,
그게.. Expresss에서는 안 된다네요..
- VSTO에서 한 번 절망시키더니만..
  또 이러네..
  요즘 수입도 없는데..

그냥 맨 눈으로, 쌩 editor 쳐다보아야 하겠습니다.

좋은 글 (어려운 글) 잘 보았습니다.
감사합니다.
[guest]
2016-10-17 12시52분
정성태
2018-03-30 06시39분
[ㅁㄴㅇㄹ] 다른 나라 파일에선 저 부분을 어떻게 찾아요?
[guest]
2018-03-30 07시03분
[ㅁㄴㅇㄹ] Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker]
@="관리자 권한 끄고 실행"

[HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker\command]
@="cmd /min /C \"set __COMPAT_LAYER=RUNASINVOKER && start \"\" \"%1\"\""

으로 해보긴 했는데 바이러스 2개 뜨고 백신이 막네요

ㅎㄷㄷ
[guest]

... [16]  17  18  19  20  21  22  23  24  25  26  27  28  29  30  ...
NoWriterDateCnt.TitleFile(s)
13228정성태1/24/20235173.NET Framework: 2089. C# - WMI 논리 디스크가 속한 물리 디스크의 정보를 얻는 방법 [2]파일 다운로드1
13227정성태1/23/20234892개발 환경 구성: 659. Windows - IP MTU 값을 바꿀 수 있을까요? [1]
13226정성태1/23/20234576.NET Framework: 2088. .NET 5부터 지원하는 GetRawSocketOption 사용 시 주의할 점
13225정성태1/21/20233819개발 환경 구성: 658. Windows에서 실행 중인 소켓 서버를 다른 PC 또는 WSL에서 접속할 수 없는 경우
13224정성태1/21/20234168Windows: 221. Windows - Private/Public/Domain이 아닌 네트워크 어댑터 단위로 방화벽을 on/off하는 방법
13223정성태1/20/20234364오류 유형: 838. RDP 연결 오류 - The two computers couldn't connect in the amount of time allotted
13222정성태1/20/20234042개발 환경 구성: 657. WSL - DockerDesktop.vhdx 파일 위치를 옮기는 방법
13221정성태1/19/20234277Linux: 57. C# - 리눅스 프로세스 메모리 정보파일 다운로드1
13220정성태1/19/20234392오류 유형: 837. NETSDK1045 The current .NET SDK does not support targeting .NET ...
13219정성태1/18/20233967Windows: 220. 네트워크의 인터넷 접속 가능 여부에 대한 판단 기준
13218정성태1/17/20233904VS.NET IDE: 178. Visual Studio 17.5 (Preview 2) - 포트 터널링을 이용한 웹 응용 프로그램의 외부 접근 허용
13217정성태1/13/20234494디버깅 기술: 185. windbg - 64비트 운영체제에서 작업 관리자로 뜬 32비트 프로세스의 덤프를 sos로 디버깅하는 방법
13216정성태1/12/20234739디버깅 기술: 184. windbg - 32비트 프로세스의 메모리 덤프인 경우 !peb 명령어로 나타나지 않는 환경 변수
13215정성태1/11/20236291Linux: 56. 리눅스 - /proc/pid/stat 정보를 이용해 프로세스의 CPU 사용량 구하는 방법 [1]
13214정성태1/10/20235844.NET Framework: 2087. .NET 6부터 SourceGenerator와 통합된 System.Text.Json [1]파일 다운로드1
13213정성태1/9/20235390오류 유형: 836. docker 이미지 빌드 시 "RUN apt install ..." 명령어가 실패하는 이유
13212정성태1/8/20235136기타: 85. 단정도/배정도 부동 소수점의 정밀도(Precision)에 따른 형변환 손실
13211정성태1/6/20235163웹: 42. (https가 아닌) http 다운로드를 막는 웹 브라우저
13210정성태1/5/20234219Windows: 219. 윈도우 x64의 경우 0x00000000`7ffe0000 아래의 주소는 왜 사용하지 않을까요?
13209정성태1/4/20234109Windows: 218. 왜 윈도우에서 가상 메모리 공간은 64KB 정렬이 된 걸까요?
13208정성태1/3/20234071.NET Framework: 2086. C# - Windows 운영체제의 2MB Large 페이지 크기 할당 방법파일 다운로드1
13207정성태12/26/20224370.NET Framework: 2085. C# - gpedit.msc의 "User Rights Assignment" 특권을 코드로 설정/해제하는 방법파일 다운로드1
13206정성태12/24/20224602.NET Framework: 2084. C# - GetTokenInformation으로 사용자 SID(Security identifiers) 구하는 방법 [3]파일 다운로드1
13205정성태12/24/20224940.NET Framework: 2083. C# - C++과의 연동을 위한 구조체의 fixed 배열 필드 사용 (2)파일 다운로드1
13204정성태12/22/20224232.NET Framework: 2082. C# - (LSA_UNICODE_STRING 예제로) CustomMarshaler 사용법파일 다운로드1
13203정성태12/22/20224393.NET Framework: 2081. C# Interop 예제 - (LSA_UNICODE_STRING 예제로) 구조체를 C++에 전달하는 방법파일 다운로드1
... [16]  17  18  19  20  21  22  23  24  25  26  27  28  29  30  ...