local-only server
The server can only run on the client’s local machine because it depends on local resources.
Integrations
Integrates with GitHub for repository management, as the MCP server itself is hosted on GitHub and references GitHub resources.
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_strings(offset, count)
: 데이터베이스에 있는 모든 문자열을 나열합니다(페이지별로).search_strings(pattern, offset, count)
: 주어진 패턴을 포함하는 문자열을 검색합니다(대소문자 구분 없음).decompile_function(address)
: 주어진 주소에서 함수를 디컴파일합니다.disassemble_function(start_address)
: 함수에 대한 어셈블리 코드(주소: 명령어; 주석)를 가져옵니다.get_xrefs_to(address)
: 주어진 주소에 대한 모든 교차 참조를 가져옵니다.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)
: 로컬 변수의 유형을 설정합니다.
필수 조건
- Python ( 3.11 이상 )
idapyswitch
사용하여 최신 Python 버전으로 전환하세요.
- IDA Pro (8.3 이상, 9 권장)
- 지원되는 MCP 클라이언트(원하는 클라이언트 선택)
설치
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을 해결해 보세요. 이렇게 하면 정확도가 더욱 향상됩니다.
수동 설치
참고 : 이 섹션은 자세한 설치 지침이 필요한 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
에 직접 커밋한 변경 로그를 생성합니다.