mona v3 banner
MONA v3
<a id="table-of-contents"></a>
📑 목차
이 저장소에는 WinDBG(X) 및 Immunity Debugger에서 Mona v3를 실행하는 데 필요한 Python 파일들이 포함되어 있습니다.
주요 특징 (Highlights)
- Python 3 지원: Python 3와 호환되며 (최대 3.14.4 버전까지 테스트됨), 최신 버전의 PyKD Python 라이브러리와 PyKD-ext 부트스트래퍼가 필요합니다. pykd-ext 부트스트래퍼 버전 2.0.0.25 이상 사용을 권장합니다.
- 하위 호환성: 여전히 Python 2.7.18에서 실행 가능합니다 (PyKD 및 PyKD-ext를 통해)
- 다중 아키텍처: x86 및 x64 디버깅 세션을 모두 지원합니다 (참고: 모든
mona 명령어는 64비트에서 사용 가능한 것은 아닙니다)
- 테스트 환경: Windows 7, Windows 10, 그리고 Windows 11에서 테스트되었습니다.
<br> <br>
<a id="setting-up-mona"></a>
🛠️ Mona 설정하기
<br>
<a id="1-install-dependencies"></a>
📦 1. 종속성 설치 (Install dependencies)
1.1. Windows 10 이상
Windows 10 이상의 경우, CorelanTraining 저장소의 CorelanPyKDInstall.ps1 PowerShell 스크립트를 사용하는 것을 권장합니다.
이 스크립트는 다음 작업을 자동으로 수행합니다:
- Python 3.9.13 (32비트 및 64비트 모두) 설치
- PyKD Python 라이브러리 설치
- Keystone-engine Python 라이브러리 설치
- PyKD-ext 부트스트래퍼 WinDBG 확장 설치
- Visual Studio 런타임 및 필요한 DLL 등록
만약 이러한 구성 요소를 직접 설치하려는 경우, 설치 후 Python 3과 PyKD가 예상대로 작동하는지 확인하십시오:
관리자 명령 프롬프트를 엽니다.
py -3.9-32를 실행합니다.
Python 3.9.13 32비트가 실행되는 Python 대화형 셸이 나타나야 합니다:
C:\>py -3.9-32
Python 3.9.13 (tags/v3.9.13:6de2ca5, May 17 2022, 16:24:45) [MSC v.1929 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
...
다음 명령을 입력하고 경고나 오류가 없는지 확인합니다:
import pykd
import keystone
quit()
다음으로 py -3.9-64를 실행합니다.
이렇게 하면 Python 3.9.13 64비트가 실행되는 Python 대화형 셸을 제공할 것입니다.
C:>py -3.9-64
Python 3.9.13 (tags/v3.9.13:6de2ca5, May 17 2022, 16:36:42) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
...
다음 명령어를 입력하고 경고나 오류가 없는지 확인하세요:
import pykd
import keystone
quit()
<br>
1.2. Windows 7
Windows 7을 여전히 사용 중이라면:
먼저 Python 2.7.18을 설치하세요.
다음으로, CorelanTraining repo에서 CorelanWin7VMinstall.py 파이썬 스크립트 사본을 다운로드하여 관리자 명령 프롬프트(Administrator Command Prompt)에서 실행하세요.
(파일을 C: 드라이브에 저장했다고 가정합니다)
C:\>cd Python27
C:\Python27>python c:\CorelanWin7VMinstall.py
이렇게 하면 Windows 7에서 mona를 실행하는 데 필요한 모든 구성 요소가 설치됩니다.
<br>
1.3. 64비트에 대한 참고 사항
WinDBG(X)의 64비트 버전은 64비트 니모닉스를 opcodes로 어셈블링하는 것을 지원하지 않습니다.
Mona는 windbglib.py에 작은 어셈블리 캐시를 포함하고 있지만... 이것만으로는 모든 요구 사항을 충족하기에는 충분하지 않습니다.
keystone-engine이 설치되어 있으면, windbglib.py가 필요할 때 이를 사용합니다.
설치되어 있지 않다면, 64비트 어셈블리 지원이 매우 제한적일 것이며(어셈블리 캐시에 있는 항목으로 한정), 임의의 어셈블리 구문을 처리하는 일부 명령어는 실패할 수 있습니다.
<br>
1.4. Python 3.14.4에서 mona를 실행하도록 도와주시겠어요?
네, 물론입니다. 앞서 언급된 CorelanPyKDInstall.ps1 스크립트는 Python 3.14.4와 필요한 모든 종속성을 자동으로 설치할 것입니다. 수동으로 진행하기를 선호한다면, 단계별 지침은 다음과 같습니다:
1.4.1. Python 3.14.4 설치 (32비트 및 64비트 모두)
아래 URL에서 설치 프로그램을 다운로드하고 각 설치 프로그램을 실행하세요.
1.4.2. pip 업그레이드:
py -3.14-32 -m pip install --upgrade pip
py -3.14 -m pip install --upgrade pip
1.4.3. keystone 엔진 설치:
py -3.14-32 -m pip install keystone-engine
py -3.14 -m pip install keystone-engine
1.4.4. pykd 라이브러리 다운로드:
파일을 추출하면 2개의 .whl 파일(및 기타 파일)을 얻게 됩니다. pip를 사용하여 파이썬 휠(.whl 파일)을 설치합니다.
추출된 .whl 파일이 포함된 폴더에서 (실제 파일 이름을 확인하세요):
py -3.14-32 -m pip install pykd-0.3.4.15+g19ddf62-cp314-win32.whl
py -3.14 -m pip install pykd-0.3.4.15+g19ddf62-cp314-win-amd64.whl
1.4.5. pykd-ext 버전 2.0.0.25 실행 확인:
WinDBG를 엽니다. !load pykd를 실행한 다음 !pykd.info를 입력하여 pykd-ext 버전을 확인합니다.
이전 버전을 사용하는 경우:
-
%LOCALAPPDATA%\DBG extbackslash EngineExtensions및%LOCALAPPDATA%`DBG extbackslash EngineExtensions32`에서 기존의 pykd.dll 파일을 제거합니다.
-
v2.0.0.25 버전을 여기서 다운로드합니다:
-
x66.zip 파일에서 pykd.dll을 %LOCALAPPDATA%\DBG extbackslash EngineExtensions32` 안에 넣습니다.
-
x64.zip 파일에서 pykd.dll을 %LOCALAPPDATA%\DBG extbackslash EngineExtensions` 안에 넣습니다.
모두 준비되었습니다! 이것으로 충분할 것입니다.
pykd를 로드한 후, 이제 !py -3.14를 호출하여 mona.py를 실행할 수 있습니다.
아래 절차의 지침도 그에 맞게 조정하십시오.
---<br> <br>
<a id="2-install-mona-windbglib"></a>
📥 2. mona 및 windbglib 설치
두 가지 설치 접근 방식이 있습니다:
<br>
2.1. 분산 설치 (Distributed installation)
이 설정은 각 디버거 애플리케이션마다 mona.py와 windbglib.py의 별도 복사본을 설치하는 것을 포함합니다.
기록으로 남기자면, 저희는 중앙 집중식 위치를 사용하는 것을 권장하고 선호하지만, 만약 각 디버거에 대해 개별적인 mona.py와 windbglib.py를 사용하여 작동하는 방법을 알고 싶다면 아래 단계를 따를 수 있습니다.
우선, 이 저장소에서 mona.py와 windbglib.py를 다운로드하여 어딘가에 보관하세요.
⚠️ 중요: 다운로드한 파일에 HTML이 아닌 실제 Python 코드가 포함되어 있는지 확인하십시오.
WinDBG Classic의 경우:
- 32비트: 2개 파일을
C:\Program Files (x86)\Windows Kits\10\Debuggers\x86 아래에 배치합니다.
- 64비트: 2개 파일을
C:\Program Files (x86)\Windows Kits\10\Debuggers\x64 아래에 배치합니다.
이렇게 하면 WinDBG Classic 애플리케이션과 상대적인 경로여야 하므로, 절대 경로를 제공할 필요 없이 mona.py를 참조할 수 있게 됩니다.
Immunity Debugger의 경우:
mona.py를 다음 위치에 배치합니다: C:\Program Files (x86)\Immunity Inc\Immunity Debugger\PyCommands
- 참고: Immunity에는
windbglib.py가 필요하지 않습니다
WinDBGX의 경우:
- 원하는 아무 위치에서
mona.py를 참조하세요. WinDBG Classic 프로그램 폴더 내의 파일 중 하나를 직접 참조해야 할 가능성이 매우 높습니다.
<br>
2.2. 중앙 집중식 설치 (Centralized installation) (권장)
장점: 시스템에 단일 복사본을 유지할 수 있습니다. 각 mona up 업데이트는 모든 디버거에 즉시 적용됩니다. 기본적으로, mona up은 또한 keystone-engine, openai, anthropic, openai-agents와 같이 mona가 사용하는 이미 설치된 선택적 Python 패키지들을 확인하고 현재 설치/임포트 가능한 것들만 새로 고칩니다.
만약 mona up이 해당 선택적 패키지 새로 고치기 단계를 건너뛰게 하려면, 다음을 설정하세요:
!
!mona config -set pip_update false
허용되는 값은 대소문자를 구분하지 않으며, true/false, yes/no, on/off, 그리고 1/0을 포함합니다.
파일들을 중앙 위치에 배치할 것입니다. 이는 파일들을 절대 경로를 사용하여 참조해야 함을 의미합니다.
걱정하지 마세요. 전체 경로를 입력하는 것을 피하기 위해 WinDBG(X) 별칭(aliases)을 사용할 예정입니다. 사실, 목표는 단순히 !mona를 실행하는 것입니다.
<br>
1단계: 중앙 위치 설정
예를 들어 C:\Tools\mona3와 같은 중앙 폴더를 생성합니다.
(다른 폴더를 만들기로 결정했다면, 아래 명령어를 그에 맞게 업데이트해 주세요)
이 저장소에서 mona.py와 windbglib.py를 다운로드하여 중앙 폴더인 C:\Tools\mona3에 저장합니다.
⚠️ 중요: 다운로드한 파일들이 HTML이 아닌 실제 Python 코드를 포함하는지 확인하세요.
<br>
2단계: WinDBG Classic / WinDBGX 설정을 위한 구성
alias(별칭)을 사용하여 C:\Tools\mona3에서 파일을 직접 참조합니다 (자동 로딩 설정은 아래 섹션 B 참고).
권장 사항: WinDBG(X)에서 mona를 실행할 때는 Python 3.9을 사용하세요.
Immunity Debugger나 Python2 스크립트를 사용하지 않는다면, 시스템에서 Python 2를 안전하게 제거해도 됩니다.
<br>
3단계: Immunity Debugger 설정을 위한 구성
옵션 A: 심볼릭 링크 생성 (권장)
관리자 명령 프롬프트(Administrator Command Prompt)에서:
mklink "C:\Program Files (x86)\Immunity Inc\Immunity Debugger\PyCommands\mona.py" "C:\Tools\mona3\mona.py"
옵션 B: 파일 직접 복사
mona.py를 다음 위치에 복사합니다: C:\Program Files (x86)\Immunity Inc\Immunity Debugger\PyCommands
⚠️ [IMG:N] 형식 토큰은 이미지 placeholder 입니다. 번역하지 말고 원래 위치에 그대로 유지하세요.
Python 2 설정 (Immunity 실행에 필수):
- 설치 Python 2.7.18 (32비트 버전만)
- 32비트
C:\Python27 폴더가 시스템 PATH 환경 변수에 포함되어 있는지 확인하세요.
- 검증: 명령 프롬프트를 열고
python을 입력하면 Python 2.7.18 (32비트)이 실행되어야 합니다.
- 대안: PATH를 임시로 설정하는 런처
.bat 파일은 아래 섹션 E를 참조하세요.
<br> <br>
<a id="running-mona"></a>
▶️ Mona 실행
<br>
A. WinDBG Classic 및 WinDBGX에서 Mona 실행
참고: 관리자 명령 프롬프트(Administrator Command Prompt)에서 WinDBG Classic 또는 WinDBGX를 실행하는 것을 권장합니다. 이렇게 하면 디버거가 관리자 권한으로 실행되며, 명령줄 인수를 더 쉽게 전달할 수 있습니다.
WinDBG Classic
1단계: WinDBG Classic을 실행하세요.