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]

1  2  3  4  5  [6]  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
13471정성태12/4/20232161Copilot - To enable GitHub Copilot, authorize this extension using GitHub's device flow
13470정성태12/2/20232468닷넷: 2178. C# - .NET 8부터 COM Interop에 대한 자동 소스 코드 생성 도입파일 다운로드1
13469정성태12/1/20232178닷넷: 2177. C# - (Interop DLL 없이) CoClass를 이용한 COM 개체 생성 방법파일 다운로드1
13468정성태12/1/20232171닷넷: 2176. C# - .NET Core/5+부터 달라진 RCW(Runtime Callable Wrapper) 대응 방식파일 다운로드1
13467정성태11/30/20232149오류 유형: 882. C# - Unhandled exception. System.Runtime.InteropServices.COMException (0x800080A5)파일 다운로드1
13466정성태11/29/20232372닷넷: 2175. C# - DllImport 메서드의 AOT 지원을 위한 LibraryImport 옵션
13465정성태11/28/20232103개발 환경 구성: 689. MSBuild - CopyToOutputDirectory가 "dotnet publish" 시에는 적용되지 않는 문제파일 다운로드1
13464정성태11/28/20232207닷넷: 2174. C# - .NET 7부터 UnmanagedCallersOnly 함수 export 기능을 AOT 빌드에 통합파일 다운로드1
13463정성태11/27/20232092오류 유형: 881. Visual Studio - NU1605: Warning As Error: Detected package downgrade
13462정성태11/27/20232140오류 유형: 880. Visual Studio - error CS0246: The type or namespace name '...' could not be found
13461정성태11/26/20232205닷넷: 2173. .NET Core 3/5+ 기반의 COM Server를 registry 등록 없이 사용하는 방법파일 다운로드1
13460정성태11/26/20232164닷넷: 2172. .NET 6+ 기반의 COM Server 내에 Type Library를 내장하는 방법파일 다운로드1
13459정성태11/26/20232190닷넷: 2171. .NET Core 3/5+ 기반의 COM Server를 기존의 regasm처럼 등록하는 방법파일 다운로드1
13458정성태11/26/20232194닷넷: 2170. .NET Core/5+ 기반의 COM Server를 tlb 파일을 생성하는 방법(tlbexp)
13457정성태11/25/20232145VS.NET IDE: 187. Visual Studio - 16.9 버전부터 추가된 "Display inline type hints" 옵션
13456정성태11/25/20232438닷넷: 2169. C# - OpenAI를 사용해 PDF 데이터를 대상으로 OpenAI 챗봇 작성 [1]파일 다운로드1
13455정성태11/25/20232322닷넷: 2168. C# - Azure.AI.OpenAI 패키지로 OpenAI 사용파일 다운로드1
13454정성태11/23/20232660닷넷: 2167. C# - Qdrant Vector DB를 이용한 Embedding 벡터 값 보관/조회 (Azure OpenAI) [1]파일 다운로드1
13453정성태11/23/20232205오류 유형: 879. docker desktop 설치 시 "Invalid JSON string. (Exception from HRESULT: 0x83750007)"
13452정성태11/22/20232289닷넷: 2166. C# - Azure OpenAI API를 이용해 사용자가 제공하는 정보를 대상으로 검색하는 방법파일 다운로드1
13451정성태11/21/20232420닷넷: 2165. C# - Azure OpenAI API를 이용해 ChatGPT처럼 동작하는 콘솔 응용 프로그램 제작파일 다운로드1
13450정성태11/21/20232242닷넷: 2164. C# - Octokit을 이용한 GitHub Issue 검색파일 다운로드1
13449정성태11/21/20232340개발 환경 구성: 688. Azure OpenAI 서비스 신청 방법
13448정성태11/20/20232616닷넷: 2163. .NET 8 - Dynamic PGO를 결합한 성능 향상파일 다운로드1
13447정성태11/16/20232480닷넷: 2162. ASP.NET Core 웹 사이트의 SSL 설정을 코드로 하는 방법
13446정성태11/16/20232416닷넷: 2161. .NET Conf 2023 - Day 1 Blazor 개요 정리
1  2  3  4  5  [6]  7  8  9  10  11  12  13  14  15  ...