Dogbolt Decompiler Explorer
(dogbolt.org)- Dogbolt คือ Decompiler Explorer ที่ให้คุณอัปโหลดไบนารีแล้วเปรียบเทียบ ผลลัพธ์จากดีคอมไพเลอร์ หลายตัวได้ในที่เดียว
- ไฟล์ที่อัปโหลดถูกจำกัดให้มีขนาด ต่ำกว่า 2MB และมีข้อความแจ้งว่าไบนารีที่อัปโหลดจะถูกจัดเก็บไว้
- มี ตัวอย่าง ให้ลองดูวิธีการทำงานได้โดยไม่ต้องอัปโหลดไฟล์เอง
- เครื่องมือที่เชื่อมต่อรวมถึง angr, BinaryNinja, Boomerang, dewolf, Ghidra, Hex-Rays, RetDec, Snowman เป็นต้น
- ชื่อของแต่ละเครื่องมือเชื่อมโยงไปยัง เว็บไซต์หรือรีโพซิทอรี ทำให้ตรวจสอบข้อมูลของเครื่องมือได้ทันทีขณะดูผลการเปรียบเทียบ
เงื่อนไขการอัปโหลดไบนารี
- Dogbolt มีโฟลว์ให้ผู้ใช้อัปโหลดไฟล์ไบนารีเพื่อตรวจสอบผลลัพธ์การดีคอมไพล์
- ขนาดไฟล์ต้อง ต่ำกว่า 2MB
- มีข้อความแจ้งว่าไบนารีที่อัปโหลดจะ ถูกจัดเก็บไว้ พร้อมลิงก์ FAQ
ทดลองดูก่อนได้ด้วยตัวอย่าง
- มีรายการ ตัวอย่าง ที่สามารถเปิดดูได้โดยไม่ต้องอัปโหลดไฟล์เอง
- ตัวอย่างถูกจัดทำขึ้นเพื่อให้ดูผลลัพธ์จากดีคอมไพเลอร์หลายตัวแบบวางเคียงกัน
1 ความคิดเห็น
ความคิดเห็นจาก 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 เป็นคำกริยาแล้ว ก็คงสายไปแล้ว
ถ้ามีเครื่องมือคล้าย ๆ กันสำหรับสำรวจการ lift ไบนารีไปเป็น intermediate representation (IR) หลายแบบก็คงดี เช่น Ghidra p-code กับ sleigh, LLVM Machine IR, Qemu TCG อะไรทำนองนี้
BNIL ซึ่งเป็นชุด intermediate language หลายระดับที่ Binary Ninja ใช้เป็นฐาน ก็น่าสนใจเช่นกัน สามารถดูรูปแบบที่เปิดให้เห็นได้ใน UI หรือเดโมของ cloud.binary.ninja
พูดถึง decompiler แล้ว สงสัยว่าเลือก Binary Ninja จะเป็นตัวเลือกที่ปลอดภัยไหม ได้ยินว่า IDA เป็นมาตรฐาน แต่ก็แพงสำหรับคนที่อยาก reverse engineering เป็นงานอดิเรก
ส่วนตัวคิดว่าจุดแข็งที่สุดของ Binja คือ intermediate language (IL) High-level IL ทำหน้าที่เหมือน decompiler แต่ยังมี IL ระดับต่ำและระดับกลางเป็นขั้นระหว่าง assembly กับ source ด้วย ถ้าผลลัพธ์จาก decompiler ดูแปลก ๆ การดู IL จะช่วยให้เข้าใจได้ดีขึ้นว่าเกิดอะไรขึ้น และตัว IL เองก็อ่านง่ายกว่า assembly ล้วนมาก จึงได้ใช้บ่อย แพลตฟอร์มอื่นแทบไม่มีฟีเจอร์ที่เทียบกันได้จริง ๆ Ghidra กับ IDA ก็มี IL อย่างละตัว แต่เมื่อเทียบกับ IL ของ Binja ที่อ่านง่ายสำหรับมนุษย์แล้ว จะออกไปทางเหมาะให้เครื่องอ่านมากกว่า
สิ่งที่ขาดไปคือ Python scripting ซึ่งก็เป็นความต่างที่ค่อนข้างใหญ่ แต่สำหรับเครื่องมือฟรีก็ยากจะบ่นได้ IDA กับ Ghidra มีจุดแข็ง จุดอ่อน และ community plugin ต่างกัน ดังนั้นมีโอกาสสูงที่ใช้ทั้งคู่จะดีกว่า
ดีมาก ช่วงนี้ทำโปรเจกต์ emulator และกำลัง implement disassembler เองอยู่ เลยเอาแต่คิดว่าจะทำอย่างไรให้เปลี่ยน pattern ของภาษาเครื่อง เป็นรูปแบบทั่วไป แล้วแปลงเป็น pseudocode ที่คล้าย C ได้
เลยรู้สึกอยากลองทำ toy decompiler เองมากในช่วงนี้
[1] https://docs.binary.ninja/dev/bnil-overview.html
[2] https://riverloopsecurity.com/blog/2019/05/pcode/ ตัวอย่าง
มี tutorial เกี่ยวกับ decompiler ที่ดีและละเอียดพอให้คนนอกวงการอ่านบ้างไหม?
น่าจะลองเอา output ของ dogbolt ไปใส่ใน godbolt ดู
เห็นแบบนี้แล้วคิดว่าแทบไม่ต้องโน้มน้าวบริษัทอื่น ๆ มากนัก พวกเขาน่าจะตระหนักว่าขนาดไบนารีที่เล็กและการเทียบกับคู่แข่งจะนำไปสู่ธุรกิจที่มากขึ้น
ดูเป็นโซลูชันเล็ก ๆ ที่เหมาะมากสำหรับแยกแยะปัญหาระหว่างบริการและเปรียบเทียบวิธีแก้
ค่าใช้จ่ายไม่ได้ถูกเป็นพิเศษ การรัน decompiler ใช้ทรัพยากรประมวลผลค่อนข้างมาก และโดยเฉพาะ decompiler บางตัวก็พูดได้ยากว่ามีประสิทธิภาพดี
ถ้าได้เห็นตอนที่โพสต์เมื่อปีที่แล้วก็คงดีมาก เจ๋งจริง ๆ และสะดวกมาก