2 điểm bởi GN⁺ 2023-12-05 | 1 bình luận | Chia sẻ qua WhatsApp
  • Dogbolt là một Decompiler Explorer cho phép tải binary lên để so sánh kết quả từ nhiều decompiler tại một nơi
  • Tệp tải lên bị giới hạn dưới 2MB, và có thông báo rằng các binary đã tải lên sẽ được lưu trữ
  • Cung cấp mẫu để có thể xem cách hoạt động mà không cần trực tiếp tải tệp lên
  • Các công cụ được kết nối bao gồm angr, BinaryNinja, Boomerang, dewolf, Ghidra, Hex-Rays, RetDec, Snowman, v.v.
  • Tên mỗi công cụ được liên kết tới website hoặc kho lưu trữ, giúp kiểm tra ngay thông tin công cụ khi xem kết quả so sánh

Điều kiện tải binary lên

  • Dogbolt cung cấp quy trình để người dùng tải tệp binary lên và xem kết quả decompile
  • Kích thước tệp phải dưới 2MB
  • Có hiển thị thông báo rằng binary đã tải lên sẽ được lưu trữ, kèm liên kết FAQ

Có thể xem trước bằng mẫu

  • Có danh sách mẫu có thể xem mà không cần trực tiếp tải tệp lên
  • Các mẫu được cấu hình để xem song song kết quả từ nhiều decompiler

Các công cụ decompiler được kết nối

1 bình luận

 
GN⁺ 2023-12-05
Ý kiến trên Hacker News
  • Muốn nói lời cảm ơn người đăng vì đã đợi đến tuần này. Có lẽ là do ảnh hưởng từ tập C++ Weekly gần đây, và đây là tài liệu hay: https://www.youtube.com/watch?v=h3F0Fw0R7ME
    Cho đến tuần trước, vấn đề hiệu năng còn khá nghiêm trọng, nhưng giờ hàng đợi (https://dogbolt.org/queue) nhìn chung có vẻ ổn. Ngoại trừ một số nút thắt dài do vài decompiler bị tồn đọng, mọi thứ chạy khá mượt, và Josh cùng Glenn đã cải thiện rất tốt: https://github.com/decompiler-explorer/decompiler-explorer/c...

  • Bài liên quan: Decompiler Explorer - https://news.ycombinator.com/item?id=32079227 - tháng 7/2022, 82 bình luận

  • Hồi làm nghiên cứu tiến sĩ, nhất là khi xử lý deep learning cho mã bị làm rối, mình thật sự đã cần thứ này
    Giai đoạn đầu thử nghiệm, Ghidra không hợp lắm với multiprocessing và có rất nhiều dữ liệu cần xử lý, nên mình chuyển sang angr. Có lẽ vẫn có thể làm bằng Ghidra, nhưng làm cùng việc đó với angr dễ hơn nhiều. Cũng thích cái tên này. Dù vậy, cũng muốn nhắc rằng Compiler Explorer mới là tên dự án, còn Godbolt là họ của tác giả; nhưng nếu đã đến mức dùng Godbolt như một động từ thì có lẽ con thuyền đã rời bến rồi

  • Sẽ rất hay nếu có một công cụ tương tự để khám phá việc lift binary sang nhiều biểu diễn trung gian (IR) khác nhau. Ví dụ như Ghidra p-code và sleigh, LLVM Machine IR, Qemu TCG

    • Khi bắt đầu từ toàn bộ binary, các biểu diễn trung gian thường không phù hợp để con người xem xét các đoạn nhỏ. Cách đó có lẽ chỉ hợp với những mẩu assembly rất nhỏ
      BNIL, một tập hợp nhiều tầng ngôn ngữ trung gian mà Binary Ninja dựa vào, cũng có thể thú vị. Có thể thấy dạng được phơi bày trong UI hoặc demo của cloud.binary.ninja
    • Qemu dịch binary sang biểu diễn trung gian rồi làm việc trên đó. Valgrind cũng vậy, và một công cụ tối ưu hóa tên bolt liên quan đến Facebook cũng dùng cùng ý tưởng
  • Nhân tiện đang nói về decompiler, không biết chọn Binary Ninja có phải lựa chọn an toàn không. Nghe nói IDA là chuẩn, nhưng nó cũng đắt đối với người muốn reverse engineering như sở thích

    • Decompiler của Binja nhìn chung ổn. Chưa trưởng thành bằng IDA hay Ghidra, nhưng không phải decompiler tệ
      Cá nhân tôi thấy điểm mạnh lớn nhất của Binja là ngôn ngữ trung gian (IL). IL cấp cao đóng vai trò như decompiler, nhưng giữa assembly và source còn có IL cấp thấp và cấp trung. Nếu kết quả decompile hơi kỳ, xem IL sẽ giúp hiểu rõ hơn chuyện gì đang xảy ra; bản thân IL cũng dễ đọc hơn assembly thuần rất nhiều nên tôi dùng thường xuyên. Trên các nền tảng khác hầu như không có tính năng tương ứng đúng nghĩa. Ghidra và IDA mỗi bên cũng có một IL, nhưng so với IL dễ đọc cho con người của Binja thì chúng thiên về dễ đọc cho máy hơn
    • IDA Free hiện nay có gần như đầy đủ tính năng của bản Pro nếu bạn chỉ xử lý x86_64 trên Windows/Linux: https://hex-rays.com/ida-free/
      Thứ thiếu là scripting bằng Python, và đó là khác biệt khá lớn. Dù vậy, với công cụ miễn phí thì khó mà phàn nàn. IDA và Ghidra có điểm mạnh, điểm yếu và các plugin cộng đồng khác nhau, nên nhiều khả năng tốt nhất là dùng cả hai
    • Thành thật mà nói, cứ dùng Ghidra là được. Nó có những quirks riêng, nhưng khá tốt và là mã nguồn mở. Nếu đủ tốt để NSA dùng thì nhiều khả năng cũng đủ cho mục đích sở thích
  • Rất hay. Gần đây khi làm một dự án emulator, tôi đang tự triển khai disassembler và cứ nghĩ mãi phải làm thế nào để biến mẫu mã máy thành dạng tổng quát rồi chuyển thành pseudocode kiểu C
    Vì vậy dạo này tôi rất muốn tự làm một decompiler đồ chơi

  • tutorial về decompiler nào đủ hay và chi tiết cho người không chuyên xem không?

    • Có vẻ là có nhu cầu. Ai có thể chỉ hướng tham khảo được không?
  • Có thể lấy output của dogbolt đưa vào godbolt là được

    • Đây là dịch máy dành cho mã máy. Về lý thuyết thì nó phải đạt đến một điểm cố định
    • Cũng có thể dùng reinforcement learning để huấn luyện LLM khôi phục mã gốc
  • Nhìn cái này thì có lẽ cũng chẳng cần thuyết phục các công ty khác nhiều. Họ hẳn đã nhận ra rằng kích thước binary nhỏ và so sánh với đối thủ sẽ dẫn tới nhiều business hơn
    Trông như một giải pháp nhỏ rất phù hợp để phân loại vấn đề giữa các dịch vụ và so sánh cách giải quyết

    • Thực tế đúng là logic đó. Hai giải pháp thương mại chính được đưa vào, Binary NinjaHex-Rays, chi trả toàn bộ chi phí hosting. Nói thêm là tôi là một trong các đồng sáng lập Vector 35, công ty tạo ra Binary Ninja
      Chi phí không hẳn là rẻ. Chạy decompiler tốn khá nhiều tài nguyên tính toán, và đặc biệt có một số decompiler khó có thể nói là hiệu quả
  • Giá mà tôi thấy nó khi được đăng năm ngoái. Thật sự rất tuyệt và cực kỳ tiện lợi