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)
13327정성태4/19/20233754VS.NET IDE: 183. C# - .NET Core/5+ 환경에서 Fakes를 이용한 단위 테스트 방법
13326정성태4/18/20235144.NET Framework: 2109. C# - 닷넷 응용 프로그램에서 SQLite 사용 (System.Data.SQLite) [1]파일 다운로드1
13325정성태4/18/20234473스크립트: 48. 파이썬 - PostgreSQL의 with 문을 사용한 경우 연결 개체 누수
13324정성태4/17/20234288.NET Framework: 2108. C# - Octave의 "save -binary ..."로 생성한 바이너리 파일 분석파일 다운로드1
13323정성태4/16/20234196개발 환경 구성: 677. Octave에서 Excel read/write를 위한 io 패키지 설치
13322정성태4/15/20234996VS.NET IDE: 182. Visual Studio - 32비트로만 빌드된 ActiveX와 작업해야 한다면?
13321정성태4/14/20233794개발 환경 구성: 676. WSL/Linux Octave - Python 스크립트 연동
13320정성태4/13/20233786개발 환경 구성: 675. Windows Octave 8.1.0 - Python 스크립트 연동
13319정성태4/12/20234228개발 환경 구성: 674. WSL 2 환경에서 GNU Octave 설치
13318정성태4/11/20234046개발 환경 구성: 673. JetBrains IDE에서 "Squash Commits..." 메뉴가 비활성화된 경우
13317정성태4/11/20234186오류 유형: 855. WSL 2 Ubuntu 20.04 - error: cannot communicate with server: Post http://localhost/v2/snaps/...
13316정성태4/10/20233518오류 유형: 854. docker-compose 시 "json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)" 오류 발생
13315정성태4/10/20233719Windows: 245. Win32 - 시간 만료를 갖는 컨텍스트 메뉴와 윈도우 메시지의 영역별 정의파일 다운로드1
13314정성태4/9/20233807개발 환경 구성: 672. DosBox를 이용한 Turbo C, Windows 3.1 설치
13313정성태4/9/20233893개발 환경 구성: 671. Hyper-V VM에 Turbo C 2.0 설치 [2]
13312정성태4/8/20233886Windows: 244. Win32 - 시간 만료를 갖는 MessageBox 대화창 구현 (개선된 버전)파일 다운로드1
13311정성태4/7/20234398C/C++: 163. Visual Studio 2022 - DirectShow 예제 컴파일(WAV Dest)
13310정성태4/6/20233976C/C++: 162. Visual Studio - /NODEFAULTLIB 옵션 설정 후 수동으로 추가해야 할 library
13309정성태4/5/20234149.NET Framework: 2107. .NET 6+ FileStream의 구조 변화
13308정성태4/4/20234037스크립트: 47. 파이썬의 time.time() 실숫값을 GoLang / C#에서 사용하는 방법
13307정성태4/4/20233808.NET Framework: 2106. C# - .NET Core/5+ 환경의 Windows Forms 응용 프로그램에서 HINSTANCE 구하는 방법
13306정성태4/3/20233633Windows: 243. Win32 - 윈도우(cbWndExtra) 및 윈도우 클래스(cbClsExtra) 저장소 사용 방법
13305정성태4/1/20233992Windows: 242. Win32 - 시간 만료를 갖는 MessageBox 대화창 구현 (쉬운 버전)파일 다운로드1
13304정성태3/31/20234341VS.NET IDE: 181. Visual Studio - C/C++ 프로젝트에 application manifest 적용하는 방법
13303정성태3/30/20233665Windows: 241. 환경 변수 %PATH%에 DLL을 찾는 규칙
13302정성태3/30/20234283Windows: 240. RDP 환경에서 바뀌는 %TEMP% 디렉터리 경로
1  2  3  4  5  6  7  8  9  10  11  [12]  13  14  15  ...