2 คะแนน โดย GN⁺ 2023-12-05 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Dogbolt คือ Decompiler Explorer ที่ให้คุณอัปโหลดไบนารีแล้วเปรียบเทียบ ผลลัพธ์จากดีคอมไพเลอร์ หลายตัวได้ในที่เดียว
  • ไฟล์ที่อัปโหลดถูกจำกัดให้มีขนาด ต่ำกว่า 2MB และมีข้อความแจ้งว่าไบนารีที่อัปโหลดจะถูกจัดเก็บไว้
  • มี ตัวอย่าง ให้ลองดูวิธีการทำงานได้โดยไม่ต้องอัปโหลดไฟล์เอง
  • เครื่องมือที่เชื่อมต่อรวมถึง angr, BinaryNinja, Boomerang, dewolf, Ghidra, Hex-Rays, RetDec, Snowman เป็นต้น
  • ชื่อของแต่ละเครื่องมือเชื่อมโยงไปยัง เว็บไซต์หรือรีโพซิทอรี ทำให้ตรวจสอบข้อมูลของเครื่องมือได้ทันทีขณะดูผลการเปรียบเทียบ

เงื่อนไขการอัปโหลดไบนารี

  • Dogbolt มีโฟลว์ให้ผู้ใช้อัปโหลดไฟล์ไบนารีเพื่อตรวจสอบผลลัพธ์การดีคอมไพล์
  • ขนาดไฟล์ต้อง ต่ำกว่า 2MB
  • มีข้อความแจ้งว่าไบนารีที่อัปโหลดจะ ถูกจัดเก็บไว้ พร้อมลิงก์ FAQ

ทดลองดูก่อนได้ด้วยตัวอย่าง

  • มีรายการ ตัวอย่าง ที่สามารถเปิดดูได้โดยไม่ต้องอัปโหลดไฟล์เอง
  • ตัวอย่างถูกจัดทำขึ้นเพื่อให้ดูผลลัพธ์จากดีคอมไพเลอร์หลายตัวแบบวางเคียงกัน

เครื่องมือดีคอมไพเลอร์ที่เชื่อมต่อ

1 ความคิดเห็น

 
GN⁺ 2023-12-05
ความคิดเห็นจาก Hacker News
  • อยากบอกว่าขอบคุณคนที่โพสต์ที่รอจนถึงสัปดาห์นี้ อาจเป็นผลจากที่เพิ่งพูดถึงใน C++ Weekly และเป็นแหล่งข้อมูลที่ดี: https://www.youtube.com/watch?v=h3F0Fw0R7ME
    จนถึงสัปดาห์ก่อนยังมีปัญหาด้านประสิทธิภาพค่อนข้างหนัก แต่ตอนนี้คิว (https://dogbolt.org/queue) ดูโดยรวมโอเคแล้ว ถ้าไม่นับคอขวดที่ยาวซึ่งมี decompiler บางตัวค้างอยู่ ก็ทำงานได้ค่อนข้างลื่น และ Josh กับ Glenn ก็ปรับปรุงมาได้ยอดเยี่ยม: https://github.com/decompiler-explorer/decompiler-explorer/c...

  • บทความที่เกี่ยวข้อง: Decompiler Explorer - https://news.ycombinator.com/item?id=32079227 - กรกฎาคม 2022, 82 ความคิดเห็น

  • ตอนทำวิจัยปริญญาเอก โดยเฉพาะตอนทำเรื่อง ดีปเลิร์นนิงสำหรับโค้ดที่ถูก obfuscate น่าจะต้องการสิ่งนี้จริง ๆ
    ช่วงแรกของการทดลอง Ghidra ไม่ค่อยเข้ากับ multiprocessing และมีข้อมูลต้องประมวลผลเยอะ เลยย้ายไปใช้ angr บางที Ghidra อาจทำได้เหมือนกัน แต่การทำงานเดียวกันด้วย angr ง่ายกว่ามาก ชื่อก็ชอบด้วย แต่อยากชี้ไว้ว่า Compiler Explorer คือชื่อโปรเจกต์ ส่วน Godbolt เป็นนามสกุลของผู้เขียน แต่ถ้าถึงขั้นใช้ Godbolt เป็นคำกริยาแล้ว ก็คงสายไปแล้ว

    • รู้แล้ว เช่นเดียวกัน GitHub repository จริง ๆ ก็ชื่อ Decompiler Explorer: https://github.com/decompiler-explorer/decompiler-explorer/
    • สงสัยว่ามีความคืบหน้าที่ดีบ้างไหมในการ ถอด obfuscation หรือ decompile โค้ดภาษาเครื่อง ด้วยเทคนิค machine learning
  • ถ้ามีเครื่องมือคล้าย ๆ กันสำหรับสำรวจการ lift ไบนารีไปเป็น intermediate representation (IR) หลายแบบก็คงดี เช่น Ghidra p-code กับ sleigh, LLVM Machine IR, Qemu TCG อะไรทำนองนี้

    • เมื่อเริ่มจากไบนารีทั้งไฟล์ intermediate representation มักไม่เหมาะให้คนดูชิ้นเล็ก ๆ เท่าไร วิธีนั้นน่าจะเวิร์กดีเฉพาะกับชิ้น assembly ที่เล็กมาก ๆ
      BNIL ซึ่งเป็นชุด intermediate language หลายระดับที่ Binary Ninja ใช้เป็นฐาน ก็น่าสนใจเช่นกัน สามารถดูรูปแบบที่เปิดให้เห็นได้ใน UI หรือเดโมของ cloud.binary.ninja
    • Qemu ทำงานโดยแปลไบนารีเป็น intermediate representation แล้วทำงานต่อบนสิ่งนั้น Valgrind ก็เหมือนกัน และเครื่องมือ optimization ชื่อ bolt ที่เกี่ยวข้องกับ Facebook ก็ใช้ไอเดียเดียวกัน
  • พูดถึง decompiler แล้ว สงสัยว่าเลือก Binary Ninja จะเป็นตัวเลือกที่ปลอดภัยไหม ได้ยินว่า IDA เป็นมาตรฐาน แต่ก็แพงสำหรับคนที่อยาก reverse engineering เป็นงานอดิเรก

    • decompiler ของ Binja โดยรวมใช้ได้ดี ยังไม่ mature เท่า IDA หรือ Ghidra แต่ก็ไม่ใช่ decompiler ที่แย่
      ส่วนตัวคิดว่าจุดแข็งที่สุดของ Binja คือ intermediate language (IL) High-level IL ทำหน้าที่เหมือน decompiler แต่ยังมี IL ระดับต่ำและระดับกลางเป็นขั้นระหว่าง assembly กับ source ด้วย ถ้าผลลัพธ์จาก decompiler ดูแปลก ๆ การดู IL จะช่วยให้เข้าใจได้ดีขึ้นว่าเกิดอะไรขึ้น และตัว IL เองก็อ่านง่ายกว่า assembly ล้วนมาก จึงได้ใช้บ่อย แพลตฟอร์มอื่นแทบไม่มีฟีเจอร์ที่เทียบกันได้จริง ๆ Ghidra กับ IDA ก็มี IL อย่างละตัว แต่เมื่อเทียบกับ IL ของ Binja ที่อ่านง่ายสำหรับมนุษย์แล้ว จะออกไปทางเหมาะให้เครื่องอ่านมากกว่า
    • IDA Free สมัยนี้ ถ้าจัดการเฉพาะ x86_64 บน Windows/Linux ก็มีฟีเจอร์แทบทั้งหมดของ Pro แล้ว: https://hex-rays.com/ida-free/
      สิ่งที่ขาดไปคือ Python scripting ซึ่งก็เป็นความต่างที่ค่อนข้างใหญ่ แต่สำหรับเครื่องมือฟรีก็ยากจะบ่นได้ IDA กับ Ghidra มีจุดแข็ง จุดอ่อน และ community plugin ต่างกัน ดังนั้นมีโอกาสสูงที่ใช้ทั้งคู่จะดีกว่า
    • พูดตรง ๆ ก็ใช้ Ghidra ไปเถอะ มี quirks เฉพาะตัวอยู่บ้าง แต่ก็ดีทีเดียวและเป็นโอเพนซอร์ส ถ้าดีพอให้ NSA ใช้ ก็มีแนวโน้มว่าดีพอสำหรับงานอดิเรก
  • ดีมาก ช่วงนี้ทำโปรเจกต์ emulator และกำลัง implement disassembler เองอยู่ เลยเอาแต่คิดว่าจะทำอย่างไรให้เปลี่ยน pattern ของภาษาเครื่อง เป็นรูปแบบทั่วไป แล้วแปลงเป็น pseudocode ที่คล้าย C ได้
    เลยรู้สึกอยากลองทำ toy decompiler เองมากในช่วงนี้

  • มี tutorial เกี่ยวกับ decompiler ที่ดีและละเอียดพอให้คนนอกวงการอ่านบ้างไหม?

    • ดูเหมือนจะมี demand อยู่ ใครพอจะแนะนำทิศทางให้ใช้อ้างอิงได้ไหม?
  • น่าจะลองเอา output ของ dogbolt ไปใส่ใน godbolt ดู

    • เป็น machine translation สำหรับโค้ดภาษาเครื่อง ตามทฤษฎีแล้วควรไปถึง fixed point
    • อาจ train LLM ด้วย reinforcement learning ให้กู้คืนโค้ดต้นฉบับได้ด้วย
  • เห็นแบบนี้แล้วคิดว่าแทบไม่ต้องโน้มน้าวบริษัทอื่น ๆ มากนัก พวกเขาน่าจะตระหนักว่าขนาดไบนารีที่เล็กและการเทียบกับคู่แข่งจะนำไปสู่ธุรกิจที่มากขึ้น
    ดูเป็นโซลูชันเล็ก ๆ ที่เหมาะมากสำหรับแยกแยะปัญหาระหว่างบริการและเปรียบเทียบวิธีแก้

    • จริง ๆ แล้วก็ใช้เหตุผลนั้นแหละ โซลูชันเชิงพาณิชย์หลักสองตัวที่รวมอยู่คือ Binary Ninja และ Hex-Rays เป็นผู้รับผิดชอบค่าโฮสติ้งทั้งหมด อ้างอิงเพิ่มเติม ผมเป็นหนึ่งในผู้ร่วมก่อตั้งของ Vector 35 ผู้สร้าง Binary Ninja
      ค่าใช้จ่ายไม่ได้ถูกเป็นพิเศษ การรัน decompiler ใช้ทรัพยากรประมวลผลค่อนข้างมาก และโดยเฉพาะ decompiler บางตัวก็พูดได้ยากว่ามีประสิทธิภาพดี
  • ถ้าได้เห็นตอนที่โพสต์เมื่อปีที่แล้วก็คงดีมาก เจ๋งจริง ๆ และสะดวกมาก