
IDA와 VS Code를 연결하여 IDAPython 스크립트를 쉽게 실행하고 디버깅할 수 있게 해주는 통합 도구입니다.
IDACode를 사용하면 Visual Studio Code를 떠나지 않고 IDA 환경에서 Python 스크립트를 쉽게 실행하고 디버그할 수 있습니다. VS Code 확장 프로그램은 마켓플레이스에서 찾을 수 있습니다.
IDACode는 아직 초기 단계이며 버그가 발생할 수 있습니다. 문제가 발생하면 새 이슈를 열어 주세요.
debugpy를 사용하므로 출력 창이 VS Code의 출력 패널과 자연스럽게 동기화됩니다.IDACode는 IDA 8.4/9.0 및 Python 3.12를 사용하여 Windows와 macos에서 테스트되었습니다 (이전 Python 버전은 디버깅에 문제가 있습니다).
IDA 플러그인의 종속성을 설정하려면 다음을 실행하세요:
# 올바른 Python 버전을 사용해야 합니다.
# IDACode는 버전 3.0.0부터 최신 debugpy를 지원합니다. 업그레이드해야 합니다!
python -m pip install --user debugpy tornado
이 저장소를 클론하거나 여기에서 릴리스 패키지를 다운로드하세요. ida.zip은 이 저장소의 ida 폴더 내용을 반영합니다. 모든 파일을 IDA의 플러그인 디렉토리로 복사하세요.
다음 단계는 환경에 맞게 설정을 구성하는 것입니다 (선택 사항). idacode_utils/settings.py를 적절히 편집하세요:
HOST: 호스트 주소입니다. 원격 위치에서 액세스할 수 있게 하려는 경우가 아니라면 항상 127.0.0.1입니다. 이 플러그인은 인증을 사용하지 않는다는 점을 명심하세요.PORT: IDA가 수신 대기할 포트입니다. 이 포트는 IDA와 VS Code 간의 WebSocket 통신에 사용됩니다.DEBUG_PORT: 들어오는 디버그 세션을 수신 대기할 포트입니다.LOGGING: 디버거가 파일에 로그를 기록할지 여부를 결정합니다. IDACode에서 문제가 발생하는 경우 특히 유용합니다. 문제를 발견하면 새 이슈를 제출해 주세요. 파일은 항상 임시 디렉토리 (예: Windows: %TEMP%)에 위치합니다. 파일 이름은 debugpy.*.log입니다.이제 플러그인 메뉴에서 IDACode를 클릭하여 플러그인을 시작할 수 있습니다.
VS Code 확장 프로그램은 마켓플레이스에서 사용할 수 있습니다. 확장 프로그램 구성에 관한 자세한 내용은 확장 프로그램의 README를 참조하세요.
플러그인 메뉴에서 IDACode를 클릭하세요. 다음과 같은 텍스트가 표시되어야 합니다:
IDACode listening on 127.0.0.1:7065
버전 0.2.0부터 IDACode는 기본적으로 활성화된 "저장 시 실행"을 지원합니다. 현재 문서를 저장하면 (예: CTRL+S) VS Code가 자동으로 IDA에서 스크립트를 실행합니다. 이 동작은 설정에서 비활성화할 수 있습니다. Ctrl-Shift-P를 사용하여 VS Code 확장 프로그램 개발 콘솔을 열고 "idacode"를 입력하면 아래 명령 목록이 표시됩니다. VS Code의 "실행" 또는 "디버그" 기능을 사용하지 마세요. 그렇지 않으면 IDA에서 "HTTP misformed" 메시지가 표시됩니다.
4개의 명령을 사용할 수 있습니다:

스크립트를 넣을 폴더를 열면 (VS Code에서 폴더를 지정하라는 메시지가 표시되면 반드시 지정해야 합니다!) IDA에 연결할 준비가 된 것입니다. Connect to IDA 또는 Connect and attach a debugger to IDA를 실행하여 연결할 수 있습니다. 디버그 세션은 IDA를 다시 시작할 때까지 영구적이라는 점을 명심하세요. 디버거가 시작된 후에는 작업 공간 폴더를 변경할 수 없습니다.
작업 공간 폴더는 주요 스크립트가 위치한 폴더여야 합니다.
연결되면 Execute script in IDA를 선택할 수 있습니다.
IDACode는 VS Code의 원격 디버거를 사용하여 IDA에 연결합니다. 모든 VS Code 기능이 지원됩니다. 그러나 Python 내장 기능인 breakpoint를 사용하여 스크립트의 진입점을 지정해야 합니다. 이 명령은 디버거에게 실행을 중단하도록 지시하며, 디버거가 없으면 함수를 무시합니다. IDACode는 bp라는 breakpoint의 오버로드를 구현한 dbg라는 헬퍼 패키지를 가져옵니다. 이 함수는 로깅 및 조건문을 지원합니다:
name = idc.get_segm_name(segment)
dbg.bp(name==".text", f"found {name} at {segment}")
또한 breakpoint() 호출은 파일 끝에 절대 위치해서는 안 되며, 코드의 다음 명령어에서 중단되므로 항상 다른 코드 줄 앞에 있어야 합니다. dbg 패키지를 사용하기로 결정한 경우 모든 참조를 제거하거나 일반 IDA 스크립트로 실행하기 전에 조건부로 __idacode__ 변수를 사용해야 합니다.
디버거를 연결하면 새 디버거 인스턴스가 생성된다는 점도 중요합니다. 대부분의 경우 원하는 것이 아닙니다. 디버거에서 연결을 끊으면 VS Code의 원격 디버거를 사용하여 다시 연결하세요.
