สคริปต์ Ghidra การโต้ตอบของ Ollama API สำหรับวิศวกรรมย้อนกลับที่ได้รับความช่วยเหลือจาก LLM
นี่คืออะไร?
สคริปต์นี้โต้ตอบกับ API ของ Ollama เพื่อโต้ตอบกับ Large Language Models (LLM) ใช้ Ollama API เพื่อทำงานวิศวกรรมย้อนกลับต่างๆ โดยไม่ต้องออกจาก Ghidra รองรับอินสแตนซ์ Ollama ทั้งในพื้นที่และระยะไกล สคริปต์นี้ได้รับแรงบันดาลใจจาก GptHidra
รุ่นที่รองรับ
สคริปต์นี้รองรับโมเดลใดๆ ที่ Ollama รองรับ
นอกจากนี้ Ollama ยังเพิ่มการรองรับโมเดลใดๆ ก็ตามที่มีบน HuggingFace ในรูปแบบ GGUF เช่น:
ollama run hf.co/arcee-ai/SuperNova-Medius-GGUF
ข้อกำหนดเบื้องต้น
- กิดรา
- โอลามา
- Ollama รุ่นใดก็ได้
การตั้งค่าโอลามา
คุณสามารถแทนที่ llama3.1:8b
ด้วยโมเดลที่เข้ากันได้กับ Ollama ได้ตามใจชอบ
curl -fsSL https://ollama.com/install.sh | sh
ollama run llama3.1:8b
ตอนนี้คุณน่าจะพร้อมแล้ว localhost:11434
ควรพร้อมที่จะจัดการกับคำขอ
หมายเหตุ: สคริปต์นี้ยังรองรับอินสแตนซ์ระยะไกล ตั้งค่าที่อยู่ IP และพอร์ตระหว่างการกำหนดค่าครั้งแรก
มันทำอะไรได้บ้าง?
- อธิบายฟังก์ชันที่อยู่ในหน้าต่างตัวถอดรหัสในปัจจุบัน
- แนะนำชื่อสำหรับฟังก์ชันปัจจุบัน จะตั้งชื่อฟังก์ชันโดยอัตโนมัติหากเปิดใช้งานไว้
- เขียนฟังก์ชันปัจจุบันใหม่พร้อมความคิดเห็นที่แนะนำ
- เขียนฟังก์ชันปัจจุบันใหม่ทั้งหมด พยายามปรับปรุงชื่อฟังก์ชัน/พารามิเตอร์/ตัวแปร และเพิ่มความคิดเห็นด้วย
- ผู้ใช้สามารถถามคำถามเกี่ยวกับฟังก์ชันได้
- ค้นหาจุดบกพร่อง/แนะนำช่องโหว่ที่อาจเกิดขึ้นในฟังก์ชันปัจจุบัน (เพิ่มเติมเพียงเพื่อให้แน่ใจว่าคุณได้ครอบคลุมทุกอย่าง คำแนะนำบางอย่างอาจโง่เนื่องจากไม่มีบริบท)
- ใช้เวอร์ชันที่ได้รับการแก้ไขของสคริปต์ LeafBlowerLeafFunctions.py Ghidra นี้เพื่อทำการวิเคราะห์ฟังก์ชัน 'leaf' ที่เป็นไปได้โดยอัตโนมัติ เช่น strcpy , memcpy , strlen ฯลฯ ในไบนารีที่มีสัญลักษณ์ที่ถูกถอด เปลี่ยนชื่ออัตโนมัติหากเปิดใช้งานสิ่งนี้
- อธิบายคำสั่งการประกอบเดี่ยวที่เลือกไว้ในหน้าต่างรายการในปัจจุบัน
- อธิบายคำแนะนำการประกอบหลายรายการที่เลือกไว้ในหน้าต่างรายการในปัจจุบัน
- ข้อความแจ้งทั่วไปสำหรับการถามคำถาม (แทนที่จะต้องเข้า Google เหมาะสำหรับเรื่องง่ายๆ)
ตัวเลือกการกำหนดค่า
มีตัวเลือกการกำหนดค่าต่อไปนี้ให้ใช้งานได้ และสามารถกำหนดค่าได้เมื่อเรียกใช้ครั้งแรก:
- IP ของเซิร์ฟเวอร์ : หากใช้อินสแตนซ์ระยะไกล ให้ตั้งค่าเป็น IP ของอินสแตนซ์ระยะไกล หรือป้อน
localhost
- พอร์ต : หากอินสแตนซ์ของคุณอยู่บนพอร์ตอื่น ให้เปลี่ยนที่นี่ - ค่าเริ่มต้นคือ
11434
- รูปแบบ : เลือก
http
หรือ https
ขึ้นอยู่กับการกำหนดค่าอินสแตนซ์ของคุณ - Model : เลือกโมเดลที่คุณต้องการใช้ในการวิเคราะห์ คุณสามารถเปลี่ยนแปลงได้ทุกเมื่อ
- พรอมต์เฉพาะโครงการ : ใช้เพื่อให้บริบทเพิ่มเติมแก่โมเดล หากจำเป็น
- ความคิดเห็นการตอบกลับ : บางตัวเลือกจะเก็บการตอบกลับเป็นความคิดเห็นที่ด้านบนของฟังก์ชัน ซึ่งสามารถเปิด/ปิดใช้งานได้ที่นี่
- การเปลี่ยนชื่ออัตโนมัติ : ตัวเลือกบางตัวพยายามเปลี่ยนชื่อฟังก์ชันโดยอัตโนมัติตามการตอบสนอง ซึ่งสามารถเปิด/ปิดใช้งานได้ที่นี่
สามารถใช้ตัวเลือก 11 และ 12 เพื่อปรับการตั้งค่าหลังจากการเรียกใช้ครั้งแรก
การใช้งาน
- วางสคริปต์ GhidrOllama.py และไดเร็กทอรี ghidrollama_utils ในไดเร็กทอรีสคริปต์ Ghidra ของคุณ (โดยปกติคือ
~/ghidra_scripts
) - ค้นหาฟังก์ชัน/คำแนะนำที่คุณต้องการป้อนให้กับ LLM
- เรียกใช้สคริปต์จากหน้าต่างตัวจัดการสคริปต์
- หากนี่เป็นครั้งแรกที่เรียกใช้สคริปต์ ให้กำหนดค่าเริ่มต้นให้เสร็จสิ้น (สามารถเปลี่ยนแปลงได้ในภายหลัง)
- เลือกวิธีที่คุณต้องการวิเคราะห์การทำงาน/คำแนะนำ
- รอจนกระทั่งเอาต์พุตถูกพิมพ์ไปยังคอนโซล (เวลารอจะแตกต่างกันไปขึ้นอยู่กับรุ่นและข้อกำหนดของโฮสต์)
วิธีการวิ่ง
การเข้าไปในหน้าต่างสคริปต์เพื่อเรียกใช้สคริปต์นี้ทุกครั้งไม่สะดวกสามารถเรียกใช้สคริปต์ได้อย่างง่ายดายด้วยวิธีดังต่อไปนี้:
- การผูกปุ่ม : การผูกปุ่มเริ่มต้นสำหรับสคริปต์นี้คือ Q
- แถบเครื่องมือ : คุณสามารถคลิกไอคอนขนาดเล็กบนแถบเครื่องมือเพื่อเรียกใช้สคริปต์ได้
การผูกกุญแจ
หากต้องการเปิดใช้งาน เมื่อคุณเพิ่มสคริปต์ของคุณลงในรายการไดเร็กทอรีสคริปต์ Ghidra แล้ว ให้ค้นหาสคริปต์ในรายการ คลิกขวาที่ผลลัพธ์ และเลือก "กำหนดการเชื่อมโยงคีย์" หากระบบแจ้งให้ใส่รหัส ให้ป้อน q
แถบเครื่องมือ
หากต้องการเปิดใช้งานไอคอนแถบเครื่องมือ ให้ค้นหาสคริปต์ในตัวจัดการสคริปต์ แล้วคลิกกล่องกาเครื่องหมายในคอลัมน์แรก (คอลัมน์ ในแถบเครื่องมือ ) ไอคอน GhidrOllama ควรปรากฏในแถบเครื่องมือ
หมายเหตุ
- เป็นที่น่าสังเกตว่าการวิเคราะห์จะดีพอๆ กับโมเดลเท่านั้น โดยพื้นฐานแล้วสคริปต์นี้เป็นเพียงการเชื่อมโยงโมเดลและ Ghidra
- ยิ่งโมเดลดี (พารามิเตอร์มากขึ้น ช้าลง) การวิเคราะห์ก็จะครอบคลุมและถูกต้องมากขึ้น (โดยส่วนใหญ่!)
- หากคุณต้องการภาพรวมโดยย่อของฟังก์ชัน llama3.1:8b นั้นรวดเร็วและให้การวิเคราะห์ที่เหมาะสม
- ระวังฟังก์ชันขนาดใหญ่และโมเดลที่มีบริบทต่ำ หากฟังก์ชันมีขนาดใหญ่เกินไปสำหรับหน้าต่างบริบท โมเดลจะตอบสนองด้วยคำพูดที่ไม่มีความหมายทั้งหมด (หากตอบสนองเลย)
ตัวอย่างการวิเคราะห์ฟังก์ชัน
ด้านล่างนี้คือการใช้งาน strchr() ดังที่เห็นในหน้าต่างถอดรหัส Ghidra ที่มีสัญลักษณ์ที่ถูกถอดออก: