IDA Pro MCP
IDA Pro에서 분위기 반전을 허용하는 간단한 MCP 서버입니다 .
https://github.com/user-attachments/assets/6ebeaa92-a9db-43fa-b756-eececce2aca0
비디오의 바이너리와 프롬프트는 mcp-reversing-dataset 저장소에서 사용할 수 있습니다.
사용 가능한 기능:
check_connection()
: IDA 플러그인이 실행 중인지 확인합니다.get_metadata()
: 현재 IDB에 대한 메타데이터를 가져옵니다.get_function_by_name(name)
: 이름으로 함수를 가져옵니다.get_function_by_address(address)
: 주소로 함수를 가져옵니다.get_current_address()
: 사용자가 현재 선택한 주소를 가져옵니다.get_current_function()
: 사용자가 현재 선택한 함수를 가져옵니다.convert_number(text, size)
: 숫자(10진수, 16진수)를 다른 표현으로 변환합니다.list_functions(offset, count)
: 데이터베이스에 있는 모든 함수를 나열합니다(페이지별로).list_globals_filter(offset, count, filter)
: 데이터베이스에서 일치하는 글로벌 항목을 나열합니다(페이지별, 필터링됨).list_globals(offset, count)
: 데이터베이스의 모든 글로벌 항목을 나열합니다(페이지별로).list_strings_filter(offset, count, filter)
: 데이터베이스에서 일치하는 문자열을 나열합니다(페이지별, 필터링).list_strings(offset, count)
: 데이터베이스의 모든 문자열을 나열합니다(페이지별로).decompile_function(address)
: 주어진 주소에서 함수를 디컴파일합니다.disassemble_function(start_address)
: 함수에 대한 어셈블리 코드(주소: 명령어; 주석)를 가져옵니다.get_xrefs_to(address)
: 주어진 주소에 대한 모든 교차 참조를 가져옵니다.get_xrefs_to_field(struct_name, field_name)
: 명명된 구조체 필드(멤버)에 대한 모든 교차 참조를 가져옵니다.get_entry_points()
: 데이터베이스의 모든 진입점을 가져옵니다.set_comment(address, comment)
: 함수 디스어셈블리와 의사코드에서 주어진 주소에 대한 주석을 설정합니다.rename_local_variable(function_address, old_name, new_name)
: 함수 내의 로컬 변수의 이름을 바꿉니다.rename_global_variable(old_name, new_name)
: 전역 변수의 이름을 바꿉니다.set_global_variable_type(variable_name, new_type)
: 전역 변수의 유형을 설정합니다.rename_function(function_address, new_name)
: 함수의 이름을 바꿉니다.set_function_prototype(function_address, prototype)
: 함수의 프로토타입을 설정합니다.declare_c_type(c_declaration)
: C 선언에서 로컬 유형을 생성하거나 업데이트합니다.set_local_variable_type(function_address, variable_name, new_type)
: 로컬 변수의 유형을 설정합니다.
안전하지 않은 함수( --unsafe
플래그 필요):
dbg_get_call_stack()
: 현재 호출 스택을 가져옵니다.dbg_get_registers()
: 모든 레지스터와 그 값을 가져옵니다. 이 함수는 디버깅 중에만 사용할 수 있습니다.dbg_run_to(address)
: 지정된 주소로 디버거를 실행합니다.dbg_exit_process()
: 디버거를 종료합니다.dbg_continue_process()
: 디버거를 계속합니다.dbg_enable_breakpoint(address, enable)
: 지정된 주소에서 중단점을 활성화하거나 비활성화합니다.dbg_list_breakpoints()
: 프로그램의 모든 중단점을 나열합니다.dbg_set_breakpoint(address)
: 지정된 주소에 중단점을 설정합니다.dbg_delete_breakpoint(address)
: 지정된 주소에 중단점을 삭제합니다.dbg_start_process()
: 디버거를 시작합니다.
필수 조건
- Python ( 3.11 이상 )
idapyswitch
사용하여 최신 Python 버전으로 전환하세요.
- IDA Pro (8.3 이상, 9 권장)
- 지원되는 MCP 클라이언트(원하는 클라이언트 선택)
- 클라인
- 루 코드
- 클로드
- 커서
- VSCode 에이전트 모드
- 윈드서핑
- 기타 MCP 클라이언트 :
ida-pro-mcp --config
실행하여 클라이언트의 JSON 구성을 가져옵니다.
설치
IDA Pro MCP 패키지를 설치(또는 업그레이드):
지엑스피1
MCP 서버를 구성하고 IDA 플러그인을 설치하세요.
중요 : 설치가 적용되려면 IDA/Visual Studio Code/Claude를 완전히 다시 시작해야 합니다. Claude는 백그라운드에서 실행되므로 트레이 아이콘에서 종료해야 합니다.
https://github.com/user-attachments/assets/65ed3373-a187-4dd5-a807-425dca1d8ee9
신속한 엔지니어링
LLM은 환각을 경험하기 쉬우므로 프롬프트를 구체적으로 사용해야 합니다. 특히 역공학에서 정수와 바이트 간의 변환은 문제가 될 수 있습니다. 아래는 간단한 프롬프트 예시입니다. 다른 프롬프트를 사용하여 좋은 결과를 얻으셨다면 자유롭게 토론을 시작하거나 이슈를 개설해 주세요.
IDA Pro에서 크랙미(crackme)를 분석하는 것이 여러분의 임무입니다. MCP 도구를 사용하여 정보를 검색할 수 있습니다. 일반적으로 다음 전략을 사용하세요.
- 디컴파일을 검사하고 결과에 대한 주석을 추가합니다.
- 변수 이름을 더 합리적인 이름으로 바꾸세요
- 필요한 경우 변수 및 인수 유형을 변경합니다(특히 포인터 및 배열 유형).
- 함수 이름을 더 설명적으로 변경하세요
- 더 자세한 정보가 필요한 경우 함수를 분해하고 결과를 주석으로 추가하세요.
- 절대 숫자 진법을 직접 변환하지 마세요. 필요한 경우 convert_number MCP 도구를 사용하세요!
- 무차별 대입 공격을 시도하지 말고, 분해 및 간단한 파이썬 스크립트에서만 솔루션을 도출하십시오.
- 귀하의 조사 결과와 마지막에 취한 단계를 포함하는 report.md를 만드십시오.
- 해결책을 찾으면 찾은 비밀번호와 함께 피드백을 요청하는 메시지를 사용자에게 표시합니다.
이 프롬프트는 단지 첫 번째 실험일 뿐입니다. 출력을 개선할 방법을 찾았다면 공유해 주세요!
LLM 정확도 향상을 위한 팁
대규모 언어 모델(LLM)은 강력한 도구이지만, 복잡한 수학 계산에 어려움을 겪거나 "환상"(사실 조작)을 보일 수 있습니다. LLM에 conver_number
MCP를 사용하도록 설정해야 하며, 특정 연산에는 math-mcp가 필요할 수도 있습니다.
또 한 가지 명심해야 할 점은 LLM이 난독화된 코드에서는 제대로 작동하지 않는다는 것입니다. LLM을 사용하여 문제를 해결하기 전에 바이너리를 살펴보고 다음 항목을 (자동으로) 제거하는 데 시간을 투자해 보세요.
- 문자열 암호화
- 가져오기 해싱
- 제어 흐름 평탄화
- 코드 암호화
- 디컴파일 방지 트릭
Lumina나 FLIRT와 같은 도구를 사용하여 모든 오픈 소스 라이브러리 코드와 C++ STL을 해결해 보세요. 이렇게 하면 정확도가 더욱 향상됩니다.
SSE 운송 및 헤드리스 MCP
다음과 같이 SSE 서버를 실행하여 사용자 인터페이스에 연결할 수 있습니다.
idalib
설치한 후에는 헤드리스 SSE 서버를 실행할 수도 있습니다.
참고 : idalib
기능은 Willi Ballenthin 이 제공했습니다.
수동 설치
참고 : 이 섹션은 자세한 설치 지침이 필요한 LLM 및 전문 사용자를 위한 것입니다.
수동 MCP 서버 설치(Cline/Roo 코드)
MCP 서버를 직접 설치하려면 다음 단계를 따르세요.
- uv를 전역적으로 설치합니다.
- 윈도우:
pip install uv
- Linux/Mac:
curl -LsSf https://astral.sh/uv/install.sh | sh
- 윈도우:
- 이 저장소를 복제합니다(예
C:\MCP\ida-pro-mcp
. - Cline/Roo 코드 MCP 서버 구성으로 이동합니다(스크린샷 참조).
- 설치됨 탭을 클릭합니다.
- MCP 서버 구성을 클릭하면
cline_mcp_settings.json
이 열립니다. ida-pro-mcp
서버를 추가합니다.
연결이 작동하는지 확인하려면 다음 도구 호출을 수행하세요.
IDA 플러그인 설치
IDA Pro 플러그인은 MCP 서버가 시작되면 자동으로 설치됩니다. --install-plugin
옵션을 비활성화한 경우 다음 단계를 따르세요.
- Windows의 플러그인 폴더(
%appdata%\Hex-Rays\IDA Pro\plugins
)에src/ida_pro_mcp/mcp-plugin.py
복사합니다( 이동은 안 됨 ). - IDB를 열고
Edit -> Plugins -> MCP
클릭하여 서버를 시작합니다.
다른 MCP 서버와의 비교
현재 여러 IDA Pro MCP 서버가 사용되고 있지만, 저는 몇 가지 이유로 직접 서버를 만들었습니다.
- 설치는 완전 자동화되어야 합니다.
- 다른 플러그인의 아키텍처로 인해 새로운 기능을 빠르게 추가하는 것이 어렵습니다(불필요한 종속성의 보일러플레이트가 너무 많음).
- 새로운 기술을 배우는 것은 재미있습니다!
확인하고 싶으시다면, 여기에 목록이 있습니다(제가 발견한 순서대로):
- https://github.com/taida957789/ida-mcp-server-plugin (SSE 프로토콜만 해당, IDAPython에 종속성을 설치해야 함).
- https://github.com/fdrechsler/mcp-server-idapro (TypeScript의 MCP 서버, 새로운 기능을 추가하는 데 과도한 보일러플레이트가 필요함).
- https://github.com/MxIris-Reverse-Engineering/ida-mcp-server (사용자 정의 소켓 프로토콜, 보일러플레이트).
여기에 PR을 열어 IDA Pro MCP 서버를 추가하세요.
개발
새로운 기능을 추가하는 것은 정말 쉽고 간소화된 과정입니다. mcp-plugin.py
에 새로운 @jsonrpc
함수를 추가하기만 하면 추가 보일러플레이트 코드 없이 MCP 서버에서 함수를 사용할 수 있습니다! 아래 영상에서는 2분도 채 걸리지 않고 get_metadata
함수를 추가하는 과정을 보여드립니다(테스트 포함).
https://github.com/user-attachments/assets/951de823-88ea-4235-adcb-9257e316ae64
MCP 서버 자체를 테스트하려면:
이렇게 하면 http://localhost:5173 에서 웹 인터페이스가 열리고 테스트를 위해 MCP 도구와 상호 작용할 수 있습니다.
테스트를 위해 IDA 플러그인에 대한 심볼릭 링크를 생성한 후 http://localhost:13337/mcp
에 JSON-RPC 요청을 직접 POST했습니다. 심볼릭 링크를 활성화한 후 다음 명령을 실행할 수 있습니다.
main
에 직접 커밋한 변경 로그를 생성합니다.
local-only server
The server can only run on the client's local machine because it depends on local resources.
Tools
IDA Pro를 활용한 자동 역엔지니어링을 위한 MCP 서버입니다.
Related MCP Servers
- AsecurityAlicenseAqualityAiDD MCP Server provides a secure interface for AI agents to perform file system operations and code analysis, enhancing AI-assisted development workflows across multiple programming languages.Last updated -2962PythonApache 2.0
- AsecurityAlicenseAqualityA Model Context Protocol server for IDA interaction and automation. This server provides tools to read IDA database via Large Language Models.Last updated -19443PythonMIT License
- AsecurityAlicenseAqualityA Model Context Protocol server that enables AI assistants to interact with IDA Pro for reverse engineering and binary analysis tasks.Last updated -814PythonMIT License
- AsecurityAlicenseAqualityMCP server for reverse engineering that enables interaction with IDA Pro for analysis tasks such as decompilation, disassembly, and memory engagement reports.Last updated -2428PythonMIT License