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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Winstrument — Winstrument is a framework of modular scripts to aid in instrumenting Windows software using Frida for reverse engineering and attack surface analysis. | Kitploit
도구/GitHubGitHub/nccgroup/winstrument
Vulnerability AnalysisDynamic Code Analysis (DAST)Reverse EngineeringBinary Analysis
GitHubnccgroup/winstrument

Winstrument

Winstrument is a framework of modular scripts to aid in instrumenting Windows software using Frida for reverse engineering and attack surface analysis.

저장소 보기
6896년 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Winstrument

Winstrument는 Frida를 사용하여 Windows 소프트웨어를 계측(instrument)하여 리버스 엔지니어링 및 공격 표면 분석을 돕는 모듈식 스크립트 프레임워크입니다.

목차

  • 설치
  • 사용법
  • 프로젝트 구조
  • 모듈
  • CLI
  • 문제 해결
  • 저작권

설치

이 프로젝트는 Python 3.7을 지원합니다. Python과 pip가 이미 설치되어 있다고 가정하고, 간단히 다음을 실행하세요:

root@kitploit:~
pip install winstrument

그런 다음 프로그램을 실행하려면 다음을 실행하세요:

root@kitploit:~
winstrument

이 도구는 현재 실험 단계이며, 때때로 멈추거나 다른 안정성 문제가 발생할 수 있습니다.

새로 설치한 Windows 10과 같은 경우, Frida를 설치할 때 pip에서 SSL 오류가 발생할 수 있습니다. 이런 경우 아래의 문제 해결을 참조하세요.

사용법

winstrument REPL을 실행하려면 winstrument를 실행하면 됩니다. 다음은 registry 모듈을 사용하여 notepad.exe를 계측하는 간단한 예시입니다. 사용 가능한 CLI 명령에 대한 전체 정보는 아래의 CLI 섹션을 참조하세요.

root@kitploit:~
PS C:\winstrument> winstrument
> set target C:\Windows\System32\notepad.exe
> use registry
> run
Spawned 1144
instrumented process with pid: 1144 and path: C:\Windows\System32\notepad.exe

<User closes notepad from GUI>

detached from 1144 for reason process-terminated
> show registry
module    time               target                           function          hkey                subkey                                                                       value
--------  -----------------  -------------------------------  ----------------  ------------------  ---------------------------------------------------------------------------  ---------------------------------
registry  2019-08-19 07:03:07  C:\Windows\System32\notepad.exe  RegGetValueW      0x2f4               SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize                 AppsUseLightTheme
<...>

위 예시에서 사용자는 대상 프로세스를 지정합니다(이 경우 notepad.exe). 그런 다음 프로그램이 수행하는 레지스트리 관련 시스템 호출을 열거하는 registry 모듈을 사용하도록 지정합니다. 프로세스가 종료되면(사용자가 메모장을 닫음) 저장된 출력은 show registry를 사용하여 확인할 수 있습니다.

프로젝트 구조

기본 Python 파일인 winstrument.py는 Frida 디바이스를 초기화하고 대상 프로세스의 인스턴스를 생성(spawn)합니다. cmdline.py는 cmd2를 사용하여 명령줄 인터페이스를 제공합니다. Winstrument를 명령줄에서 직접 실행할 때의 주요 스크립트 진입점입니다. 명령에 대한 설명은 아래에 문서화되어 있습니다.

그런 다음 활성화된 각 모듈을 차례로 처리하고, 인스턴스화한 후 해당 모듈의 load_scripts() 메서드를 호출하여 프로세스를 계측합니다. 마지막으로 대상에서 분리될 때 각 모듈에 대해 get_output()과 on_finish()를 호출합니다.

모듈은 modules/ 디렉터리의 .py 파일에 포함되어 있습니다. 모듈은 주입할 코드, 해당 주입 코드에 대한 메시지 처리 및 출력을 정의하는 base_module.BaseInstrumentation의 하위 클래스로 구성됩니다. 모듈 API에 대한 자세한 내용은 아래의 "모듈" 섹션에서 설명합니다.

각 모듈은 설명과 같은 메타데이터를 modules/metadata.toml에 저장합니다. 섹션 제목은 모듈 이름(대소문자 구분 없음)으로 지정해야 합니다. 예를 들어, 다음은 dlls 모듈에 해당하는 섹션입니다:

root@kitploit:~
[DLLS]
description = """Hooks LoadLibrary-family system calls and outputs DLL loads where part of the search path might be
writable by the current user or a low-privileged user group."""

프로그램은 설정을 %APPDATA%/winstrument의 settings.toml에 저장합니다. 대부분(전부는 아니더라도)의 모듈이 대상 프로세스에 Javascript를 주입하므로, modules/js/ 디렉터리에는 모듈이 로드하고 주입하는 Frida Javascript 스니펫이 포함되어 있습니다. 이 파일들은 모듈과 동일한 이름을 가져야 합니다. 즉, dlls.py 모듈은 js/dlls.js의 JS를 사용합니다.

모듈

위에서 설명한 대로 각 모듈은 base_module.py의 BaseInstrumentation을 하위 클래스로 사용합니다.

각 모듈은 이름(python 및 js 파일의 확장자를 제외한 이름)을 modulename이라는 정적 클래스 속성으로 정의해야 합니다. 모듈은 BaseInstrumentation의 다음 메서드를 사용하거나 재정의할 수 있습니다:

  • __init__(self,*args,**kwargs) - 모듈별 초기화 코드 외에도 이 생성자는 super().__init__(*args,**kwargs)를 호출해야 합니다.
  • load_script(self) - 이 메서드는 일반적으로 재정의할 필요가 없습니다. BaseInstrumentation의 구현이 대부분의 사용 사례에 충분하기 때문입니다. Frida 이벤트에 후크하려면 대신 register_callbacks()를 재정의하세요. load_script는 계측할 javascript 파일을 로드하고, Frida의 session.create_script를 호출하고, 원하는 콜백을 추가한 다음, 스크립트 객체의 load() 메서드를 호출하여 계측하는 데 사용해야 합니다.
  • register_callbacks(self) - BaseInstrumentation.load_script가 스크립트를 대상 프로세스에 로드하기 전에 호출합니다. _session.on('message') 등과 같은 이벤트를 등록하는 데 사용됩니다. BaseInstrumentation 버전은 기본적으로 on_message에 대한 후크를 추가합니다.
  • write_message(message) - JSON 유사 메시지를 dict로 받아 sqlite 데이터베이스에 기록하고 나중에 출력할 수 있도록 저장합니다.

CLI

Winstrument 셸은 다음 명령을 제공합니다:

  • list - 사용 가능하고 로드된 모든 모듈을 표시합니다.
  • load <modulename>/use <modulename> - 지정된 이름의 모듈을 활성화합니다.
  • unload <modulename> - 지정된 이름의 모듈을 비활성화합니다.
  • set [setting [value]] - 인수 없이 실행하면 모든 설정과 해당 값을 표시합니다. 인수가 하나면 setting의 값을 표시합니다. 인수가 두 개면 setting을 value로 설정합니다. 설정은 여러 실행에 걸쳐 유지됩니다.
  • show [modulename [format]] - 지정된 format으로 modulename의 저장된 입력을 표시합니다. 인수 없이 실행하면 포맷터 목록을 확인할 수 있습니다.
  • info <modulename> - 지정된 이름의 모듈에 대한 설명을 출력합니다.
  • run - 계측을 시작합니다.
  • // - CLI를 종료합니다(물론입니다).

문제 해결

Frida 설치 시 pip가 "SSL Certificate Verify Failed" 오류로 실패하는 경우

이 문제는 주로 Windows를 새로 설치한 경우에 발생하는 것으로 보입니다. Frida의 setup.py는 https://files.pythonhosted.org에서 .egg 파일을 가져오려고 시도합니다. 어떤 경우에는 해당 도메인의 SSL 인증서가 검증되지 않아 실패합니다. 이는 Windows가 루트 CA를 로드하는 방식의 부작용으로 보입니다. Windows는 기본 설치에서 모든 루트 CA를 포함하지 않는 것 같으며, 대신 웹사이트를 방문할 때 필요에 따라 가져오는 방식을 선호합니다. 그 결과 files.pythonhosted.org의 SSL 인증서에 서명한 루트 CA가 시스템 신뢰 저장소에 없을 수 있습니다.

이 문제를 해결하려면 Edge 또는 Chrome에서 https://files.pythonhosted.org를 직접 방문하여 Windows가 루트 CA를 신뢰 저장소에 추가하도록 한 다음 pip install을 다시 시도하세요. Firefox에서 페이지를 방문하는 것은 작동하지 않습니다. Firefox는 시스템 저장소 대신 자체 신뢰 저장소를 사용하기 때문입니다.

저작권

Winstrument는 GPLv3로 라이선스가 부여됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.

도구 다운로드
  • post_load(self) - 스크립트가 대상 프로세스 내부에 로드된 후 BaseInstrumentation.load_script에 의해 호출됩니다. 예를 들어 스크립트가 내보낸 rpc 메서드를 호출하는 데 사용할 수 있습니다.
  • get_output(self) - 대상이 분리될 때 기본 스크립트에 의해 호출됩니다. 이 메서드는 각 항목이 MoudleMessage 객체(data/module_message.py에서)인 목록을 반환해야 합니다. 일반적으로 재정의할 필요는 없습니다.
  • on_message(self,message,data) - 주입된 JS의 send에 의해 트리거되는 frida message 이벤트를 처리하기 위한 콜백입니다.
  • on_finish(self) - 대상이 분리될 때 기본 스크립트에 의해 호출되는 콜백입니다. 필요한 정리 작업을 여기서 수행합니다.
  • q
    quit
    exit