Ruby, Kotlin, Groovy, Clojure 및 Jshell 지원 Ghidra를 지원합니다.
플러그인의 최신 릴리스 빌드는 릴리스 페이지를 확인하십시오. 다운로드 후 File->Install Extensions... , Add Extension 옵션을 선택한 다음 다운로드 된 zip 파일로 탐색하여 ghidra에 이것을 설치할 수 있습니다. 새로운 확장이 활성화되도록 Ghidra를 다시 시작하라는 메시지가 표시됩니다.
그런 다음 플러그인을 사용하기 전에 활성화해야합니다. 다음에 CodeBrowser 도구를 열 때이를 수행하라는 메시지가 표시 될 수 있습니다.이 경우 OK를 선택할 수 있습니다. 그렇지 않으면 CodeBrowser 도구를 열고 File->Configure... 로 이동하여 Ruby 용 RubyDragon 플러그인, Kotlin 용 KotlinDragon 플러그인, Java 통역사의 JShellDragon 플러그인 및 Clojure 용 ClojureDragon 플러그인을 선택하여 수동으로 활성화 할 수 있습니다. Ghidra Core 목록에 표시되어야하지만 찾을 수없는 경우 Configure All Plugins 옵션을 확인할 수 있습니다.
언어 플러그인을 제거 해야하는 경우 CodeBrowser 도구의 구성 대화 상자에서 상자를 선택 취소하여 수행 할 수 있습니다. 확장을 전체적으로 제거하려면 프로젝트 브라우저에서 Install Extensions 메뉴에서이를 확인하고 최종적으로 GHIDRA를 다시 시작해야합니다. 특히 개발을 위해 Eclipse 플러그인을 통해 플러그인을로드하려면 .ghidra/<ghidrainstall>/Extensions 폴더에서 폴더를 수동으로 폴더를 삭제해야 할 수도 있습니다.
Rubydragon 플러그인이 활성화되면 Window->Ruby 로 이동하거나 도구 모음의 Ruby 아이콘을 클릭하여 CodeBrowser 도구에서 대화식 루비 세션을 열 수 있습니다. 이것은 Jruby가 제공하는 IRB 세션입니다.
Java 및 Python 스크립트에 제공되는 동일한 환경 변수 도이 세션에서 다음과 같은 글로벌 변수와 함께 몇 가지 엑스트라와 함께 사용할 수 있습니다.
$current_address
$current_api
$current_data
$current_function
$current_highlight
$current_instruction
$current_location
$current_program
$current_selection $current_api 변수는 $current_program 으로 생성 된 FlatProgramAPI 의 인스턴스입니다. 이것은 GhidraScript 인스턴스 내에서 사용할 수있는 편의 기능 중 많은 (그러나 전부는 아님)가 있습니다.
Ghidra가 제공하는 많은 클래스는 대화식 터미널로 자동으로 가져올 수 있으므로 java_import 문을 사용하여 사용할 필요가 없습니다. 이를 사용자 정의하려면 설치에서 auto-import.xml 데이터 파일을 수정할 수 있습니다. 이 기능을 활성화하려면 (시작 시간에 영향을 미칩니다) Ruby Dragon Interpreters 카테고리에서 관련 옵션을 활성화 할 수 있습니다. 동일한 데이터 파일을 사용하여 다른 모든 언어에 대해서도 수행됩니다.
당신은 또한 Java 또는 Python과 마찬가지로 Ruby에서 스크립트를 쓸 수도 있습니다. Ruby는 새 스크립트 유형으로 제공되며 Jruby와 Ghidra 기본 사항의 기본 사용을 보여주는 스크립트 관리자의 Examples.Ruby 디렉토리에서 여러 예제 스크립트를 볼 수 있습니다. 또한 스크립트에는 추가 글로벌 변수 $script 있어 RubyScript 인스턴스에 액세스 할 수 있습니다.
대화 형 세션에서 사용 가능한 동일한 글로벌 변수도 스크립트와 동일한 방식으로 사용할 수 있도록 제공됩니다.
Ghidra Functionality->Scripting->Ruby Interpreter 페이지의 GHIDRA 도움말 메뉴 ( F1 을 누르면 도움을 줄 수 있습니다.
대화식 통역사 또는 스크립트에 보석을 설치하려면 보석 환경이 얼마나 분리 된 지에 따라 몇 가지 추가 단계를 수행해야합니다.
루비 환경을 관리하기 위해 RVM과 같은 것을 사용하는 경우, GEM_PATH 환경 변수를 이미 GEM 설치를 가리키도록 설정하도록 단순히 의존 할 수 있습니다. 그러나 최대한의 성공을 위해서는 Rubydragon에 패키지 된 것과 동일한 버전의 Jruby 설치로 전환해야하며 RVM이 그 안의 Gemset을 가리 키도록해야합니다.
Ghidra Gem이 Ghidra에 특화되거나 Ghidra 외부에 Ruby 환경이 없으면 직접 위치를 선택하고 GEM_PATH 환경 변수를이를 가리키도록 설정할 수 있습니다. 새로운 보석을 경로에 설치하려면 Bundled Jruby Jar에서 gem 버전을 호출하여 필요에 따라 버전과 경로를 변경하십시오. 여기서 보석 경로는 ~/ghidra_gems 로 설정됩니다
# from a shell environment
java -jar ~ /.ghidra/.ghidra_10.2_PUBLIC/Extensions/RubyDragon/lib/jruby-complete-9.3.9.0.jar -S gem install -i ~ /ghidra_gems wrapture REM from a windows command line
java -jar %USERPROFILE% .ghidra.ghidra_10.2_PUBLICExtensionsRubyDragonlibjruby-complete-9.3.9.0.jar -S gem install -i %USERPROFILE% ghidra_gems wrapture 이 작업이 완료되면 스크립트 및 대화식 터미널에서 wrapture 보석 (또는 설치 한 내용)이 필요할 수 있습니다.
글로벌 구성에서 환경 변수를 생성하지 않으려면 GEM_PATH 적절하게 설정하기 위해 GHIDRA를 시작하는 데 사용되는 스크립트를 엉망으로 만들어야합니다. launch.bat 또는 launch.sh (OS에 따라)에서 set 명령을 추가하여이를 수행 할 수 있습니다. Windows Systems의 경우 환경 변수가 전달되도록 GHIDRA를 시작하는 데 사용되는 start 명령에서 /I 매개 변수를 제거해야합니다.
Kotlin은 KotlinDragon 플러그인에서 제공하고 Window->Kotlin 메뉴 옵션에서 도달하는 등의 명백한 차이점을 가진 Ruby Toolset과 거의 같은 방식으로 사용됩니다. 스크립트의 내장 변수와 Kotlin의 통역사 창은 Java와 동일합니다.
currentAddress
currentAPI
currentData
currentFunction
currentHighlight
currentInstruction
currentLocation
currentProgram
currentSelection
Kotlin 스크립트는 kts 확장 기능을 사용하여 먼저 Java에 컴파일되지 않고 스크립트로 해석됩니다.
Groovy는 GroovyDragon 플러그인에 제공되며 Window->Groovy 메뉴 옵션에서 도달 할 수있는 다른 언어와 동일한 패턴을 따릅니다. 다른 사람들이 제공하는 것과 동일한 내장 변수를 가지고 있습니다.
currentAddress
currentAPI
currentData
currentFunction
currentHighlight
currentInstruction
currentLocation
currentProgram
currentSelection
Clojure는 ClojureDragon 플러그인 및 메뉴 항목 Window->Clojure 에 제공되는 다른 언어와 동일한 패턴을 따릅니다.
Clojure 통역사 및 스크립트에는 ghidra 네임 스페이스 내에서 상태 정보를 이용할 수있는 바인딩도 있습니다. 그들은 다음과 같습니다.
ghidra/current-address
ghidra/current-api
ghidra/current-data
ghidra/current-function
ghidra/current-highlight
ghidra/current-instruction
ghidra/current-location
ghidra/current-program
ghidra/current-selection ghidra/current-api 다른 통역사와 마찬가지로 currentProgram 으로 생성 된 FlatProgramAPI 의 인스턴스로 제공됩니다. Ghidra 클래스의 자동 가져 오기는 ghidra 네임 스페이스에서도 수행됩니다.
그리고 Ruby와 마찬가지로 ghidra/script 바인딩은 기본 ClojureScript 인스턴스에 대한 액세스를 제공하는 스크립트 내에서 사용할 수 있습니다. 그러나 Ruby와 달리이 변수는 보호 된 필드 또는 개인 방법에 대한 액세스를 허용하지 않습니다. 대신 ghidra 네임 스페이스에도 주입됩니다. 예를 들어, 스크립트의 TaskMonitor 에 액세스하려면 ghidra/monitor 참조하여 진행 상황을 업데이트하는 것과 같은 작업을 수행 할 수 있습니다. Clojure Ghidra Basics 스크립트에는 이러한 유형의 액세스의 예가 있습니다. Python 스크립팅 인터페이스에 익숙한 사람들은이 패러다임이 동일하기 때문에이 패러다임을 인식 할 수 있습니다.
Jshell 플러그인은 Java에 포함 된 Java Repl 인 Jshell의 대화식 Java 통역사를 제공합니다. Java 스크립트에서 사용할 수있는 동일한 내장 변수를 제공합니다.
currentAddress
currentAPI
currentData
currentFunction
currentHighlight
currentInstruction
currentLocation
currentProgram
currentSelection
이 통역사는 Java 스크립트를 작성할 때 특히 편리합니다. Python 또는 Kotlin과 같은 다른 언어로 전환 할 필요없이 스크립트에서 코드 스 니펫을 반복적으로 테스트 할 수 있기 때문입니다.
현재 가장 쉬운 방법은 제안을 게시하거나 시도해보고 문제가있는 경우 문제를 여는 것입니다. 토론에 참여하려면 문제 목록으로 가십시오!
모험을 느끼고 있다면 선택한 언어로 예제 스크립트를 추가 할 수 있습니다. 이것은 Ghidra와 함께 포장 된 스크립트 중 하나와 동일하거나 새로운 것이 될 수 있습니다! 나중에 깨지지 않도록 github 액션 워크 플로우에 테스트를 추가하십시오. ghidra_scripts 폴더를 확인하여 지금 거기에 무엇이 있는지 확인하고 추가 할 수있는 것에 영감을 얻을 수 있습니다.
또는 그 모든 것이 조금 많으면, 당신의 생각으로 트위터의 #ghidrarubydragon에서 소리를냅니다!