본문으로 건너뛰기

© 2026 Molayo

GitHub요약2026. 06. 28. 19:16

fdrechsler/mcp-server-idapro

요약

AI 어시스턴트가 IDA Pro와 상호작용하여 리버스 엔지니어링 및 바이너리 분석을 수행할 수 있도록 돕는 MCP 서버 프로젝트입니다. Python 스크립트 실행, 함수 및 문자열 검색 등 고급 분석 기능을 자동화합니다.

핵심 포인트

  • Model Context Protocol(MCP)을 통한 IDA Pro 제어
  • AI를 활용한 바이너리 정보(Strings, Imports 등) 검색 자동화
  • IDA Pro 내 Python 스크립트 원격 실행 지원
  • 리버스 엔지니어링 워크플로우의 AI 통합

리버스 엔지니어링 (Reverse Engineering) 및 바이너리 분석 (Binary Analysis) 작업을 위해 AI 어시스턴트가 IDA Pro와 상호작용할 수 있도록 지원하는 Model Context Protocol (MCP) 서버입니다.

이 프로젝트는 AI 어시스턴트와 소프트웨어 리버스 엔지니어링에 널리 사용되는 디스어셈블러(Disassembler) 및 디버거(Debugger)인 IDA Pro 사이의 가교 역할을 합니다. 이 프로젝트는 세 가지 주요 구성 요소로 이루어져 있습니다:

IDA Pro 원격 제어 플러그인(ida_remote_server.py):
IDA Pro 기능을 원격으로 제어하기 위해 HTTP 서버를 생성하는 IDA Pro 플러그인입니다.

IDA 원격 클라이언트(idaremoteclient.ts):
IDA Pro 원격 제어 서버와 상호작용하기 위한 TypeScript 클라이언트입니다.

MCP 서버(index.ts):
AI 어시스턴트에게 IDA Pro 기능을 노출하는 Model Context Protocol 서버입니다.

  • AI 어시스턴트로부터 IDA Pro 내에서 Python 스크립트 실행

  • 바이너리에 대한 정보 검색:

    • 문자열 (Strings)
    • 임포트 (Imports)
    • 엑스포트 (Exports)
    • 함수 (Functions)
  • 고급 바이너리 분석 기능:

    • 명령어 내의 즉시값 (Immediate values) 검색
    • 바이너리 내의 텍스트 문자열 검색
    • 특정 바이트 시퀀스 (Byte sequences) 검색
    • 주소 범위에 대한 디스어셈블리 (Disassembly) 획득
  • 표준화된 인터페이스를 통한 IDA Pro 작업 자동화

  • 구성 요소 간의 보안 통신

  • IDA Pro 8.3 이상

  • Node.js 18 이상

  • TypeScript

curl -X POST -H "Content-Type: application/json" -d '{"script":"print(\"Script initialization...\")"}' http://127.0.0.1:9045/api/execute
{"success": true, "output": "Script initialization...\n"}
- Copy

ida_remote_server.py를 IDA Pro 플러그인 디렉토리에 복사하세요:

  • Windows:
    %PROGRAMFILES%\IDA Pro\plugins

  • macOS:
    /Applications/IDA Pro.app/Contents/MacOS/plugins

  • Linux:
    /opt/idapro/plugins

  • Windows:

  • IDA Pro를 실행하고 바이너리 파일을 엽니다.

  • 플러그인이 127.0.0.1:9045에서 HTTP 서버를 자동으로 시작합니다.

  • 이 저장소를 클론(Clone)합니다:

git clone <repository-url> cd ida-server

  • 의존성(Dependencies)을 설치합니다:

npm install

  • 프로젝트를 빌드합니다:

npm run build

  • AI 어시스턴트의 MCP 설정 파일에서 MCP 서버를 구성합니다:

{ "mcpServers": { "ida-pro": { "command": "node", "args": ["path/to/ida-server/dist/index.js"], "env": {} } } }

설치 및 구성이 완료되면, MCP 서버는 AI 어시스턴트에게 다음과 같은 도구 (tool)를 제공합니다:

IDA Pro Python 스크립트를 실행합니다.

매개변수 (Parameters):

scriptPath

(필수): 실행할 스크립트 파일의 절대 경로
outputPath

(선택 사항): 스크립트의 출력을 저장할 절대 경로

예시 (Example):

# IDA Pro 스크립트 예시 ( /path/to/script.py 로 저장 )
import idautils
# 함수 개수 세기
...

그 후 AI 어시스턴트는 다음과 같이 이 스크립트를 사용할 수 있습니다:

<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>run_ida_command</tool_name>
...

바이너리(binary)의 명령어 내에서 즉시값 (immediate values)을 검색합니다.

매개변수 (Parameters):

value

(필수): 검색할 값 (숫자 또는 문자열)
radix

(선택 사항): 숫자 변환을 위한 진법 (기본값: 16)
startAddress

(선택 사항): 검색 시작 주소
endAddress

(선택 사항): 검색 종료 주소

예시 (Example):

<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>search_immediate_value</tool_name>
...

바이너리 내에서 텍스트 문자열을 검색합니다.

매개변수 (Parameters):

text

(필수): 검색할 텍스트
caseSensitive

(선택 사항): 대소문자 구분 여부 (기본값: false)
startAddress

(선택 사항): 검색 시작 주소
endAddress

(선택 사항): 검색 종료 주소

예시 (Example):

<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>search_text</tool_name>
...

바이너리 내에서 특정 바이트 시퀀스 (byte sequence)를 검색합니다.

매개변수 (Parameters):

bytes

(필수): 검색할 바이트 시퀀스 (예: 세 개의 NOP를 위한 "90 90 90")
startAddress

(선택 사항): 검색 시작 주소
endAddress

(선택 사항): 검색 종료 주소

예시 (Example):

<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>search_byte_sequence</tool_name>
...

주소 범위에 대한 역어셈블 (disassembly)을 가져옵니다.

매개변수 (Parameters):

startAddress

(필수): 역어셈블 시작 주소
endAddress

(선택 사항): 역어셈블 종료 주소
count

(선택 사항): 역어셈블할 명령어의 개수

예시 (Example):

<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>get_disassembly</tool_name>
...

바이너리로부터 함수 목록을 가져옵니다.

매개변수 (Parameters):

  • 필수 사항 없음

예시 (Example):

<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>get_functions</tool_name>
...

바이너리로부터 export(내보내기) 목록을 가져옵니다.

매개변수 (Parameters):

  • 필수 사항 없음

예시 (Example):

<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>get_exports</tool_name>
...

바이너리로부터 문자열 목록을 가져옵니다.

매개변수 (Parameters):

  • 필수 사항 없음

예시 (Example):

<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>get_strings</tool_name>
...

IDA Pro Remote Control Plugin은 다음과 같은 HTTP 엔드포인트 (endpoints)를 노출합니다:

GET /api/info
: 플러그인 정보 가져오기
GET /api/strings
: 바이너리로부터 문자열 가져오기
GET /api/exports
: 바이너리로부터 export(내보내기) 가져오기
GET /api/imports
: 바이너리로부터 import(가져오기) 가져오기
GET /api/functions
: 함수 목록 가져오기
GET /api/search/immediate
: 명령어 내의 즉시값 (immediate values) 검색
GET /api/search/text
: 바이너리 내 텍스트 검색
GET /api/search/bytes
: 바이너리 내 바이트 시퀀스 (byte sequences) 검색
GET /api/disassembly
: 주소 범위에 대한 역어셈블 결과 가져오기
POST /api/execute
: Python 스크립트 실행 (JSON/Form)
POST /api/executebypath
: 파일 경로로부터 Python 스크립트 실행
POST /api/executebody
: Raw body로부터 Python 스크립트 실행

보안상의 이유로 기본적으로 IDA Pro Remote Control Plugin은 127.0.0.1 (localhost)에서만 리스닝 (listening) 합니다. 이는 귀하의 IDA Pro 인스턴스에 대한 원격 접속을 방지합니다.

원격 접속을 허용해야 하는 경우 ida_remote_server.py 파일의 DEFAULT_HOST 변수를 수정할 수 있지만, 보안상의 영향을 유의하십시오.

npm run build

npm test

이 프로젝트는 MIT 라이선스 하에 라이선스가 부여됩니다. 자세한 내용은 LICENSE 파일을 참조하십시오.

Florian Drechsler (@fdrechsler) fd@fdrechsler.com

AI 자동 생성 콘텐츠

본 콘텐츠는 GitHub AI Tools의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0