
리버스 엔지니어링 속도를 높이기 위해 언어 모델에 질의하는 IDA 플러그인
Gepetto는 다양한 대규모 언어 모델을 사용하여 IDA Pro(≥ 7.6)로 디컴파일된 함수에 의미를 부여하는 Python 플러그인입니다. 이를 활용하여 함수가 수행하는 작업을 설명하고 변수 이름을 자동으로 바꿀 수 있습니다. 다음은 단 몇 초 만에 얻을 수 있는 결과의 간단한 예시입니다:

Gepetto를 설치하는 가장 쉬운 방법은 Hex-Rays CLI 도구(hcli)를 사용하는 것입니다:
pip install ida-hcli
hcli plugin install gepetto
이렇게 하면 플러그인이 IDA 사용자 디렉터리에 자동으로 설치됩니다.
또는 플러그인을 수동으로 설치할 수 있습니다:
gepetto.py와 gepetto/ 폴더)를 IDA 플러그인 폴더($IDAUSR/plugins)에 넣습니다.%APPDATA%\Hex-Rays\IDA Pro\plugins\~/.idapro/plugins/~/.idapro/plugins/Computer\HKEY_CURRENT_USER\Software\Hex-Rays\IDA (Windows 기본값: %LOCALAPPDATA%\Programs\Python\Python39).[/path/to/python] -m pip install -r requirements.txt
Gepetto는 IDA 사용자 디렉터리에 구성을 보관하므로 플러그인을 업그레이드해도 구성이 유지됩니다:
%APPDATA%\Hex-Rays\IDA Pro\cfg\gepetto\config.ini~/.idapro/cfg/gepetto/config.ini플러그인이 처음 실행될 때 gepetto/config.ini를 해당 위치에 복사하고 콘솔에 경로를 알려줍니다. 그 이후에는 플러그인과 함께 배포되는 복사본은 템플릿일 뿐이므로, 사용자 디렉터리에 있는 파일을 편집하십시오. 위치를 완전히 재정의하려면 GEPETTO_CONFIG_DIR을 설정하십시오.
해당 파일에 API 키를 추가하거나, 파일에 명시된 환경 변수를 통해 키를 제공하십시오. OpenAI의 경우 이 페이지에서 키를 생성할 수 있습니다. API 쿼리는 일반적으로 무료가 아니며(그다지 비싸지는 않지만), 해당 제공업체에 결제 수단을 설정해야 합니다.
Gepetto는 세 곳에서 제공업체를 로드하며, 메뉴 이름이 충돌할 경우 각각이 이전 것을 재정의합니다: gepetto/models/에 포함된 모듈, 그다음 $IDAUSR/cfg/gepetto/providers/의 모든 .py 파일, 그다음 gepetto.providers 엔트리 포인트를 광고하는 설치된 배포판입니다. 재정의는 콘솔에 알려지므로, 플러그인을 포크하지 않고도 내장 제공업체를 교체할 수 있습니다.
드롭인 제공업체는 내장 제공업체와 정확히 동일한 계약을 사용합니다. OpenAI 호환 엔드포인트의 경우 파일 전체는 다음과 같습니다:
import openai
import gepetto.config
import gepetto.models.model_manager
from gepetto.models.openai import GPT
class MyProvider(GPT):
@staticmethod
def get_menu_name() -> str:
return "MyProvider"
@staticmethod
def supported_models():
return ["my-model-v1"]
@staticmethod
def is_configured_properly() -> bool:
return bool(gepetto.config.get_config("MyProvider", "API_KEY", "MYPROVIDER_API_KEY"))
def __init__(self, model):
try:
super().__init__(model)
except ValueError:
pass # No OpenAI key needed for this provider.
self.model = model
self.client = openai.OpenAI(
api_key=gepetto.config.get_config("MyProvider", "API_KEY", "MYPROVIDER_API_KEY"),
base_url="https://api.example.com/v1",
)
gepetto.models.model_manager.register_model(MyProvider)
config.ini에 일치하는 [MyProvider] 섹션을 추가하고 IDA를 재시작하세요. 프로바이더는 로드 시점에 등록되므로, 새 키나 새 파일이 메뉴에 나타나려면 재시작이 필요합니다.
대신 패키지로 배포하려면 클래스나 register(register_model) 콜러블을 노출하세요:
[project.entry-points."gepetto.providers"]
myprovider = "myprovider:MyProvider"
providers/에 있는 파일들은 IDA가 시작될 때 임의의 Python을 실행합니다. 이는 다른 IDA 플러그인과 동일한 신뢰 수준이지만, 신뢰하는 provider만 설치하십시오.
플러그인이 올바르게 설치되면, 아래 스크린샷과 같이 IDA의 의사코드 창 컨텍스트 메뉴에서 플러그인을 호출할 수 있습니다:

Edit > Gepetto 메뉴에서 Gepetto가 지원하는 모델 간에 전환할 수 있습니다:

Gepetto는 또한 IDA에서 직접 LLM에 질문할 수 있는 CLI 인터페이스를 제공합니다. 입력 바에서
Gepetto를 선택해야 합니다:

다음 단축키를 사용할 수 있습니다:
Ctrl + Alt + GCtrl + Alt + KCtrl + Alt + R초기 테스트 결과, 더 나은 이름을 요청하는 것은 먼저 함수 설명을 요청할 때 더 잘 작동합니다 – 이는 아마도 모델이 자신의 주석을 사용하여 더 정확한 제안을 하기 때문인 것으로 보입니다. AI의 응답에는 무작위성 요소가 있습니다. 어떤 이유로든 처음 받은 응답이 마음에 들지 않으면, 언제든지 명령을 다시 실행할 수 있습니다.
구성에서 로케일을 편집하여 Gepetto의 언어를 변경할 수 있습니다. 예를 들어, 플러그인을 프랑스어로 사용하려면 다음을 추가하기만 하면 됩니다:
[Gepetto]
LANGUAGE = "fr_FR"
선택한 로케일은 gepetto/locales의 폴더 이름과 일치해야 합니다. 원하는 언어를 사용할 수 없는 경우,
직접 추가하여 프로젝트에 기여할 수 있습니다! 원하는 로케일에 대한 새 폴더를 생성하고
(예: gepetto/locales/de_DE/LC_MESSAGES/), 업데이트된 .po 파일로 새 풀 리퀘스트를 열면 됩니다. 이 파일은
gepetto/locales/gepetto.pot를 복사하고 편집하여 생성할 수 있습니다(msgstr로 시작하는 모든 줄을
현지화된 버전으로 교체).