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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
ida-pro-mcp — IDA Pro와 언어 모델을 MCP를 통해 연결하는 AI 기반 리버스 엔지니어링 어시스턴트. | Kitploit
도구/GitHubGitHub/mrexodia/ida-pro-mcp
Static AnalysisDynamic Analysis (Sandboxing)Code AnalysisExploitationReverse EngineeringDebuggersMalware AnalysisBinary AnalysisLearning & EducationAI-Assisted ReversingFirmware AnalysisAI-Assisted Reversing #1위
11.3k1.3k3013일 전Kitploit 검토 완료
Binary Analysis #20위
Debuggers #17위
Reverse Engineering #18위
GitHubmrexodia/ida-pro-mcp

ida-pro-mcp

IDA Pro와 언어 모델을 MCP를 통해 연결하는 AI 기반 리버스 엔지니어링 어시스턴트.

저장소 보기웹사이트

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

IDA Pro MCP

IDA Pro에서 vibe 리버싱을 할 수 있는 간단한 MCP 서버입니다.

https://github.com/user-attachments/assets/6ebeaa92-a9db-43fa-b756-eececce2aca0

영상에 사용된 바이너리와 프롬프트는 mcp-reversing-dataset 저장소에서 확인할 수 있습니다.

사전 요구 사항

  • Python (3.11 이상)
    • idapyswitch를 사용하여 최신 Python 버전으로 전환하세요
  • IDA Pro (8.3 이상, 9 권장), IDA Free는 지원되지 않습니다
  • 지원되는 MCP 클라이언트 (원하는 것 하나 선택)
    • Amazon Q Developer CLI
    • Augment Code
    • Claude
    • Claude Code
    • Cline
    • Codex
    • Copilot CLI
    • Crush
    • Cursor
    • Gemini CLI
  • Kilo Code
  • Kiro
  • LM Studio
  • Opencode
  • Qodo Gen
  • Qwen Coder
  • Roo Code
  • Trae
  • VS Code
  • VS Code Insiders
  • Warp
  • Windsurf
  • Zed
  • Kimi Code
  • 기타 MCP 클라이언트: ida-pro-mcp --config를 실행하여 사용 중인 클라이언트용 JSON 구성을 가져오세요.
  • 참고: idalib가 전역적으로 활성화되어 있고 uv가 설치되어 있어야 합니다:

    root@kitploit:~
    # windows
    uv run "C:\Program Files\IDA Professional 9.3\idalib\python\py-activate-idalib.py"
    # macos
    uv run "/Applications/IDA Professional 9.3.app/Contents/MacOS/idalib/python/py-activate-idalib.py"
    

    설치 (Claude Code)

    Claude Code에 최신 IDA Pro MCP를 설치하려면:

    root@kitploit:~
    claude plugin marketplace add mrexodia/claude-marketplace
    claude plugin uninstall ida-pro-mcp@mrexodia
    claude plugin install ida-pro-mcp@mrexodia
    

    설치 (Codex)

    Codex에 최신 IDA Pro MCP를 설치하려면:

    root@kitploit:~
    codex plugin marketplace add mrexodia/codex-marketplace
    codex plugin remove ida-pro-mcp@mrexodia
    codex plugin add ida-pro-mcp@mrexodia
    

    설치 (Kimi Code)

    Kimi Code에 최신 IDA Pro MCP를 설치하려면 채팅에서 이 슬래시 명령을 실행하세요:

    root@kitploit:~
    /plugins install https://github.com/mrexodia/ida-pro-mcp/tree/main
    /reload
    

    이렇게 하면 idalib MCP 서버와 idapython 스킬이 설치됩니다. 플러그인은 $KIMI_CODE_HOME/plugins/managed/에 복사되므로 uv가 PATH에 있어야 합니다. 설치 후 첫 세션은 uv가 서버가 응답하기 전에 의존성을 해석하기 때문에 더 느립니다.

    설치 (GUI)

    참고: MCP 플러그인은 더 이상 권장되지 않으며 결국 더 이상 사용되지 않을 예정입니다. 대신 idalib-mcp를 사용하세요.

    IDA GUI에서 MCP 서버를 수동으로 구성하려면:

    root@kitploit:~
    pip uninstall ida-pro-mcp
    pip install https://github.com/mrexodia/ida-pro-mcp/archive/refs/heads/main.zip
    

    MCP 서버를 구성하고 IDA 플러그인을 설치하세요:

    root@kitploit:~
    ida-pro-mcp --install
    

    중요: 설치가 적용되도록 IDA와 MCP 클라이언트를 완전히 재시작해야 합니다. 일부 클라이언트(예: Claude)는 백그라운드에서 실행되므로 트레이 아이콘에서 종료해야 합니다.

    프롬프트 엔지니어링

    LLM은 환각(hallucination)에 취약하므로 프롬프트를 구체적으로 작성해야 합니다. 리버스 엔지니어링에서 정수와 바이트 간 변환은 특히 문제가 됩니다. 아래는 최소한의 예시 프롬프트입니다. 다른 프롬프트로 좋은 결과를 얻었다면 토론을 시작하거나 이슈를 열어 주세요:

    root@kitploit:~
    Your task is to analyze a crackme in IDA Pro. You can use the MCP tools to retrieve information. In general use the following strategy:
    
    - Inspect the decompilation and add comments with your findings
    - Rename variables to more sensible names
    - Change the variable and argument types if necessary (especially pointer and array types)
    - Change function names to be more descriptive
    - If more details are necessary, disassemble the function and add comments with your findings
    - NEVER convert number bases yourself. Use the `int_convert` MCP tool if needed!
    - Do not attempt brute forcing, derive any solutions purely from the disassembly and simple python scripts
    - Create a report.md with your findings and steps taken at the end
    - When you find a solution, prompt to user for feedback with the password you found
    

    이 프롬프트는 첫 실험일 뿐입니다. 출력을 개선할 방법을 찾았다면 공유해 주세요!

    @can1357 님의 또 다른 프롬프트:

    root@kitploit:~
    Your task is to create a complete and comprehensive reverse engineering analysis. Reference AGENTS.md to understand the project goals and ensure the analysis serves our purposes.
    
    Use the following systematic methodology:
    
    1. **Decompilation Analysis**
       - Thoroughly inspect the decompiler output
       - Add detailed comments documenting your findings
       - Focus on understanding the actual functionality and purpose of each component (do not rely on old, incorrect comments)
    
    2. **Improve Readability in the Database**
       - Rename variables to sensible, descriptive names
       - Correct variable and argument types where necessary (especially pointers and array types)
       - Update function names to be descriptive of their actual purpose
    
    3. **Deep Dive When Needed**
       - If more details are necessary, examine the disassembly and add comments with findings
       - Document any low-level behaviors that aren't clear from the decompilation alone
       - Use sub-agents to perform detailed analysis
    
    4. **Important Constraints**
       - NEVER convert number bases yourself - use the int_convert MCP tool if needed
       - Use MCP tools to retrieve information as necessary
       - Derive all conclusions from actual analysis, not assumptions
    
    5. **Documentation**
       - Produce comprehensive RE/*.md files with your findings
       - Document the steps taken and methodology used
       - When asked by the user, ensure accuracy over previous analysis file
       - Organize findings in a way that serves the project goals outlined in AGENTS.md or CLAUDE.md
    

    프롬프팅을 논의하고 실제 멀웨어 분석을 보여주는 라이브 스트림:

    LLM 정확도 향상을 위한 팁

    대규모 언어 모델(LLM)은 강력한 도구이지만 때로는 복잡한 수학 계산에 어려움을 겪거나 '환각'(사실을 지어냄) 현상을 보일 수 있습니다. LLM에게 int_convert MCP 도구를 사용하도록 지시하고, 특정 작업에는 math-mcp도 필요할 수 있습니다.

    또 한 가지 유의할 점은 LLM이 난독화된 코드에서는 좋은 성능을 내지 못한다는 것입니다. LLM으로 문제를 해결하려고 시도하기 전에 바이너리를 살펴보고 다음 항목들을 (자동으로) 제거하는 데 시간을 투자하세요:

    • 문자열 암호화
    • 임포트 해싱
    • 제어 흐름 평탄화
    • 코드 암호화
    • 디컴파일 방지 기법

    또한 Lumina나 FLIRT 같은 도구를 사용하여 모든 오픈소스 라이브러리 코드와 C++ STL을 식별하는 것이 좋습니다. 그러면 정확도가 더욱 향상됩니다.

    전송 방식 및 헤드리스 MCP

    다음과 같이 SSE 서버를 실행하여 사용자 인터페이스에 연결할 수 있습니다:

    root@kitploit:~
    uv run ida-pro-mcp --transport http://127.0.0.1:8744/sse
    

    idalib를 설치한 후에는 헤드리스 MCP 서버도 실행할 수 있습니다. 초기 바이너리로 시작하려면:

    root@kitploit:~
    uv run idalib-mcp --host 127.0.0.1 --port 8745 path/to/executable
    

    또는 바이너리 없이 시작하고 나중에 idb_open(...)으로 임의의 파일을 열 수 있습니다:

    root@kitploit:~
    uv run idalib-mcp --host 127.0.0.1 --port 8745
    

    stdio 기반 클라이언트의 경우 다음을 사용하세요:

    root@kitploit:~
    uv run idalib-mcp --stdio
    

    데이터베이스 워커는 영구적입니다. 각 워커는 자신을 생성한 슈퍼바이저보다 오래 지속되는 분리된 프로세스로 실행됩니다. 새 슈퍼바이저(stdio 또는 HTTP를 통해)가 이 호스트의 워커에서 이미 열려 있는 바이너리에 대해 idb_open을 호출하면 해당 워커를 투명하게 채택합니다. 활성화해야 할 별도의 '공유' 모드는 없습니다. 워커는 유휴 간격 동안 요청이 없으면 스스로 종료됩니다.

    참고: idalib 기능은 Willi Ballenthin 님이 기여했습니다.

    헤드리스 idalib 세션 모델

    idalib-mcp는 열린 각 데이터베이스를 자체 idalib 워커 프로세스에 유지하는 슈퍼바이저입니다. 워커는 호스트 로컬 검색 디렉터리에 자신을 등록하며, 생성한 슈퍼바이저보다 오래 지속됩니다. 이후 동일한 경로를 원하는 슈퍼바이저가 실행 중인 워커를 채택합니다. 워커는 유휴 TTL(기본 1시간) 동안 요청이 없으면 스스로 종료됩니다. idb_close를 호출하면 워커를 즉시 해제하여(--max-workers 쪽 슬롯을 확보) 채택된 GUI/워커 인스턴스는 종료되지 않고 분리됩니다.

    idb_open은 mode 매개변수를 통해 백엔드를 선택합니다:

    • prefer_headless (기본값): idalib 워커를 생성합니다(또는 이미 파일을 연 워커를 채택합니다).
    • force_headless: 동일하지만, 파일을 연 실행 중인 GUI가 있어도 절대 채택하지 않습니다.
    • prefer_gui: 파일에 대해 실행 중인 GUI를 채택하고, 없으면 idalib 워커를 생성합니다.
    • force_gui: 파일에 대해 실행 중인 GUI를 채택하고, 없으면 새 IDA GUI 프로세스를 시작합니다.

    모든 도구 호출에는 명시적인 database 인수가 포함되어야 합니다. 암시적인 '현재 데이터베이스'는 없으며, 호출자는 작업하려는 세션을 직접 지정해야 합니다.

    root@kitploit:~
    uv run idalib-mcp --stdio --max-workers 4
    

    일반적인 흐름:

    root@kitploit:~
    idb_open("/path/to/binary_a.exe", preferred_session_id="binary_a")
    idb_open("/path/to/library.dll", preferred_session_id="library")
    
    decompile("main", database="binary_a")
    xrefs_to("ImportantExport", database="library")
    

    database는 idb_open이 반환한(또는 idb_list에 표시된) 세션 ID여야 합니다. 파일 이름과 경로는 허용되지 않습니다.

    관리 도구

    • idb_open(input_path, mode="prefer_headless", run_auto_analysis=True, build_caches=True, init_hexrays=True, preferred_session_id=""): 바이너리를 열고 하위 시스템(문자열 캐시, Hex-Rays)을 워밍업한 후 세션 ID를 반환합니다. 이 경로에 대한 워커나 GUI가 이미 호스트에서 실행 중이면 해당 인스턴스가 채택되고 preferred_session_id는 무시됩니다.
    • idb_list(): 열린 세션과 실행 중인 GUI IDA 인스턴스를 나열합니다. 각 항목에는 adopted(이 슈퍼바이저가 관리하면 True, idb_open을 통해 아직 열리지 않았지만 발견된 GUI/워커는 False), backend(worker 또는 gui), is_active, 프로세스 ID가 포함됩니다.
    • idb_close(database, save=True): (선택적으로) 저장하고 세션을 등록 해제한 후 소유한 워커를 종료하여 --max-workers 쪽 슬롯을 확보합니다. 채택된 GUI/워커 인스턴스는 종료되지 않고 분리됩니다.
    • idb_save(session_id, path=""): 세션의 IDB를 디스크에 저장합니다. 일반 워커 도구로 전달됩니다(database=<id>가 주입됨) — 두 백엔드에서 동일한 시그니처입니다.
    • 데이터베이스별 상태: server_health(database=<id>)를 호출합니다(전달됨). idb_list()는 슈퍼바이저의 TCP/RPC 프로브에서 is_active를 보고합니다.

    워커 제어:

    • --max-workers N: 최대 동시 데이터베이스 워커 수(0 = 무제한, 기본값 4).
    • IDA_MCP_MAX_WORKERS: --max-workers의 환경 변수 기본값입니다.

    MCP 리소스

    리소스는 MCP 철학에 따라 탐색 가능한 상태(읽기 전용 데이터)를 나타냅니다.

    핵심 IDB 상태:

    • ida://idb/metadata - IDB 파일 정보(경로, 아키텍처, 베이스, 크기, 해시)
    • ida://idb/segments - 권한이 포함된 메모리 세그먼트
    • ida://idb/entrypoints - 엔트리 포인트(main, TLS 콜백 등)

    UI 상태:

    • ida://cursor - 현재 커서 위치와 함수
    • ida://selection - 현재 선택 범위

    타입 정보:

    • ida://types - 모든 로컬 타입
    • ida://structs - 모든 구조체/공용체
    • ida://struct/{name} - 필드가 포함된 구조체 정의

    조회:

    • ida://import/{name} - 이름별 임포트 세부 정보
    • ida://export/{name} - 이름별 익스포트 세부 정보
    • ida://xrefs/from/{addr} - 주소에서의 크로스 레퍼런스

    핵심 함수

    • lookup_funcs(queries): 주소나 이름으로 함수를 가져옵니다(자동 감지, 리스트 또는 쉼표로 구분된 문자열 허용).
    • int_convert(inputs): 숫자를 다양한 형식(십진수, 16진수, 바이트, ASCII, 이진수)으로 변환합니다.
    • list_funcs(queries): 함수를 나열합니다(페이지네이션, 필터링 지원).
    • list_globals(queries): 전역 변수를 나열합니다(페이지네이션, 필터링 지원).
    • imports(offset, count): 모듈 이름과 함께 모든 임포트 심볼을 나열합니다(페이지네이션 지원).
    • decompile(addr): 지정된 주소의 함수를 디컴파일합니다.
    • disasm(addr): 전체 세부 정보(인자, 스택 프레임 등)와 함께 함수를 디스어셈블합니다.
    • xrefs_to(addrs): 주소로의 모든 크로스 레퍼런스를 가져옵니다.
    • xrefs_to_field(queries): 특정 구조체 필드로의 크로스 레퍼런스를 가져옵니다.
    • callees(addrs): 주소의 함수가 호출하는 함수들을 가져옵니다.

    수정 작업

    • add_bookmark(addr, name, prefix): 주소에 IDA 북마크를 추가하거나 교체합니다. 접두사를 원하지 않으면 prefix=""로 설정하세요.
    • set_comments(items): 디스어셈블리 뷰와 디컴파일러 뷰 모두에서 주소에 주석을 설정합니다.
    • patch_asm(items): 주소의 어셈블리 명령어를 패치합니다.
    • declare_type(decls): 로컬 타입 라이브러리에 C 타입을 선언합니다.
    • define_func(items): 주소에 함수를 정의합니다. 명시적 범위를 위해 end를 선택적으로 지정할 수 있습니다.
    • define_code(items): 주소의 바이트를 코드 명령어로 변환합니다.
    • undefine(items): 주소의 항목을 정의 해제하여 원시 바이트로 되돌립니다. 선택적으로 end 또는 size를 지정할 수 있습니다.

    메모리 읽기 작업

    • get_bytes(addrs): 주소의 원시 바이트를 읽습니다.
    • get_int(queries): ty를 사용하여 정수 값을 읽습니다(i8/u64/i16le/i16be 등).
    • get_string(addrs): 널 종료 문자열을 읽습니다.
    • get_global_value(queries): 주소나 이름으로 전역 변수 값을 읽습니다(자동 감지, 컴파일 타임 값).

    스택 프레임 작업

    • stack_frame(addrs): 함수의 스택 프레임 변수를 가져옵니다.
    • declare_stack(items): 지정된 오프셋에 스택 변수를 생성합니다.
    • delete_stack(items): 이름으로 스택 변수를 삭제합니다.

    구조체 작업

    • read_struct(queries): 특정 주소에서 구조체 필드 값을 읽습니다.
    • search_structs(filter): 이름 패턴으로 구조체를 검색합니다.

    디버거 작업 (확장)

    디버거 도구는 기본적으로 숨겨져 있습니다. ?ext=dbg 쿼리 매개변수로 활성화하세요:

    root@kitploit:~
    http://127.0.0.1:13337/mcp?ext=dbg
    

    제어:

    • dbg_start(): 디버거 프로세스를 시작합니다.
    • dbg_exit(): 디버거 프로세스를 종료합니다.
    • dbg_continue(): 실행을 계속합니다.
    • dbg_run_to(addr): 해당 주소까지 실행합니다.
    • dbg_step_into(): 명령어 내부로 단계 실행합니다.
    • dbg_step_over(): 명령어를 건너뛰어 단계 실행합니다.

    중단점:

    • dbg_bps(): 모든 중단점을 나열합니다.
    • dbg_add_bp(addrs): 중단점을 추가합니다.
    • dbg_delete_bp(addrs): 중단점을 삭제합니다.
    • dbg_toggle_bp(items): 중단점을 활성화/비활성화합니다.

    레지스터:

    • dbg_regs(): 현재 스레드의 모든 레지스터.
    • dbg_regs_all(): 모든 스레드의 모든 레지스터.
    • dbg_regs_remote(tids): 특정 스레드의 모든 레지스터.
    • dbg_gpregs(): 현재 스레드의 GP 레지스터.
    • dbg_gpregs_remote(tids): 특정 스레드의 GP 레지스터.
    • dbg_regs_named(names): 현재 스레드의 지정된 레지스터.
    • dbg_regs_named_remote(tid, names): 특정 스레드의 지정된 레지스터.

    스택 및 메모리:

    • dbg_stacktrace(): 모듈/심볼 정보가 포함된 호출 스택.
    • dbg_read(regions): 디버깅 중인 프로세스에서 메모리를 읽습니다.
    • dbg_write(regions): 디버깅 중인 프로세스에 메모리를 씁니다.

    고급 분석 작업

    • py_eval(code): IDA 컨텍스트에서 임의의 Python 코드를 실행합니다(result/stdout/stderr가 포함된 dict 반환, Jupyter 스타일 평가 지원).
    • analyze_funcs(addrs): 종합적인 함수 분석(디컴파일, 어셈블리, xrefs, callees, callers, 문자열, 상수, 기본 블록).

    패턴 매칭 및 검색

    • find_regex(queries): 대소문자를 구분하지 않는 정규식으로 문자열을 검색합니다(페이지네이션 지원).
    • find_bytes(patterns, limit=1000, offset=0): 바이너리에서 바이트 패턴을 찾습니다(예: "48 8B ?? ??"). 최대 한도: 10000.
    • find_insns(sequences, limit=1000, offset=0): 코드에서 명령어 시퀀스를 찾습니다. 최대 한도: 10000.
    • find(type, targets, limit=1000, offset=0): 고급 검색(즉시 값, 문자열, 데이터/코드 참조). 최대 한도: 10000.

    제어 흐름 분석

    • basic_blocks(addrs): 후속 및 선행 블록이 포함된 기본 블록을 가져옵니다.

    타입 작업

    • set_type(edits): 함수, 전역, 로컬 또는 스택 변수에 타입을 적용합니다.
    • infer_types(addrs): Hex-Rays 또는 휴리스틱을 사용하여 주소의 타입을 추론합니다.

    내보내기 작업

    • export_funcs(addrs, format): 지정된 형식(json, c_header 또는 prototypes)으로 함수를 내보냅니다.

    그래프 작업

    • callgraph(roots, max_depth): 루트 함수에서 구성 가능한 깊이로 호출 그래프를 구축합니다.

    일괄 작업

    • rename(batch): 함수, 전역, 로컬 및 스택 변수에 대한 통합 일괄 이름 변경 작업입니다(선택적 func, data, local, stack 키가 있는 dict 허용).
    • patch(patches): 여러 바이트 시퀀스를 한 번에 패치합니다.
    • put_int(items): ty를 사용하여 정수 값을 씁니다(i8/u64/i16le/i16be 등).

    주요 기능:

    • 타입 안전 API: 모든 함수는 TypedDict 스키마를 사용하는 강력한 타입의 매개변수를 사용하여 IDE 지원과 LLM 구조화 출력을 개선합니다.
    • 일괄 우선 설계: 대부분의 작업은 단일 항목과 리스트를 모두 허용합니다.
    • 일관된 오류 처리: 모든 일괄 작업은 [{..., error: null|string}, ...]를 반환합니다.
    • 커서 기반 페이지네이션: 검색 함수는 cursor: {next: offset} 또는 {done: true}를 반환합니다(기본 한도: 1000, 토큰 오버플로 방지를 위해 최대 10000 적용).
    • 성능: 대규모 프로젝트에서 반복적인 build_strlist 호출을 피하기 위해 MD5 기반 무효화로 문자열이 캐시됩니다.

    개발

    새 기능 추가는 매우 쉽고 간소화된 과정입니다. src/ida_pro_mcp/ida_mcp/api_*.py의 모듈식 API 파일에 새 @tool 함수를 추가하기만 하면 추가적인 상용구 없이도 MCP 서버에서 해당 함수를 사용할 수 있습니다! 아래는 제가 get_metadata 함수를 2분도 안 되는 시간에 추가하는 영상입니다(테스트 포함):

    https://github.com/user-attachments/assets/951de823-88ea-4235-adcb-9257e316ae64

    MCP 서버 자체를 테스트하려면:

    root@kitploit:~
    npx -y @modelcontextprotocol/inspector
    

    그러면 http://localhost:5173에 웹 인터페이스가 열리고 MCP 도구와 상호 작용하여 테스트할 수 있습니다.

    테스트를 위해 IDA 플러그인에 대한 심볼릭 링크를 만든 다음 JSON-RPC 요청을 http://localhost:13337/mcp에 직접 POST합니다. 심볼릭 링크를 활성화한 후 다음 명령을 실행할 수 있습니다:

    root@kitploit:~
    uv run ida-pro-mcp --install
    

    main에 대한 직접 커밋의 변경 로그를 생성합니다:

    root@kitploit:~
    git log --first-parent --no-merges 1.2.0..main "--pretty=- %s"
    
    도구 다운로드