Ghidra + IDA ตรวจไม่พบสตริง แต่ Radare2 สามารถ

Jan 15 2021

ฉันยังใหม่กับการทำวิศวกรรมย้อนกลับและฉันลองใช้ Ghidra, IDA (Freeware) และ Radare2 ด้วย CrackMe ง่ายๆปัญหาคือทั้ง Ghidra และ IDA ไม่สามารถตรวจจับสตริงได้ในขณะที่ Radare2 (ใช้ Cutter GUI) สามารถหาชื่อได้ ฉันใช้การวิเคราะห์เริ่มต้นสำหรับทั้ง 3 คนมีบางอย่างที่ขาดหายไปหรือไม่? เพราะแม้แต่คำสั่ง 'สตริง' ก็สามารถค้นหาสตริงที่ฉันต้องการได้

Ghidra:

IDA:

Radare2 (คัตเตอร์):

คำตอบ

6 R4444 Jan 15 2021 at 22:05

ฉันไม่ทราบความยาวที่แน่นอนของสตริง แต่สิ่งที่ควรทราบมีดังนี้:

  1. Ghidra และ IDA มีขนาดขั้นต่ำที่ผูกไว้กับขนาดของสตริงเพื่อกู้คืนประเภทที่ถูกต้อง (ghidra มีขีด จำกัด - หรือขอบเขตล่างที่ 5)
  2. สิ่งนี้จำเป็นเพื่อหลีกเลี่ยงผลบวกที่ผิดพลาดหรือประเภทที่ขัดแย้งกัน และกู้คืนประเภทที่ถูกต้องโดยไม่ต้องทำเครื่องหมายตัวชี้เป็นสตริง ดูรูปนี้เพื่อเป็นข้อมูลอ้างอิงของคุณ สร้างขึ้นโดยใช้การวิเคราะห์อัตโนมัติของ Ghidra

ใน Ghidra คุณสามารถเปลี่ยนขีด จำกัด นี้ได้ (ขั้นต่ำคือ 4) ในส่วนการวิเคราะห์

  1. Stringsคำสั่งจะแสดงอักขระที่พิมพ์ได้โดยมีขนาดต่ำสุด 4 (และไม่ได้ใช้อัลกอริธึมการกู้คืนประเภทที่ซับซ้อนเช่น ghidra หรือ Ida) ฉันเชื่อว่าคุณมีสตริงที่มีความยาวน้อยกว่า 5 และฉันเดาว่าต้องเป็น 4 จึงจะแม่นยำ
  2. โดยปกติสตริงจะถูกกำหนดไว้ใน.rodataส่วน หากคุณดับเบิลคลิกที่ DAT_xxxx ระบบจะนำคุณไปยังตำแหน่งที่กำหนดสตริงนั้นไว้ ที่นั่นคุณจะเห็นไบต์ต่อเนื่องรวมกันโดย Ghidra หรือ IDA (ดังแสดงในภาพที่ 1) แต่ประเภทไม่ได้รับการแก้ไขเป็น "สตริง"
  3. ใน Ghidra วิธีที่รวดเร็วในการแก้ไขปัญหานี้โดยการเปลี่ยนประเภทข้อมูลของป้ายกำกับ DAT_xxxx: คลิกขวา -> ข้อมูล -> เลือกประเภทข้อมูล -> เลือกสตริง

การอ้างอิงซ้ำ:

  • ดูคำถามของฉันที่นี่ - https://github.com/NationalSecurityAgency/ghidra/issues/2274
  • คู่มือสตริง - https://linux.die.net/man/1/strings
  • ida pro - ฉันจะทำให้ IDA ดูการอ้างอิงสตริงได้อย่างไร