Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
PS2EXE — PowerShell 스크립트를 실행 파일로 컴파일하는 모듈 | Kitploit
도구/GitHubGitHub/mscholtes/ps2exe
Payload GenerationScripting & AutomationUtilities & Frameworks
GitHubmscholtes/ps2exe

PS2EXE

PowerShell 스크립트를 실행 파일로 컴파일하는 모듈

저장소 보기
1.8k2472개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

AI 무료 저장소 - 인공지능이 창의성과 우리의 본성을 죽이고 있습니다!

PS2EXE

Ingo Karstein의 훌륭한 스크립트를 개선한 GUI 지원 버전입니다. GUI 출력 및 입력은 하나의 스위치로 활성화되며, 실제 Windows 실행 파일이 생성됩니다. Powershell 5.x 호환 스크립트만 컴파일합니다. 선택적 그래픽 프론트엔드 Win-PS2EXE가 포함되어 있습니다.

모듈 버전입니다.

스크립트 기반 버전은 여기에서 찾을 수 있습니다 (https://github.com/MScholtes/TechNet-Gallery).

저자: Markus Scholtes

버전: 1.0.18

날짜: 2026-06-06

설치

root@kitploit:~
PS C:\> Install-Module ps2exe

또는 여기에서 다운로드: https://www.powershellgallery.com/packages/ps2exe/.

사용법

root@kitploit:~
  Invoke-ps2exe .\source.ps1 .\target.exe

또는

root@kitploit:~
  ps2exe .\source.ps1 .\target.exe

"source.ps1"을 컴파일하여 실행 파일 target.exe를 생성합니다 (".\target.exe"를 생략하면 ".\source.exe"에 출력됩니다).

또는 다음 명령으로 그래픽 프론트엔드 Win-PS2EXE를 시작합니다

root@kitploit:~
  Win-PS2EXE

매개변수

root@kitploit:~
ps2exe [-inputFile] '<file_name>' [[-outputFile] '<file_name>']
       [-prepareDebug] [-x86|-x64] [-lcid <id>] [-STA|-MTA] [-noConsole] [-conHost] [-UNICODEEncoding]
       [-credentialGUI] [-iconFile '<filename>'] [-$embedFiles <hashtable>] [-title '<title>'] [-description '<description>']
       [-company '<company>'] [-product '<product>'] [-copyright '<copyright>'] [-trademark '<trademark>']
       [-version '<version>'] [-configFile] [-noOutput] [-noError] [-noVisualStyles] [-exitOnCancel]
       [-DPIAware] [-requireAdmin] [-supportOS] [-virtualize] [-longPaths]
root@kitploit:~
      inputFile = 실행 파일로 변환할 Powershell 스크립트 (파일은 UTF8 또는 UTF16으로 인코딩되어야 함)
     outputFile = 대상 실행 파일 이름 또는 폴더, 기본값은 확장자가 '.exe'인 inputFile
   prepareDebug = 디버깅을 위한 유용한 정보 생성
     x86 or x64 = 32비트 또는 64비트 런타임 전용으로 컴파일
           lcid = 컴파일된 실행 파일의 로캘 ID. 지정하지 않으면 현재 사용자 문화권
     STA or MTA = '단일 스레드 아파트' 또는 '다중 스레드 아파트' 모드
      noConsole = 결과 실행 파일이 콘솔 창 없이 Windows Forms 앱이 됨
        conHost = Windows Terminal 대신 conhost를 콘솔로 강제 시작 (리디렉션 비활성화)
UNICODEEncoding = 콘솔 모드에서 출력을 UNICODE로 인코딩
  credentialGUI = 콘솔 모드에서 자격 증명 프롬프트에 GUI 사용
       iconFile = 컴파일된 실행 파일의 아이콘 파일 이름
     embedFiles = 해시로 제공된 임베드할 파일, 해시의 키로 추출됨, 소스 파일 이름은 고유해야 함
                  (예: -embedFiles @{'Targetfilepath'='Sourcefilepath'} )
          title = 제목 정보 (Windows 탐색기 속성 대화상자의 세부 정보 탭에 표시됨)
    description = 설명 정보 (표시되지 않지만 실행 파일에 포함됨)
        company = 회사 정보 (표시되지 않지만 실행 파일에 포함됨)
        product = 제품 정보 (Windows 탐색기 속성 대화상자의 세부 정보 탭에 표시됨)
      copyright = 저작권 정보 (Windows 탐색기 속성 대화상자의 세부 정보 탭에 표시됨)
      trademark = 상표 정보 (Windows 탐색기 속성 대화상자의 세부 정보 탭에 표시됨)
        version = 버전 정보 (Windows 탐색기 속성 대화상자의 세부 정보 탭에 표시됨)
     configFile = 구성 파일 작성 (<outputfile>.exe.config)
       noOutput = 결과 실행 파일이 표준 출력을 생성하지 않음 (자세한 정보 및 정보 채널 포함)
        noError = 결과 실행 파일이 오류 출력을 생성하지 않음 (경고 및 디버그 채널 포함)
 noVisualStyles = 생성된 Windows GUI 응용 프로그램에 대한 비주얼 스타일 비활성화 (-noConsole과 함께만)
   exitOnCancel = Read-Host 입력 상자에서 취소 또는 "X"를 선택하면 프로그램 종료 (-noConsole과 함께만)
       DPIAware = 디스플레이 배율이 활성화된 경우 가능하면 GUI 컨트롤 배율 조정 (-noConsole과 함께만)
   requireAdmin = UAC가 활성화된 경우 컴파일된 실행 파일이 상승된 컨텍스트에서만 실행 (필요 시 UAC 대화상자 표시)
      supportOS = 최신 Windows 버전의 함수 사용 (차이를 보려면 [Environment]::OSVersion 실행)
     virtualize = 응용 프로그램 가상화 활성화 (x86 런타임 강제)
      longPaths = OS에서 활성화된 경우 긴 경로(260자 초과) 사용 (Windows 10에서만 작동)

생성된 실행 파일에는 다음의 예약된 매개변수가 있습니다:

root@kitploit:~
-? [<MODIFIER>]     Powershell help text of the script inside the executable. The optional parameter combination
                    "-? -detailed", "-? -examples" or "-? -full" can be used to get the appropriate help text.
-debug              Forces the executable to be debugged. It calls "System.Diagnostics.Debugger.Launch()".
-extract:<FILENAME> Extracts the powerShell script inside the executable and saves it as FILENAME.
                    The script will not be executed.
-wait               At the end of the script execution it writes "Hit any key to exit..." and waits for a key to be pressed.
-end                All following options will be passed to the script inside the executable.
                    All preceding options are used by the executable itself and will not be passed to the script.

참고사항

Powershell Core 사용:

PS2EXE는 Powershell Core와 함께 사용할 수 있습니다. 위에서 설명한 대로 Powershell Core에 PS2EXE 모듈을 설치하기만 하면 됩니다. 그러나 .Net Core에는 컴파일러가 포함되어 있지 않으므로 .Net Framework의 컴파일러가 사용됩니다 (.Net Framework와 Powershell 5.1은 Windows에 포함되어 있습니다).

이러한 이유로 PS2EXE는 Powershell 5.1 호환 스크립트만 컴파일하고 .Net 4.x 바이너리를 생성하지만, 지원되는 모든 Windows OS에서 종속성 없이 직접 사용할 수 있습니다.

컴파일된 실행 파일에 파일 포함:

-embedFiles 매개변수 뒤에 파일 경로가 포함된 해시 테이블을 사용하면 해당 파일이 컴파일된 실행 파일에 포함됩니다. 실행 파일 시작 시 해당 파일은 지정된 경로의 디스크에 기록됩니다. 예: -embedFiles @{'Targetfilepath1'='Sourcefilepath1';'Targetfilepath2'='Sourcefilepath2'} 소스 파일 이름은 고유해야 합니다. 절대 경로와 상대 경로 모두 허용됩니다. 대상 경로의 경우 '.\' 로 시작하는 상대 경로는 실행 파일 기준 상대 경로로 해석되며, 선행 '.\' 없이 시작하면 런타임 시 현재 경로 기준 상대 경로로 해석됩니다. 필요한 경우 시작 시 디렉터리가 자동으로 생성됩니다. 대상 경로에서 %TEMP% 또는 %APPDATA% 와 같은 cmd.exe 표기법의 환경 변수는 런타임 시 확장됩니다. 포함된 파일 중 하나를 만드는 데 실패하면 컴파일된 실행 파일이 즉시 중지됩니다.

구현되지 않은 cmdlet 목록:

기본 입출력 명령은 PS2EXE를 위해 C#으로 다시 작성해야 했습니다. 콘솔 모드에서 Write-Progress (작업량이 너무 많음) 및 Start-Transcript/Stop-Transcript (Microsoft의 적절한 참조 구현 없음)는 구현되지 않았습니다.

GUI 모드 출력 형식:

기본적으로 Powershell에서 commandlet의 출력은 줄 단위로 형식이 지정됩니다 (문자열 배열). 명령이 10줄의 출력을 생성하고 GUI 출력을 사용하는 경우 각각 OK를 기다리는 10개의 메시지 상자가 나타납니다. 이를 방지하려면 명령을 Out-String commandlet에 파이프하십시오. 그러면 출력이 10줄의 단일 문자열 배열로 변환되어 모든 출력이 하나의 메시지 상자에 표시됩니다 (예: dir C:\ | Out-String).

구성 파일:

PS2EXE는 생성된 실행 파일 이름 + ".config"로 구성 파일을 만들 수 있습니다. 대부분의 경우 이러한 구성 파일은 필요하지 않으며, 사용할 .Net Framework 버전을 알려주는 매니페스트입니다. 일반적으로 실제 .Net Framework를 사용하므로 구성 파일 없이 실행 파일을 실행해 보십시오.

매개변수 처리:

컴파일된 스크립트는 원래 스크립트와 동일하게 매개변수를 처리합니다. 한 가지 제한 사항은 Windows 환경에서 비롯됩니다. 모든 실행 파일의 모든 매개변수는 STRING 유형입니다. 매개변수 유형에 대한 암시적 변환이 없는 경우 스크립트에서 명시적으로 변환해야 합니다. 동일한 제한 사항으로 실행 파일에 콘텐츠를 파이프할 수도 있습니다 (모든 파이프 값은 STRING 유형).

암호 보안:

컴파일된 스크립트에 암호를 절대 저장하지 마십시오! -extract 매개변수를 사용하여 스크립트를 간단히 디컴파일할 수 있습니다. 예를 들어

root@kitploit:~
Output.exe -extract:C:\Output.ps1

Output.exe에 저장된 스크립트를 디컴파일합니다. 그리고 참고: 스크립트는 (의도적으로) 실행 파일에 일반 텍스트로 저장됩니다!

스크립트 변수:

PS2EXE는 스크립트를 실행 파일로 변환하므로 스크립트 관련 변수를 더 이상 사용할 수 없습니다. $MyInvocation 변수는 스크립트와 다른 값으로 설정됩니다. 특히 $PSScriptRoot 변수는 비어 있습니다. 대신 $ScriptRoot를 사용할 수 있습니다.

컴파일 여부와 관계없이 다음 코드 줄로 $PSScriptRoot를 독립적으로 얻을 수 있습니다:

root@kitploit:~
if (!$PSScriptRoot) { $PSScriptRoot = $ScriptRoot }

-noConsole 모드에서 백그라운드 창:

-noConsole 모드의 스크립트에서 외부 창이 열리면 (예: Get-Credential의 경우 또는 cmd.exe 셸이 필요한 명령의 경우) 다음 창이 백그라운드에서 열립니다. 그 이유는 외부 창을 닫을 때 Windows가 부모 창을 활성화하려고 하기 때문입니다. 컴파일된 스크립트에는 창이 없으므로 대신 컴파일된 스크립트의 부모 창(일반적으로 Explorer 또는 Powershell 창)이 활성화됩니다. 이 문제를 해결하려면 $Host.UI.RawUI.FlushInputBuffer()가 활성화할 수 있는 보이지 않는 창을 엽니다. $Host.UI.RawUI.FlushInputBuffer()를 호출하면 이 창이 닫힙니다 (계속 반복). 다음 예제는 "ipconfig | Out-String"을 단일 호출로 실행할 때 더 이상 백그라운드에서 창이 열리지 않습니다:

root@kitploit:~
$Host.UI.RawUI.FlushInputBuffer()
ipconfig | Out-String
$Host.UI.RawUI.FlushInputBuffer()

변경 사항:

1.0.18 - 2026-06-06

  • $PSScriptRoot 대체용 사전 정의 변수 $ScriptRoot
  • Win-PS2EXE의 새 버전

1.0.17 / 2025-08-21

  • 컴파일된 실행 파일에 파일을 포함하는 새 매개변수 -embedFiles

1.0.16 / 2025-07-20

  • 컴파일된 실행 파일을 Windows Terminal 대신 Conhost에서 강제 시작하는 새 매개변수 -conHost

1.0.15 / 2025-01-05

  • Powershell Core에서만 사용하는 경우 Powershell 5.1에도 모듈을 설치할 필요 없음

1.0.14 / 2024-09-15

  • 컴파일된 실행 파일의 새 매개변수 -?를 사용하여 원본 Powershell 스크립트의 도움말 표시
  • GUI 모드에서 창 제목은 응용 프로그램 제목입니다 (-title 매개변수로 컴파일 시 설정된 경우)

1.0.13 / 2023-09-26

  • 이제 스크립트 디렉터리 이름에 [ 및 ] 지원
  • 소스 파일이 16MB보다 클 수 있음 (필요한 경우)
  • Win-PS2EXE에 새 추가 매개변수 텍스트 필드

1.0.12 / 2022-11-22

  • noConsole 모드에서 WinForms 배율 조정을 지원하는 새 매개변수 -winFormsDPIAware (Windows 10 이상만 해당)

1.0.11 / 2021-11-21

  • 24자보다 긴 암호 오류 수정
  • noConsole 모드에서 배율 조정을 지원하는 새 매개변수 -DPIAware
  • 입력 상자에서 취소 시 프로그램 실행을 중지하는 새 매개변수 -exitOnCancel (noConsole 모드에서만)

1.0.10 / 2021-04-10

  • outputFile 매개변수가 이제 대상 폴더를 허용 (파일 이름 없이)

1.0.9 / 2021-02-28

  • UNICODE로 출력하는 새 매개변수 UNICODEEncoding
  • debug 매개변수를 prepareDebug로 변경
  • 드디어 고급 매개변수 사용

1.0.8 / 2020-10-24

  • 리팩토링

1.0.7 / 2020-08-21

  • 하나의 파이프라인에서 동시 진행률 표시줄 버그 수정

1.0.6 / 2020-08-10

  • 선택 프롬프트가 이제 Powershell처럼 동작 (콘솔 모드만 해당)
  • (제한된) Powershell Core 지원 (백그라운드에서 Windows Powershell 시작)
  • 음수 매개변수 값 처리 수정
  • 애니메이션 진행률 표시줄 지원 (noConsole 모드만 해당)

1.0.5 / 2020-07-11

  • 중첩 진행률 표시줄 지원 (noConsole 모드만 해당)

1.0.4 / 2020-04-19

  • GUI 응용 프로그램의 기본값으로 Application.EnableVisualStyles(), 이를 방지하는 새 매개변수 -noVisualStyles

1.0.3 / 2020-02-15

  • git diff를 허용하기 위해 파일을 UTF-16에서 UTF-8로 변환
  • 콘솔 모드의 보안 문자열 요청에서 제어 키 무시

1.0.2 / 2020-01-08

  • github에 예제 추가

1.0.1 / 2019-12-16

  • ps2exe.ps1 및 Win-PS2EXE에서 "GUI 창의 무제한 창 너비" 문제 수정

1.0.0 / 2019-11-08

  • 첫 번째 안정적인 모듈 버전

0.0.0 / 2019-09-15

  • 실험적
도구 다운로드