Ruby, Kotlin, Groovy, Clojure และ Jshell สนับสนุน Ghidra
ตรวจสอบหน้าเผยแพร่สำหรับการสร้างปลั๊กอินล่าสุด หลังจากดาวน์โหลดคุณสามารถติดตั้งสิ่งนี้ใน Ghidra โดยไปที่ File->Install Extensions... เลือกตัวเลือก Add Extension จากนั้นนำทางไปยังไฟล์ ZIP ที่ดาวน์โหลดมา คุณจะได้รับแจ้งให้รีสตาร์ท Ghidra เพื่อให้ส่วนขยายใหม่ทำงานได้
จากนั้นคุณจะต้องเปิดใช้งานปลั๊กอินก่อนใช้งาน คุณอาจได้รับแจ้งให้ทำเช่นนี้ในครั้งต่อไปที่คุณเปิดเครื่องมือ CodeBrowser ซึ่งในกรณีนี้คุณสามารถเลือกตกลงได้ มิฉะนั้นคุณสามารถเปิดใช้งานด้วยตนเองได้โดยการเปิดเครื่องมือ CodeBrowser ไปที่ File->Configure... และเลือกปลั๊กอิน RubyDragon สำหรับ Ruby, ปลั๊กอิน KotlinDragon สำหรับ Kotlin, ปลั๊กอิน JShellDragon สำหรับล่าม Java และปลั๊กอิน ClojureDragon พวกเขาควรปรากฏในรายการ Ghidra Core แต่คุณสามารถตรวจสอบตัวเลือก Configure All Plugins หากคุณไม่สามารถค้นหาได้
หากคุณต้องการลบปลั๊กอินภาษาคุณสามารถทำได้โดยยกเลิกการตรวจสอบกล่องในกล่องโต้ตอบการกำหนดค่าในเครื่องมือ CodeBrowser หากคุณต้องการลบส่วนขยายโดยรวมคุณจะต้องยกเลิกการตรวจสอบในเมนู Install Extensions จากเบราว์เซอร์โครงการและในที่สุดก็รีสตาร์ท Ghidra คุณอาจต้องลบโฟลเดอร์ออกจากโฟลเดอร์ .ghidra/<ghidrainstall>/Extensions ของคุณเพื่อลบออกโดยเฉพาะอย่างยิ่งหากคุณต้องการโหลดปลั๊กอินผ่านปลั๊กอิน Eclipse เพื่อการพัฒนา
เมื่อเปิดใช้งานปลั๊กอิน rubydragon คุณจะสามารถเปิดเซสชันทับทิมแบบโต้ตอบจากเครื่องมือ CodeBrowser โดยไปที่ Window->Ruby หรือคลิกที่ไอคอนทับทิมในแถบเครื่องมือ นี่คือเซสชั่น IRB ที่จัดทำโดย JRuby
ตัวแปรสภาพแวดล้อมเดียวกันที่มีให้ในสคริปต์ Java และ Python ยังมีอยู่ในเซสชั่นนี้พร้อมกับความพิเศษไม่กี่อย่างเช่นตัวแปรทั่วโลกต่อไปนี้:
$current_address
$current_api
$current_data
$current_function
$current_highlight
$current_instruction
$current_location
$current_program
$current_selection ตัวแปร $current_api เป็นอินสแตนซ์ของ FlatProgramAPI ที่สร้างขึ้นด้วย $current_program สิ่งนี้มีฟังก์ชั่นความสะดวกสบายมากมาย (แต่ไม่ใช่ทั้งหมด) ที่จะมีอยู่ภายในอินสแตนซ์ GhidraScript
คลาสที่จัดทำโดย Ghidra สามารถนำเข้ามาในเทอร์มินัลแบบโต้ตอบได้โดยอัตโนมัติดังนั้นคุณไม่จำเป็นต้องใช้คำสั่ง java_import เพื่อใช้งาน หากคุณต้องการปรับแต่งสิ่งนี้คุณสามารถแก้ไขไฟล์ข้อมูล auto-import.xml ในการติดตั้ง ในการเปิดใช้งานคุณสมบัตินี้ (จะส่งผลกระทบต่อเวลาเริ่มต้น) จากนั้นคุณสามารถเปิดใช้งานตัวเลือกที่เกี่ยวข้องในหมวดหมู่ Ruby Dragon Interpreters สิ่งนี้ทำสำหรับภาษาอื่น ๆ ทั้งหมดเช่นกันโดยใช้ไฟล์ข้อมูลเดียวกัน
นอกจากนี้คุณยังสามารถเขียนสคริปต์ในทับทิมเช่นเดียวกับที่คุณทำกับ Java หรือ Python Ruby จะมีให้เป็นประเภทสคริปต์ใหม่และคุณสามารถดูสคริปต์ตัวอย่างได้หลายตัวอย่างใน Examples.Ruby ไดเรกทอรีของตัวจัดการสคริปต์ที่แสดงการใช้งานพื้นฐานของพื้นฐานทั้ง JRuby และ Ghidra สคริปต์ยังมี $script ตัวแปรส่วนกลางเพิ่มเติมที่ให้การเข้าถึงอินสแตนซ์ RubyScript สำหรับพวกเขา
ตัวแปรทั่วโลกเดียวกันที่มีอยู่ในเซสชันแบบโต้ตอบนั้นมีให้สำหรับสคริปต์ที่จะใช้ในลักษณะเดียวกัน
นอกจากนี้คุณยังสามารถค้นหาความช่วยเหลือได้โดยตรงในเมนูช่วยเหลือ Ghidra (กด F1 ) บน Ghidra Functionality->Scripting->Ruby Interpreter
หากคุณต้องการติดตั้งอัญมณีที่จะมีอยู่ในล่ามหรือสคริปต์แบบโต้ตอบของคุณคุณจะต้องทำตามขั้นตอนพิเศษสองสามขั้นตอนขึ้นอยู่กับว่าคุณต้องการให้สภาพแวดล้อมของอัญมณีเป็นอย่างไร
หากคุณใช้บางอย่างเช่น RVM เพื่อจัดการสภาพแวดล้อมทับทิมของคุณคุณสามารถพึ่งพาสิ่งนี้เพื่อตั้งค่าตัวแปรสภาพแวดล้อม GEM_PATH เพื่อชี้ไปที่การติดตั้ง GEM ของคุณ อย่างไรก็ตามเพื่อความสำเร็จสูงสุดคุณควรเปลี่ยนเป็นการติดตั้ง JRuby ซึ่งเป็นเวอร์ชันเดียวกับที่บรรจุใน Rubydragon และให้ RVM ชี้ไปที่ Gemset ภายในนั้น
หากคุณต้องการให้ Ghidra Gem ตั้งค่าเฉพาะกับ Ghidra หรือถ้าคุณไม่มีสภาพแวดล้อมทับทิมนอก Ghidra ให้ชี้ไปที่คุณสามารถเลือกตำแหน่งด้วยตัวคุณเองและตั้งค่าตัวแปรสภาพแวดล้อม GEM_PATH เพื่อชี้ไปที่นั้น ในการติดตั้งอัญมณีใหม่ไปยังเส้นทางให้เรียกใช้เวอร์ชันของ gem จาก Jruby Jar ที่รวมอยู่เช่นนั้นเปลี่ยนเวอร์ชันและเส้นทางตามต้องการ ที่นี่เส้นทางอัญมณีจะถูกตั้งค่าเป็น ~/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 (หรืออะไรก็ตามที่คุณเลือกที่จะติดตั้ง) จากสคริปต์และเทอร์มินัลแบบโต้ตอบ
หากคุณไม่ต้องการสร้างตัวแปรสภาพแวดล้อมในการกำหนดค่าทั่วโลกของคุณคุณจะต้องยุ่งกับสคริปต์ที่ใช้ในการเปิด Ghidra เพื่อตั้งค่า GEM_PATH อย่างเหมาะสม คุณสามารถทำได้โดยการเพิ่มคำสั่ง set ใน launch.bat หรือ launch.sh (ขึ้นอยู่กับระบบปฏิบัติการของคุณ) สำหรับระบบ Windows คุณจะต้องลบพารามิเตอร์ /I ออกจากคำสั่ง start ที่ใช้ในการเรียกใช้ Ghidra เพื่อให้ตัวแปรสภาพแวดล้อมถูกส่งผ่าน
Kotlin ใช้ในลักษณะเดียวกับชุดเครื่องมือทับทิมที่มีความแตกต่างที่ชัดเจนเช่นถูกจัดเตรียมโดยปลั๊กอิน KotlinDragon และเข้าถึงได้จากตัวเลือกเมนู Window->Kotlin ตัวแปรในตัวสำหรับสคริปต์และหน้าต่างล่ามใน 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 มีให้เป็นอินสแตนซ์ของ FlatProgramAPI ที่สร้างขึ้นด้วย currentProgram เช่นเดียวกับล่ามอื่น ๆ การนำเข้าคลาส Ghidra โดยอัตโนมัติยังทำในเนมสเปซ ghidra
และเช่นเดียวกับ Ruby การผูก ghidra/script มีอยู่ภายในสคริปต์ที่ให้การเข้าถึงอินสแตนซ์ ClojureScript พื้นฐาน แตกต่างจากทับทิมตัวแปรนี้ไม่อนุญาตให้เข้าถึงเขตข้อมูลป้องกันหรือวิธีการส่วนตัว สิ่งเหล่านี้จะถูกฉีดเข้าไปในเนมสเปซ ghidra เช่นกัน ตัวอย่างเช่นในการเข้าถึง TaskMonitor สำหรับสคริปต์คุณสามารถอ้างอิง ghidra/monitor เพื่อทำสิ่งต่าง ๆ เช่นอัปเดตความคืบหน้า สคริปต์พื้นฐานของ Clojure Ghidra มีตัวอย่างของการเข้าถึงประเภทนี้ ผู้ที่คุ้นเคยกับอินเทอร์เฟซสคริปต์ Python อาจรับรู้ถึงกระบวนทัศน์นี้ได้เช่นกัน
ปลั๊กอิน JShell ให้ล่าม Java แบบโต้ตอบโดย JShell ซึ่งเป็น Java Repl รวมอยู่ใน Java มันมีตัวแปรในตัวเดียวกันที่มีอยู่ในสคริปต์ Java:
currentAddress
currentAPI
currentData
currentFunction
currentHighlight
currentInstruction
currentLocation
currentProgram
currentSelection
ล่ามนี้มีประโยชน์อย่างยิ่งเมื่อเขียนสคริปต์ Java เนื่องจากช่วยให้คุณทดสอบตัวอย่างรหัสจากสคริปต์ซ้ำ ๆ โดยไม่จำเป็นต้องทำการแปลงเป็นภาษาอื่น ๆ เช่น Python หรือ Kotlin
ตอนนี้วิธีที่ง่ายที่สุดในการมีส่วนร่วมคือการโพสต์คำแนะนำใด ๆ หรือลองใช้และเปิดปัญหาหากคุณมีปัญหาใด ๆ ตรงไปที่รายการปัญหาเพื่อเข้าร่วมการสนทนา!
หากคุณรู้สึกผจญภัยคุณสามารถเพิ่มสคริปต์ตัวอย่างในภาษาที่คุณเลือก นี่อาจเทียบเท่ากับหนึ่งในสคริปต์ที่มาพร้อมกับ Ghidra หรืออาจเป็นเรื่องใหม่ทั้งหมด! เพียงให้แน่ใจว่าคุณเพิ่มการทดสอบในเวิร์กโฟลว์การกระทำของ GitHub เพื่อไม่ให้เสียในภายหลัง ตรวจสอบโฟลเดอร์ ghidra_scripts เพื่อดูว่าตอนนี้มีอะไรอยู่และอาจดึงแรงบันดาลใจบางอย่างเกี่ยวกับสิ่งที่คุณสามารถเพิ่มได้
หรือถ้าทั้งหมดนั้นมากเพียงแค่ให้เราตะโกนที่ #Ghidrarubydragon บน Twitter ด้วยความคิดของคุณ!